JavaはC#に追いつきますか?[閉まっている]


17

今日、私はどの言語C#またはJavaを勉強する方が良いかを尋ねる質問を投稿しました。素晴らしい答えがいくつかありました。登場したことの1つは、おそらくJavaが新しい機能を備えたC#の背後にあるということです。私はいくつかのWebリンクを見て、ほとんどがC#に何があり、javaに何がなかったかを指摘しました。

皆さんへの私の質問は、Javaが再びC#に追いつくことでしょうか?そして、あなたが5年後にどこに立つかを推測することになった場合。おそらく今欠けているものがすべてあるでしょうか?Java 7はどうですか?


7
-1、推定および仮説。タイトルが「JavaはC#の背後にあり、もしそうなら、どのように追いつくことができるか」に変更された場合、+ 1に変更されますか?
ニコール

2
JavaとC#はSchemeに追いつきますか?匿名のファーストクラス関数、クロージャー、継続を取得したときにお知らせください。
-Dietbuddha

5
@dietbuddha:私のコードを)'sでポイ捨てしない方がいい、ありがとう。
ジョシュK

1
@JoshKで埋めたい および}、そうですか?LISPはすべての関数が括弧を使用しているため、多くの括弧を使用しているようで、ユーザーはその中に多くの関数をネストしています。
ユーリアルバカーキ

回答:


32

言語機能は、JavaとC#を動かす要素のごく一部です。最終的に、これらはより大きなJ2EEおよび.NETエコシステムの一部です。

どちらも独自の長所があり、今後5年間でさらに大きくなるはずです。


19
「言語機能はJavaとC#を
動かす要因の

1
はい、APIとライブラリは多くの点ではるかに重要です。
マイケルK

2
同意しましたが、質問は生態系ではなく言語に関するものです;)
Philippe

1
非常に短い回答での+1の投票は本当に嫌いですが、ここで何かに取り組んでいます。この答えを拡大してください。
ニコール

3
質問では、「どの言語のC#またはJavaが勉強に適しているか」と「5年後にはどこに立つか」の両方の側面で、言語よりも生態系により多く依存します。
シャミットヴァー

16

Oracleが登場するまではいと言っていただろう。過去6年ほどJavaとC#が持っていた機能の飛躍を本当に楽しんだため、これは悲しいことです。


2
OracleがJavaを妨害するのはなぜだと思いますか?

2
そこにある企業文化には、サンが機能を組み込む際に持っていたのと同じ俊敏性があるとは思わない。
ジェシーC.スライサー

8
@ Glenn、Oracle対Googleの訴訟は、彼らがオープンソースを「手に入れない」こと、そして大企業が将来の開発のためにJavaを選ぶ可能性が低いことを示しています。 groklaw.net/staticpages/index.php?page=OracleGoogle
タングレナ

Oracleはまさに「Javaをねじ込む」のではなく、JVMをねじ込む可能性があります。現在、BEAからJRockitとSunのHotSpotを買収した2つのJVM実装を結合するプロジェクトがあります。彼らはそれをしている間、彼らは完全にダ・ヴィンチ・マシンのプロジェクトを除外しました。
バルテック

2
私はOracleで混同しています。Androidのスーツは一種のターンオフですが、Linuxカーネルに貢献し、Btrfsファイルシステムの主要な開発者です。Oracleは、Microsoftよりもオープンソースを「入手」しているように見えますが、それはあまり意味がありません。
-jonescb

6

言語として、私はJavaを拡張してイノベーションを大幅に追加しません。これは、主に最先端のオープンソースコミュニティの人々がScala、Clojureなどの新しいJVM言語に集中する可能性が高いためです。 Groovy、JRuby、およびJPython。

また、Javaの下位互換性へのコミットメントは、言語機能の追加が言語の初期よりも本質的に難しいことを意味します。


5

ここでの大きな疑問符はOracleです。Sunは過去5年ほどでJavaの状況を本当に遅らせました。Javaコミュニティの多くの人々の希望は、SunがJavaをスピンオフするか、多くのリソースと労力をかける誰かに販売することでした。オラクルは確かにそれを行うことができますが、それは彼ら自身の既得権益を持つ多くのグループを持つ大企業です。私の推測、そしてまさにそれは、OracleがJavaを停滞させ、主に特許訴訟のツールとして使用するということです。

おそらく彼らはそれをいくらかの大金でGoogleに売却し、誰もが幸せになるでしょう。エンジニアやソフトウェア設計者ではなく、役員室や弁護士の手に委ねられています。

