web-dev-qa-db-ja.com

Python=が最新のJavaScript実装のように最適化されていないのはなぜですか?

V8(Chrome)、SpiderMonkey(Firefox)、Chakra(IE/Edge)などの最新のJavascript実装にはすべて、JITコンパイルと、パフォーマンスを改善するための他の多くの最適化機能があります。

Pythonこれらがないのはなぜですか?

私はPyPyとIronPythonを見てきました。どちらも速度の向上を主張しています。 PyPy Python実装言語であるPythonで記述された実装がCのリファレンス実装よりも高速になる方法がわかりません。IronPython、同じアイデアですが、。 NET Frameworkは速度を向上させます。

11
Jay

Pythonこれらがないのはなぜですか?

Pythonパフォーマンスを重視する実装がないと思う理由がわかりません。 PyPyIronPython 、および Jython はすべて産業用強度で、生産準備が整っていますPythonパフォーマンスを重視する実装です。 Pyston具体的にはパフォーマンスのために作成されました nladen Swallow および Psyco もPythonのパフォーマンスを向上させるプロジェクトでした。

ただし、CPythonユーザーが他のすべての実装の合計ユーザーベースを大幅に上回っているという事実は、Unladen Swallowがコミュニティによって拒否され、そのほとんどがこれらのプロジェクトは死んでいるか、開発者を引き付けるのに苦労しています。Pythonコミュニティがパフォーマンスを評価する方法について何かを教えてください。

この回答 は、Pythonコミュニティの典型的な考え方の良い例です。パフォーマンスの問題を修正する代わりに、Pythonではなくコードを書くことを好むでしょう。

私はPyPyとIronPythonを見てきました。どちらも速度の向上を主張しています。 PyPyインタプリタ言語であるPythonで記述されたPython実装がCのリファレンス実装よりも高速になる方法がわかりません。

まず、コンパイラがどの言語で書かれているかは問題ではありません。結局のところ、コンパイラはonceのみ実行されるため、if遅い、それは問題ではありません:コンパイラのパフォーマンスは無関係であり、関連するのはのパフォーマンスですコンパイラーの出力

第2に、コンパイラのoutputがどれだけ高速であるかが重要であり、コンパイラはPython、つまりコンパイルする言語で記述されているため、 itselfを実際にコンパイルして高速化します。

第三に、「解釈された言語」のようなものはありません。言語は、数学的なルールと制限のセットです。仕様です。一枚の紙。言語はコンパイルまたは解釈されません。言語です。コンパイルと解釈は言語実装の特徴であり、より正確には、コンパイラーまたはインタープリター(duh!)であり、言語ではありません。すべての言語はコンパイラーによって実装できます。すべての言語はインタープリターによって実装できます。インタープリターからコンパイラーを、コンパイラーからインタープリターを機械的に生成できます。

しかし、PyPyは実際にはPythonでされていないため、これらすべてが実際に問題になることはありません。 RPython で書かれています。 RPythonは RPythonプログラミング言語 とRPythonフレームワークの2つの部分で構成されています。

RPythonプログラミング言語はPythonではありません。これは別のプログラミング言語です。 RPythonは静的に型付けされたプログラミング言語であり、抽象化のレベルはJavaとほぼ同じで、パフォーマンスはCとほぼ同じです。RPythonは、Pythonの構文的および意味的なサブセットです。つまり、すべてのRPythonプログラムは有効ですPythonプログラムであり、Python実装で実行できます(ただし、通常は数桁遅くなりますが、Pythonのすべてのツールにアクセスできるため、これはデバッグに役立ちます。解釈はすぐに始まりますが、言語実装のコンパイルには通常5〜10分かかります)が、その逆は成り立ちません。

RPythonフレームワークは、RPythonプログラミング言語で高性能の動的言語実装を作成するためのフレームワークです。これには、ガベージコレクタ、オブジェクトスペース、メタオブジェクトプロトコル、事前定義されたオブジェクト、タイプ、および操作な​​どが含まれます。しかし、重要なのは、インタープリターからJITコンパイラーを自動的に生成する能力です。RPythonフレームワークに言語を実装する場合、インタープリターを作成するだけでよく、RPythonフレームワークがJITを処理します。

RPythonプラットフォームには多くの言語実装があります 、PyPyだけではありません。

IronPython、同じアイデアですが、.NET Frameworkがどのように速度を向上させるかはわかりません。

Microsoftによるさまざまな.NETバリアントやMonoなどのISO CLIのほとんどの実装には、高度なガベージコレクター、オプティマイザー、およびコンパイラーが含まれています。 JythonとJavaの実装についても同様です。

IronPythonはコンパイラーであり、PythonソースコードをDLRツリー(DLRは動的言語ランタイム)にコンパイルします。これらはさらにCILバイトコードにコンパイルされ、通常はさらにネイティブにコンパイルされます。マシンコード。

19
Jörg W Mittag

V8(Chrome)、SpiderMonkey(Firefox)、Chakra(IE/Edge)などの最新のJavascript実装にはすべて、JITコンパイルと、パフォーマンスを改善するための他の多くの最適化機能があります。

Pythonこれらがないのはなぜですか?

JavaScriptはWebブラウザーに組み込まれており、今日のかなりの量のソフトウェアがWebブラウザーで実行するように設計されています。これにより、JavaScriptのパフォーマンスが非常に重要になり、Google、Apple、およびMicrosoftのような企業はJavaScriptランタイムを高速化するために多くのリソースを投資しています。

PyPyインタプリタ言語であるPythonで記述されたPython実装がCのリファレンス実装よりも高速になる方法がわかりません。

アイデアは、コードがJITされると、「解釈」されなくなるということです。 PyPIは、Pythonコードをマシンコード(たとえば、x86_64マシンコード)に変換し、それをプロセッサで直接実行することで機能します。

6
el.pescado