PyPyプロジェクトについて話すときは、実際に2つの成果物を提供することを目的としていることに注意してください。1つはJITコンパイラジェネレータです。はい、ジェネレーターです。つまり、Pythonなどの非常に動的なプログラミング言語の実装を作成するためのフレームワークを実装しています。2つ目は、このフレームワークの実際のテストであり、PyPyPythonインタープリターの実装です。
現在、PyPyが特別である理由は複数あります。プロジェクト開発は2004年から実行され、会社からではなく研究プロジェクトとして開始され、PythonでPythonを再実装し、PythonでJITコンパイラを実装し、RPython(PythonコードフレームワークがそのコードをC)にコンパイルされたバイナリに変換できるようにするためのいくつかの制限があります。
PyPyの現在のバージョンはCPythonバージョン2.5と99%互換性があり、Django、Twisted、および他の多くのPythonプログラムを実行できます。以前は、既存のCPython C拡張機能を実行できないという制限がありましたが、それはPyPyのcpyextモジュールでも対処されています。C APIとの互換性は可能であり、ある程度はすでに実装されています。JITも非常にリアルです。このpystoneの比較を参照してください。
CPythonの場合:
Python 2.5.5 (r255:77872, Apr 21 2010, 08:44:16)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from test import pystone
>>> pystone.main(1000000)
Pystone(1.1) time for 1000000 passes = 12.28
This machine benchmarks at 81433.2 pystones/second
PyPyの場合:
Python 2.5.2 (75632, Jun 28 2010, 14:03:25)
[PyPy 1.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``A radioactive cat has 18
half-lives.''
>>>> from test import pystone
>>>> pystone.main(1000000)
Pystone(1.1) time for 1000000 passes = 1.50009
This machine benchmarks at 666625 pystones/second
したがって、いくつかの計算でPyPyを使用するだけで、ほぼ10倍のスピードアップを得ることができます。
したがって、PyPyプロジェクトはゆっくりと成熟し、いくつかの利点を提供しているため、コードの速度の問題に対処しようとしている人々からより多くの関心を集めています。PyPyの代わりに、LLVMのJIT機能を使用してCPythonの実装を高速化することを目的としたunladden swallow(Googleプロジェクト)がありますが、開発者がLLVMのバグに対処する必要があるため、unladdenswallowの進行は遅くなりました。
つまり、要約すると、PyPyは言語仕様をVM実装から分離しているため、Pythonの未来と見なされていると思います。で導入された機能、例えば。スタックレスPythonは、言語仕様を変更するだけで、共有コードを同じに保つため、追加の労力をほとんどかけずにPyPyに実装できます。より少ないコード、より少ないバグ、より少ないマージ、より少ない労力。
また、たとえばRPythonで新しいbashシェルの実装を作成することで、JITコンパイラを無料で入手し、JITに関する深い知識を実際に習得しなくても、多くのLinuxシェルスクリプトを高速化できます。