2009-03-14 20 views
19

私はC#を終日コードしていますが、最近はBlackBerryやAndroidプラットフォーム用の趣味用のJavaへのジャンプを行っています。今回は、言語の機能が分かれば、JavaとC#はお互いに双子関係にあると私は考えていました。Javaはちょっとつかまえていませんか?

とにかく、私はJavaがC#1.1やそれに類するものであることを発見しました。 Javaでは、私はC#のコードを2回書く必要があります。オブジェクトイニシャライザ、ラムダ、神のためのプロパティなどの機能は、Javaにも登場していますか?私はJSRのものを歩き回りましたが、何も見つかりませんでした。

Javaは単純に保たれていませんか?それとも、私はそれを意図したとおりに使用していないのですか?

+2

この質問はなぜ閉じたのですか?答えから判断すると、ほとんどの人は、Javaが実際には言語機能に関してC#に劣っていることに同意します。また、クロージャーのような特徴の欠如は、客観的に決定することができます。 – javashlook

+2

私は確かに宗教戦争を始める方法としてそれを求めなかった。それがなぜ閉鎖されたのか分かりません。 – AngryHacker

答えて

10

私はあなたが正しいと思いますが、JavaにはC#が導入した便利な新機能はあまりありません。新しいC#の多くの機能は、C#またはJavaで手で行うことができる(プロパティ、オブジェクトインテイアライザー、拡張メソッド)のコンパイルトリックです。

Javaの人々はおそらく、これらの新しい機能を導入していない可能性があります。可能であれば、言語をシンプルで後方互換性のあるものにすることが望ましいからです。

私はこれらの日を書くのが好きです。

8

私は、はい、Javaはそれを維持していないと言います。マイクロソフトはJava(およびC++)を長らく見直し、何が困っていたのか、またどの機能が欠落しているのかを把握し、C#の後続リリースで多くの機能を修正しました。

また、Javaデザイナーはできるだけシンプルな言語とパーザーを維持しようとしていますが、C#デザイナーは構文的な砂糖の恐れがありません。プロパティ、デリゲート、ラムダ、LINQはすべてこの例です。すでに気づいたように、一杯の文法的な砂糖は、言語をずっと簡単にすることができます。

6

言語が古くなるほど、コードベースは大きくなり、既存のコードベースを壊さないためには、修正するのに費用がかかるため、言語の変更はより慎重に行われます。

Javaは古い言語の1つです。 C#は比較的新しいものであり、より根本的に変更する余裕があります。 10年間変化しなかったCやC++と比較してください。

本当に新しいコードの新しい言語機能が必要な場合は、Java(Groovy、Scala、Clojure)と相互運用する別のJVMベースの言語を試してみてください。

+1

古い言語がVB6でない限り!既存のVB6プログラムをお持ちの場合は、マイクロソフトがあなたのアプリケーションを書き直すための素敵な新しい言語を用意しています。あなたの組織が破産し、競合他社があなたの製品を無関係に改革する前に終了するかもしれません。 – MarkJ

7

Javaは確かに後退していますが、C#1.1よりもC#2.0に近いと言えますが、例えばC#のものとは多少異なりますがジェネリックがあります。

私が提案した言語機能の多くは、Java 7のために(特に、クロージャを)落としてきたと聞いてがっかりしましたが、その後Project Coinは一緒に来て - 私たちはを楽しみに一部小さな特徴を持っているかもしれない、少なくともので。

JavaがC#に追いつくのはすぐには言語の言葉ではわかりません。言語の変更により、言語を変更するのが難しくなります。簡単に聞こえるかもしれませんが、チェックされた例外は、メソッドのシグネチャに余分な "軸"を追加して、それ以外の場合よりもトリッキーなものにします。

(もちろん、C#4.0もあまりにも魅力的です...)

1

これは、チョークvsキャビアーのようなWPFとSwingの違いではありません。

4

本当にあなたは正しいです。しかし、言語の改良の焦点は、新しいJVM言語(例えば、GroovyScala)にかなりシフトしていると思います。

Javaは重要なユーザーベースを持っているため、残念なことに、どの機能があるのか​​、またその言語にどのような機能を追加する必要があるのか​​については、ほとんど同意できません。たとえば、pollを見てください。一方、Sunは、invokedynamic命令、JSR 292などの動的JVM言語の開発と実行を容易にするJVMの改善を約束しました。

私にとってこれはまともな妥協です。

5

私は問題の一部が経済だと思います。 Sunがマーケットプレイスのトッププレーヤーだったとき、Javaが登場したのは偶然ではありません。彼らの株式は、ドットコム企業が購入していたすべてのサーバーに支えられ、2000年3月に過去最高を記録しました。

バブルが破裂し、これらのサーバーがすべて市場に出たとき、その過ぎ去るまでには長い時間がかかりました。 Sunはそれから回復していません。コモディティサーバーのパワーが高まったことで、RISC特有のチップとSolarisが以前に持っていた特長が失われました。あなたが経済力でなければ、あなたは大きな軍事力になることはできません。この規模の革新者でも現金が必要です。

彼らは、会社に燃料を供給していた多くの才能(例:ビルジョイ)を失っています。

Sunは、その下に、ハードウェア会社です。特にサーバー側でのJavaの戦略は、ハードウェアの販売促進に役立つということでした。

Javaのための変化のペースは、すべてのために苦しんだと思います。

マイクロソフトでは、収益が継続しているため、C#の開発を続けています。アンダーズ氏はまだ彼らと共におり、最終的に製品から収益を上げるソフトウェア企業です。だからこそ彼らは前進しています。

+1

Microsoftはすべて「開発者開発者の開発者」であるため、言語を開発しています。オペレーティングシステムを販売しようとしている場合、ソフトウェア開発者がオペレーティングシステム用のソフトウェアを開発することが最も重要です。 – MarkJ

+1

マイクロソフトの双子の現金牛、オペレーティングシステムとオフィスがこれまでに代わっても、私は「開発者」もバックバーナーを使うだろうと考えている。現金が戦略を推進しているのか、それとも反対の方向に動いているのか?あなたは両方が必要です。 – duffymo

+0

私の主張は、開発を推進するC#の収益ではなく、現金牛の収入です。それはあなたの答えの言葉から私にはっきりと分かりません - 彼らは "製品からのお金"を作ります - どの製品ですか? +1とにかく – MarkJ

関連する問題