Java をプラットフォームに依存しないと呼ぶのは、Java には任意のプラットフォームでバイトコードを独立して実行できる仮想マシン JVM があるためです。
ただし、そのシステムに JVM をインストールする (または常駐させる) 必要があります。
では、他の既存の言語用に JVM のような仮想マシンを作成し、それらの言語をプラットフォーム非依存と呼んでみませんか?
Java をプラットフォームに依存しないと呼ぶのは、Java には任意のプラットフォームでバイトコードを独立して実行できる仮想マシン JVM があるためです。
ただし、そのシステムに JVM をインストールする (または常駐させる) 必要があります。
では、他の既存の言語用に JVM のような仮想マシンを作成し、それらの言語をプラットフォーム非依存と呼んでみませんか?
頭の上にいくつかの理由を考えることができます。
長いです
時間がかかる。基本的に、高水準言語と中間言語 (バイトコード) の 2 つのプログラミング言語を作成しています。つまり、2 つの設計を考え、コンパイラ、レクサー、リンカー、および付随するすべてのツールを作成します。特に Java や C# などの成熟したものと比較する必要があるため、人気が出るという保証はありません。次に、そこにあるすべてのオペレーティングシステム、すべてのファイルシステム、および同様の変数依存関係ごとにコーディングする必要があります (文字通りではありませんが、多ければ多いほど良いです)。Oracle でさえ完璧な仕事をしているわけではありません。I/O を参照してください。
あなたは本当に良いパフォーマンスを達成する必要があります
つまり、ユーザーが気付かないうちに、実行中にコードをコンパイルして最適化する必要があります。初めて(バイトコードに)コンパイルするだけでは十分ではありませんでした。一朝一夕でできるものではありません。また、JVM、.NET、ART など、すでに存在する多くのものを打ち負かす必要があります。
それにもかかわらず、世の中には多くの仮想マシンがあり、おそらくさらに多くの仮想マシンが作られています。また、既に作成された VM のバイトコードにコンパイルする方が簡単なので、たとえば JVM で動作する Jython がありますが、その高レベル部分は実際には (非常に似た) Python です。
思い出したので追加します。
編集:用語を混同しているように見えるので、これを明確にするために:プラットフォームに依存しないアプリを作成するためにVMは必要ありません(すべてのOS用にコンパイルできます)。すべてのVMがすべてのOSで動作するわけではありません(例. NET は Windows でのみ動作します)。