良い面では、改善がなくてもJavaは優れた言語であり、Javaの周りには素晴らしいエコシステムがあります。個人的にはC#と.netの世界を好みますが、Javaは依然として優れた選択肢です。今後は時間が経てばわかりますが、今のところ、Javaは悪くありません。(日付と時間のライブラリは除外されます...わあ、これまでにeverくて厄介なものです)


1
現在、日付/時刻の問題を克服するためのサードパーティのライブラリがあります。
マイケルK

1
Oracleは、少なくとも10gのデータベース内に存在するプログラムの言語として、PL / SQLとともにJavaを使用していました。OracleはJavaを多用しています。これがJavaを私が好きな方向に連れて行くことを意味するかどうかは疑わしいが、彼らはそれを殺すつもりはない。
デビッドソーンリー

4

追いつくものが何もないので、この質問は意味がありません。

JavaがC#を正確に複製しないからといって、Javaが何らかの形で「劣っている」ことを意味するわけではありませんが、それはまったく異なります。C#がCobolに「追いつく」のはいつかという質問もあります。


23
私は同意しません。C#とJavaは多くの点で似ており、C#とCOBOLよりもはるかに優れています。ある日、「C#はJavaが本来あるべき姿だった」と読んだことを覚えています。要約すると、私は... C#とJavaは直接競合している、と私は、私はC#の多くは、他の方法で回避のJavaの機能ではなく、と言わざるを得ない両方で働いたことを信じて
フィリップ・

C#またはJavaを使用できる状況を見つけましたか?すなわち、開発者が選択できる状況。通常、お店にはすでに好み/偏見/偏見があり、同じエコシステム上の言語間で選択するでしょう。たとえば、JavaとScalaの間、またはC#とF#の間
Shamit Verma

2
C#が行った設計上のすべての決定に同意するわけではありませんが、Javaのように、彼らはC ++の置き換えを意識的に設定しました。したがって、これらの機能が優れていると思う場合、JavaはC#に「追いつく」必要があります。具体的には、オブジェクト指向のすべてが肥大化することのないようにインラインオブジェクトを作成する機能です。デリゲートは組み込みの新機能であり、ライブラリデータ構造として構築できないということではありません。どちらもC ++に追いつく必要があると思います。
-Dov

@Philippe、彼の反論例に巻き込まれないでください。彼は、「C#がいつJavaに追いつくのか」と簡単に言うことができたでしょう。彼の論点は、JavaがC#の背後にある客観的な理由がないということです。それはすべて個人的な好みです。
jonescb

誰もレプリケーションについて話していませんが、C#には、JavaがNOWの実装を検討している重要な機能がいくつかあります(ラムダは、いオブジェクト実装でエミュレートされます)。
ユーリアルバカーキ

4

C#とJavaのどちらが先かという問題は議論の余地がありますが、どちらか一方の言語機能に焦点を当てるのではなく、言語の進化に関係することに焦点を合わせたいと思います。これは、誰も議論することはないと思う1つの事実です。JavaはC#よりも古いです。

言語の動作方法の変更に関する問題:

  1. 後方互換性を破ると、多くの開発者を怒らせます
  2. 開発者を怒らせた場合、開発者は開発者をより適切にサポートする別の言語に移行します。したがって、言語を使い続ける理由はありません。
  3. Javaは、言語を市場に投入するというプレッシャーを受けて、早期に設計上の決定を下しました。希望は、戻っていくつかの空白を埋めることでした。メンテナーが最初の点に違反したくないので、それらの決定はまだ言語を悩ませます。
  4. Javaは多くの新しい領域を燃やし、ガベージコレクションされた言語を真剣に受け止めることができることを証明しました。
  5. C#は後で登場し、Javaが偶然見つけた多くの教訓を学びました。つまり、Javaがポイント3のために持っている技術的な制限のいくつかを回避することができました。
  6. 新しい言語機能は、実際の問題を賢明な方法で解決する必要があります。すべての言語機能が、追加しようとしている言語のコンテキストで意味をなすわけではありません。JavaとC#が類似しているにもかかわらず、異なる言語であり続ける理由はここにあります。

では、C#にはJavaよりも多くの言語機能がありますか?私はそう思う。彼らは便利ですか?私はそう思う。それは、C#がJavaより優れているか、成熟しているということですか?私が同意しないこと。それらは異なり、単純で単純です。C#にはJavaのすべての機能が含まれることはないため、JavaにはC#のすべての機能が含まれることはありません。

