web-dev-qa-db-ja.com

JVMの進歩にもかかわらず、JythonがCPythonよりもはるかに遅いのはなぜですか?

炎上戦争はしないでください。私は確かにJavaのファンではありませんが、JVMはかなりまともで最適化された仮想マシンだと思います。これはJIT対応で、一般的なCPUアーキテクチャの共通点に非常に近いものです。 CPythonランタイムは、対応するJVMベースのランタイムよりもメタルから遠く離れていると思います。

私の仮定が正しければ、JythonがCPythonと比較してパフォーマンスが大幅に低下する理由を誰かが説明できますか?私の最初の仮定は、JVMは単に静的言語用に設計されており、動的言語をそれに移植することは困難であるというものでした。しかし、Clojureはその議論の行に対する反例のようです。

一方、IronPythonはうまく機能しているようです。両方のプロジェクトの主任開発者は同じであると私は信じているので、一方のコードの設計と実装が他方よりも大幅に優れているという議論はありそうにないようです。

正確な理由がわかりません。どんな助けでもありがたいです。

40
san

IronPythonは、.NET CLRが動的言語にとって貧弱なプラットフォームであることを証明するために、元のJython開発者の1人(Jim Huginin)によって開始されたことを覚えておいてください。最終的に彼は自分の間違いを証明し、最終的にIronPythonのコアは.NET動的言語ランタイムになりました(IronRubyなどの他の動的言語実装を.NETで大幅に簡単に作成できます)。

したがって、そこには2つの大きな違いがあります。

  • 元の.NET CLR開発者は、追加の業界から恩恵を受けましたVM JVMの初期バージョンと比較しての経験により、下位互換性の懸念なしに既知の問題を回避できます
  • jythonの経験に基づいて、避けるべきトラップを知る際にジムにも同じことが当てはまりました。

CPythonとIronPythonの両方に比べてJython専用の開発リソースが単純に不足していることと、速度の最適化よりもJythonを最近のバージョンのPythonスピードに関しては、Jythonが遅れることは非常に理解できます。

とは言うものの、JythonはCPythonとIronPythonの両方に似ており、より優れたアルゴリズムを使用すると、マイクロベンチマークでのパフォーマンスが低下することがよくあります。 JVM/CLRは、Javaまたは特定のコンポーネントのC#にドロップダウンする方が、CPythonのC拡張機能にドロップダウンするよりも簡単であることも意味します(Cythonなどのツールはそのギャップを少し埋めようとしますが)。

23
ncoghlan