8

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

私が理解できないように見えるのは、これらの言語が速度の点で「祖先」に近いのか、それとも C# のようなものに近いのかということです。たとえば、IronPython は、C# で使用されるのと同じバイトコードに何らかの方法で「コンパイル」されているので、同じように高速に実行されますか?

4

4 に答える 4

9

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

于 2008-09-28T04:10:34.323 に答える
7

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

IronRubyは、IronPythonを高速化する興味深い機能の多くが、IronPythonとIronRuby(およびマネージドJavaScript、Dynamic VB、IronScheme、VistaSmalltalkなど)の両方で動的言語ランタイムに抽出されているため、IronPythonと同じくらい高速になる可能性があります。構築されています。

一般に、言語実装の速度は、実際の言語機能とはほとんど無関係であり、それに入るエンジニアリングの人年数に大きく依存します。IOW:動的か静的かは関係ありません。お金は関係あります。

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

于 2008-09-28T05:57:10.807 に答える
1

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

C#とOCaml自体のパフォーマンス特性は類似しているため、F#は簡単です。

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

乾杯、ジョン・ハロップ。

于 2008-10-19T09:51:51.543 に答える
1

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

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

チームは、パフォーマンスよりも言語の完全性を優先するのではないかと思います。これにより、IronRuby を実行し、1.0 が出荷されたときにほとんどの Ruby プログラムを実行できるようになり、パフォーマンスが向上する可能性があります。

IronPython にも同様の話があるのではないかと思います。

于 2008-09-28T04:11:48.547 に答える