JVMとJavaのWORAは、他の高レベル言語とどのように違いますか?


11

Javaの世界では、JVMについてよく話しますが、Javaが新しくなったとき、おそらく「Write Once、Run Anywhere」というキラー機能がありました。

人々が話したり書いたりする方法からすると、これは、たとえばPythonが機能する方法とは異なるようです。しかし、私が書いたPythonコードが別のマシンで異なる方法で動作することを認識していません。(私はそれほど多くのPythonを書いていませんが。)

だから私は何が欠けていますか?JVMはPythonインタープリターとどう違うのですか?PythonにJavaのプラットフォームに依存しない方法はありますか?または、これは単なる文化的な違いですか?


1
主な違いは、JVM仕様の厳格さです。それは、それがどのように振る舞うべきであるか(するべきではないか)を非常に明確に定義しています。

回答:


16

Javaは、基盤となるOSからユーザーを隔離する上で非常に優れた仕事をし、基盤となるOSのことを話すために動作するほとんどのプラットフォームで同じ正確なツールを提供します。

一方、Pythonは、基礎となるOSからユーザーを隔離するという点では役に立たず、プロセス通信間の標準的な処理方法がありません(Windowsと*の間のsysモジュールとosモジュールの違いを見てください)たとえば、Pythonのnix実装。)

私は、Pythonで利用可能なPython呼び出しのみを使用して* NIXボックスまたはWindowsボックスでのみ動作するPythonでコードを記述しましたが、Javaでは、両方で同じように動作しないJava APIであるコードを書くことは非常に困難ですWindowsボックスまたは* NIXボックス


1
Windowsでのみ動作するJavaコードを書くことは決して難しくありません。「C:\ MyApp \ data」のようなWindowsファイルパスをハードコーディングするだけです
ケビンcline 14年

@kevinclineハードコーディングされたパスは、どのオペレーティングシステムでも悪い習慣です。ただし、Javaは、ユーザーディレクトリや現在のプログラムのインストールパスなどの一般的なディレクトリを取得するためのOSに依存しないメソッドを提供するため、これを行う必要はありません。
フィリップ14

3

局所的に、そして単に言語ランタイムから、ほとんど違いはありません。特にJVMは、インタープリターとしてだけでなく、ランタイムコンパイラー、コード推論、動的フックを適用できるインストルメンタル仮想化レイヤー、さまざまなGCセマンティクス、および仮想化人間工学を説明する機能としても設計されています。PythonはJVMで実行できますか?JavaはPythonインタープリターで実行できますか?

ほとんどのインタープリターは、実行時言語/トークンインタープリター、JVM(およびその他)であり、ご存知のように中間コードをインタープリター/コンパイル/実行します。たとえば、IBMはJava以外で何十年もこれを行ってきましたが、目新しいものではありません。VBでさえ、しばらくの間、中間コードで実行されましたか?

現在、多くのインタープリタ言語がほぼどこでも変更されずに実行されているため、WORAはほとんどが無効です。


3

Javaが新しい頃、WORAは自慢すべきものでした。具体的には、1つのプラットフォームでコンパイルし、他のプラットフォームでそれを(コンパイルされたバイトコードで)実行できるということです。

もちろん、インタープリターが実行されているプラ​​ットフォームに関係なく、インタープリター言語はほぼ同様に実行されます(インタープリターがそのプラットフォームで使用可能な場合)。ただし、ファイルシステム、アクセス許可の問題、エンコード、行末、その他の小さいながらも刺激的な問題が頭痛の種になります。プラットフォームに依存するものは、簡単に抽象化することはできません。


1

Pythonにはプラットフォームに依存しないGUIがありますか?

とにかく、Cが基礎となるプラットフォームを厳密にモデル化する傾向があり、プラットフォームが異なるため(ワードのサイズ?

Javaの約束は、プラットフォームが非常に明確に定義されており、charが16ビットなどであることを知っているので、このすべての退屈な作業を行う必要はないということでした。プログラムは、聞いたこともないコンピューターでも実行でき、正しく実行することさえできます。


6
Pythonは、いくつかのプラットフォームに依存しないGUIの選択肢を持っている:docs.python.org/faq/...
Joonas Pulakka

Java GUIは、さまざまなプラットフォームで適切に表示されないことで悪名高いので、その側面について正確には自慢しません。しかし、私はあなたの声明の残りに同意します。
怒り

-4

JavaがWORAではないことを強調してます。Javaがマイナーバージョン番号でより高いバージョンにアップグレードされた後に、Javaソフトウェアが壊れたのを見ました。私見、WORAは単なるマーケティングの仕掛けです。


1
これは実際には質問に対する答えではありません。
エリックウィルソン

-1は、Javaがすべての実用的な目的でWORAであるためです。それはなりますが、システム固有のハックと明らかにJNIのようなネイティブのものを避ける場合に動作します。同じコンパイル済み.jarファイルを使用して、50,000以上のラインアプリケーションをWindows、Mac、Linuxで完全に実行し、変更なしで初めて実行しました。純粋なJavaに固執する場合は、すべて正常に機能します。
ミケラ

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