質問

IronRubyがRubyの実装であり、F#が多かれ少なかれOCamlであるように、IronPythonは.NETプラットフォームでのPythonの実装であることを理解しています。

私が理解できないように思われるのは、これらの言語のパフォーマンスが「祖先」に近いかどうかです。または速度の点でC#のようなものに近い。たとえば、IronPythonはどういうわけか「コンパイル済み」です。 C#で使用されるのと同じバイトコードまで、したがって、同様に高速に実行されますか?

役に立ちましたか?

解決

IronPythonとIronRubyはDLR(動的言語ランタイム)の上に構築され、その場でCIL(.NETで使用されるバイトコード)にコンパイルされます。これらはC#よりも低速ですが、.NETの対応するものよりも高速です。私の知る限り、まともなベンチマークはありませんが、違いがわかります。

他のヒント

IronPythonは実際には最速のPython実装です。 「最速」の定義については、少なくとも:CLRの起動オーバーヘッドは、たとえばCPythonと比較して huge です。また、最適化コンパイラIronPythonは、コードが複数回実行される場合にのみ意味を持ちます。

IronRubyは、IronPythonを高速にする興味深い機能の多くが、IronPythonとIronRuby(およびManaged JavaScript、Dynamic VB、IronScheme、VistaSmalltalk)の両方でDynamic Language Runtimeに抽出されているため、IronPythonと同じくらい高速になる可能性がありますなど)が構築されます。

一般に、言語実装の速度は実際の言語機能にほとんど依存せず、それに費やされるエンジニアリング工数の数により依存します。 IOW:動的か静的かは問題ではなく、お金は重要です。

たとえば、Common LispはRubyやPythonよりもさらに動的な言語ですが、Cにお金をかけることさえできるCommon Lispコンパイラがあります。優れたSmalltalk実装は、Java(Sun HotSpotとIBM J9の両方の主要なJVMが実際にわずかに変更されたSmalltalk VMであるため)、またはC ++と同じくらい高速に実行されます。過去6か月の間に、主要なJavaScript実装(Mozilla TraceMonkey、Apple SquirrelFish Extreme、およびブロックの新製品であるGoogle V8)は、JavaScriptの頭をもたらすために、パフォーマンスを10倍以上 改善しました。最適化されていないCを使用して直接やり取りします。

現在、IronRubyはほとんどの点でかなり遅いです。 MRI(MatzのRuby実装)全体よりも明らかに遅いですが、一部の場所ではより高速です。

IronRubyにははるかに高速になる可能性がありますが、速度の点でC#に近づくことはないでしょう。ほとんどの場合、それは重要ではありません。たとえば、データベース呼び出しは、おそらくWebリクエストの全体の継続時間の90%を占めるでしょう。

私は、チームが最初にパフォーマンスよりも言語の完全性を追求すると考えています。これにより、IronRuby&を実行できます。 1.0が出荷されたときにほとんどのrubyプログラムを実行すると、パフォーマンスを向上させることができます。

IronPythonにも同様のストーリーがあると思います。

最新の.NET実装のパフォーマンスは、祖先のパフォーマンスとC#のパフォーマンスの間にあると仮定することで、正しい考えが得られます。その理由は、C#は.NET自体に非常によく一致しているためです。

F#は、C#とOCaml自体に同様のパフォーマンス特性があるため、非常に簡単です。

IronPythonは、PythonとC#のパフォーマンス特性が大きく異なるため、はるかに困難です。実際、答えはIronPythonの実装自体に依存します。IronPythonの実装は、非効率なPythonスタイルの評価を可能な限り効率的なC#スタイルの評価に変換しようと努力します。 IronPythonは一般に、同じ領域に時折スパイクが発生するため、C#よりもかなり遅いと予想されます。この効果はこちらで確認できます。

乾杯、 ジョンハロップ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top