13

この質問は最初はばかげているように聞こえるかもしれませんが、まったくそうではないかもしれません。

  • Java は Java 言語ではありません。Java はScala や Groovy などの他の多くの言語でプログラミングできるため、ほとんどの人はそのことを知っています。

  • Java は具体的な VM の実装ではありません。SUN、Microsoft、IBM だけでなく、他の実装もあるからです。

  • Java はクラス フレームワークではありません。多くの実装では、自由にクラスを追加したり除外したりします。

  • 一般的な VM 仕様や Java バイトコードを使用する必要さえありません。Dalvik VMを参照してください。

  • それが何であれ、それは彼らが共有する一連の原則に過ぎないのかもしれません。これは、少なくとも Dalvik と Microsoft VM/J# には当てはまらないため、「一度書けばどこでも実行できる」というわけではありません。

問題は、Java とは正確には何なのかということです。正確な定義さえありますか?

EDIT 多くの人が、Java はプログラミング言語のみを意味するという意見を持っているようです。したがって、Java 対応の携帯電話は、Java 言語のみで作成されたクラス ファイルで構成されるプログラムをユーザーが使用できる電話でなければなりません。これが本当なら、Java 仮想マシン / Java ランタイム環境 / Java 開発キットは Java 専用に作られ、他の jvm 言語には独自の対応する xvm / xre / xdk があります。

4

7 に答える 7

39

実際、Java は Java 言語ですGroovy、Scalaなどは、JVM で実行できる同等のバイトコードにコンパイルしますが、それらJava ではありません。

正式には、Java はJLSです。

于 2010-11-12T16:30:39.903 に答える
6

Java はプログラミング言語です。構文部分。

于 2010-11-12T16:30:09.577 に答える
5

厳密に言えば、Java は単なるプログラミング言語です。しかし、これは非常に多くの標準 (たとえば、多くの API や JVM 仕様など) を含むプログラミング言語です。そのため、SUN などはそれをプラットフォームと呼んでいます。

Scala、Ruby などの他の言語は Java ではなく、Java 仮想マシンで実行されるバイト コードにコンパイルされるだけです。これらは Java プラットフォーム上に構築されているだけで、それ自体は Java ではありません。

JVM は高度に標準化されており、多くの企業が自社のハードウェア プラットフォームに独自の実装を提供できます。これも Java ではありません。これらは Java プラットフォームの一部の実装にすぎません。

Java VM 仕様は 100% 標準化されたものであり、Oracle が Java の著作権を主張しているため、Oracle によって強制されています。そのため、Android (Dalvik VM) は現在、Google に対する Oracle の訴訟の対象となっています。

于 2010-11-12T17:43:38.383 に答える
5

私の意見では、それは言語です。Groovy を使って Java をプログラミングしていると言う人はいないと思います。

于 2010-11-12T16:30:10.930 に答える
3

実際には、その単語が使用される文脈によって異なります。構文、テクノロジー、フレームワーク、プログラミング言語のすべてです。

補足として、Oracle はこの質問に次のように答えています。Java とは何ですか?

于 2010-11-12T16:38:58.593 に答える
2

たまたまフォークで髪を梳いているからといって、フォークがくしであると言えるのと同様に、Scala が Java であるとは言えません。または、古典的な例えを挙げれば、レンチで釘を打ってもハンマーにはなりません。

必要に応じて、COBOL を C++ にコンパイルするコンパイラを作成できますが、それは COBOL が C++ であることを意味しません。

多くの言語はターゲットのコンパイル済み言語として x86 マシン コードを使用していますが、これはそれらがすべて同じであることを意味しますか?

他の言語が JVM のバイトコードにコンパイルできるかどうかは問題ではなく、Java を特定のアーキテクチャのマシン コードにコンパイルできるかどうかも問題ではありません。JVM は依然として Java のプラットフォームです。他の言語はたまたまそれを共有しており、Java はたまたま JVM バイトコード以外のターゲットにコンパイルできるようになっています。フォークと同じように、扱い方次第でたまたま髪を梳くことができます。

これはばかげた質問だと思います (プログラミングとは何の関係もありません)。誰かがルネッサンスの哲学者のように振る舞って、あなたのフォークが実際には櫛であると主張しようとすることはありえますか? もちろん、先に進んで議論してください。おそらくあなたは主張することさえできますが、誰もそれを聞いて時間を無駄にしないことを願っています. これは単なるセマンティクスのゲームであり、セマンティクスについて議論し始めると、誰もが負けます。

(編集) ばあ!セマンティクスについて議論していることに気付きました!

于 2010-11-14T19:05:11.560 に答える
1

ほとんどの人は、Java をプログラミング言語と見なしています (Java 言語仕様で定義されています)。しかし、それをプログラミング言語、さまざまな VM、およびより大きなエコシステムに分割する人は他にもたくさんいます。

Java と呼べるものの法的定義 (たとえば、商標) もありますが、現時点ではそれをそのままにしておくことにします :-)

于 2010-11-12T16:33:00.183 に答える