Javaの機能の1つであるWindowsでプログラムを作成し、UnixまたはMacに展開する機能は、Microsoftのサポートによって直接実現されることはありません。なぜ聞くの?マイクロソフトが悪だからというわけではありません(それが本当かどうかは、私はあまり気にしません)。それは、彼らがSunが決してやらなかった教訓を学んだからです:一度書くだけで、オペレーティングシステムとハードウェアを共有します。オペレーティングシステムの販売から収益を上げることに関心がある場合、交換してアプリケーションを動作させるのは簡単ではありません。そうした場合、常に安価なオプションがあるため、オペレーティングシステムから利益を得ることはできません。


MonoがMSで実行されていないことが重要なのはなぜですか?モノは本当にうまく機能します。過小評価しないでください。
クーゲル

Monoを掘り下げるわけではありませんが、すべての.NET APIが直接サポートされているわけではありません。彼らは進歩を遂げており、かなり長い道のりを歩んできましたが、特にデスクトップアプリケーションには制限があります。Monoがどれだけ近づいたか、WinformsまたはWPFの実装に合法的になるかどうかはわかりません。ただし、厳密にサーバー側の作業については、互換性があると確信しています。最近調べていません。
ベリンロリチュ

私は、「Windows上でプログラムを書いて、UnixやMac上でそれを展開する能力、Microsoftのサポートによって直接起こることはありませんが、」今、反証されていると思います
JoelFan

答えを書いた時点ではそうではありませんでした。C#では、MicrosoftがMacとUnixで動作するランタイムとライブラリを作成しましたか?MonoはMicrosoftから直接開発されたものではありませんが、Microsoftの開発者が作業している場合があります。Linuxで動作するWPF上に構築されたデスクトップアプリについては、まだ疑問があります。サーバー側のみで問題ありません。
ベリンロリチュ14年

1

Javaは、CやC ++よりも新しい「機能」を実際に必要としません。これは、オブジェクト指向開発用に適切に設計された言語です。追加できるのは、さまざまなタスクを実行するためのライブラリの作成です。C#についても同じことが言えます。ほとんどの機能が追加され、言語により多くのことができるようになりました。個人的には、これらの機能のほとんどは必要ないと思います-オブジェクト指向のポインタは、ハードウェアレベルで作業している場合を除き、非常に滑らかです(この時点で、Cのようなものを使用する方がおそらく良いでしょう)。また、VMで実行すると、ハードウェアに直接アクセスするのが不可能ではないにしても、難しくなります。

Unixは、1つのことを非常にうまく行うモジュールを作成する傾向を開始しました。JavaとC#の両方が機能クリープについて少し手に負えなくなってきていると思います。フレームワークに似た巨大な多目的「言語」よりも、簡単に拡張可能なコアを作成する方が適切です。は、Javaはより良いC#よりも、この要件に適合します。


7
適切なラムダのない言語は使用可能な言語ではありません。その1つの機能がJavaに追加された場合、残りの議論に同意します。それがなければ、Javaはまったく拡張可能ではなく、ほとんど使用できません。
SKロジック

2
@Craige個人的に(意見)シンタクティックな機能が嫌いです。私は言語を自分の邪魔にならないようにしたい-非常に最小限。
マイケルK

1
@Michael-構文上の特徴を持つ言語とあなたの邪魔になる言語とのつながりを描くことができません。言語が機能を言ったからといって、それらを利用しなければならないという意味ではありません。たとえば、C#のgetterおよびsetterメソッドを取り上げます。時間の90%で、何百行もの冗長コードを書く手間が省けます。ただし、必要に応じて独自に作成することもできます。
クレイジュ

1
@Craige、言語に機能がある場合、ツール は少なくともそれらについて知る必要があります。また、Javaエコシステムの力は主にそのツールにありますが、これは言語のミニマリズムのシンプルさのために完全に可能です。
SKロジック

1
@SK、ラムダが使用できない言語をどのように言うことができるかわかりません。Cにはラムダがなく、C ++はC ++ 0xでラムダを取得し、人々はこれらの言語を何十年も使用しています。命令型プログラミングを無効にしない関数型プログラミングを好むという理由だけで。
jonescb

1

C#が追加している多くの機能には何の問題もありませんが、言語を変更する速度を考えると、Monoが遅れをとることは不可能ではないとしても意識的に難しくしています。もしそうなら、C#がJavaに追いつくのを待っていると言います。Windowsで実行するだけでは不十分です。


0

ディスカッションフォーラムを開始するつもりはありませんが、JavaはC#よりもずっと前にここにあったと思います。

質問に対する答えとして、JavaとC#は異なる言語であるため、機能だけで比較することはできません。Javaでできることは、C#ではできませんし、その逆も可能です。

最後に、これはWindows対Linuxのトピックを始めるようなものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.