PyPy
詳細とプロジェクトの動機
PyPyは、Pythonの制限版であるRPythonで実装されたPythonの処理系である。したがって、Python処理系上でPyPyを動作させることも可能であるため、PyPyの中から改善できる領域を見極めることや、開発者が様々な実験的な実装を試すことが容易になっている。
PyPyは、Pythonだけでなく、一般の動的プログラミング言語の実装を作るためのツールキットおよびフレームワークとしても使うことができる。PyPyでは、言語仕様の定義とその具体的かつ低水準な実装を分離できるようにしている。Python以外の言語を本格的に実装した例として、PyPyで実装されたRubyの処理系であるTopazがある。
PyPyの目的の1つは、Pythonの柔軟かつ高速な実装を作ることである。上記のフレームワークを使うことで、低水準な詳細を混入せずに高度な機能を実装できるようになっている。
RPython
PyPyは、Pythonに制限（制約）を加えたサブセット言語であるRPython (Restricted Python) によって実装されている。この制約は、すべての変数の型を型推論で特定できるようにするためのものであり、これによってRPythonで書かれたコードは静的型付けされたコードに変換することができる。
PyPyのパッケージには、RPythonで書かれたコードを低水準の静的型付け環境であるC言語・Javaバイトコード・CLIなどのコードに変換するためのトランスレータが含まれている。RPythonで実装されたPyPyはこれによって実行可能バイナリへとコンパイルされる。
RPythonの言語仕様はPythonの言語仕様のサブセットであるため、RPythonのコードは通常のPythonインタプリタ上でも実行できる。
JIT
PyPyはトレーシング実行時コンパイル（トレーシングJIT）を採用している。特徴的なのは、実行されるコードにJITコンパイルを適用するのではなく、処理系のコードをJITコンパイルで特殊化することである。この技法は、通常のJITよりも性能が良いことが実験によって発見されたため採用された。PyPyはこの技法を Meta-tracing JIT と呼んでいる。
プロジェクトの状況
PyPyは、Armin Rigoが開発した、PythonのJIT特殊化コンパイラである Psyco の後継プロジェクトである。PyPy の目的は Psyco で対応できなかったスコープに対応したジャストインタイムの動的コンパイラを作成することである。
PyPy は研究開発的なプロジェクトとして始まった。しかし、開発が非常に成熟し、2007 年半ばの公式リリースとなる 1.0 を発表した。次の目標とCPythonとの互換性を向上させた製品として出荷可能なバージョンをリリースすることだった。バージョン1.1は2008年4月28日にリリースされた。多くの変更がこの開催中に行われた。
2008年後半、PyPyは人気のあるライブラリであるPylons、Pyglet、Nevow、Djangoの動作に対応した。
2010年3月、PyPy 1.2はリリースされた。スピードの向上が目標とされ、JITコンパイラが導入された。ただし動作はするものの、製品環境としての実行は推奨されなかった。1.2のリリースに加えて、公式ウェブサイトはPyPy speed centerとして速度向上の程度が表示されるようになった。
2010年12月、PyPy 1.4がリリースされ、最初の製品として適合するPyPyとなった。PyPy 1.4はPython 2.5と互換性がある。
2011年4月30日、PyPy 1.5がリリースされた。PyPy 1.5はPython 2.7.1と互換性がある。
2012年6月18日、PyPy 1.9がリリースされた。
2013年5月9日、PyPy 2.0がリリースされた。
2013年8月1日、PyPy 2.1がリリースされた。PyPy 2.1はPython 2.7.3と互換性がある。ARMプロセッサ向けのJIT機能を正式にサポートした最初のバージョンである。
2013年11月14日、PyPy 2.2がリリースされた。インクリメンタルガベージコレクションが導入された。
2014年5月9日、PyPy 2.3がリリースされた。PyPy 2.3はPython 2.7.6と互換性がある。
PyPy は Specific Targeted Research Projects(特定領域研究プロジェクト)として 2004年12月から2007年3月まで欧州連合から援助を受けていた。