PyPy
最新版 | |
---|---|
リポジトリ | |
対応OS | クロスプラットフォーム |
種別 | Python インタプリタおよびコンパイラツールチェーン |
ライセンス | MIT License |
公式サイト |
pypy |
PyPy(パイパイ)は、プログラミング言語Pythonの実装の1つであり、Pythonで記述されたPythonの処理系であることが特徴の1つである(セルフホスティング)。PyPyは、実行速度と効率、およびオリジナルのPython実装であるCPythonとの互換性に重点を置いている。
PyPyはJITコンパイル機能を持っており、実行時に(必要に応じて)コードを機械語にコンパイルして効率的に実行させる能力を持つ。
PyPyは、Pythonにいくつかの制約を加えた言語であるRPythonで記述されている。RPythonで書かれたコードをトランスレータでC言語などに変換してからコンパイルすることでPyPyの実行可能バイナリが作成できる。また、RPythonの言語仕様はPythonの言語仕様のサブセットであるため、(実行速度は低下するが)PyPyをCPython上で実行したり、PyPyをPyPy上で実行することもできる。
PyPyは、Python以外の動的言語を実装するための基盤としても使用できる。
詳細とプロジェクトの動機
[編集]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となった。Python 2.5と互換性がある。
2011年4月30日、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がリリースされた。Python 2.7.3と互換性がある。ARMプロセッサ向けのJIT機能を正式にサポートした最初のバージョンである。[2]
2013年11月14日、PyPy 2.2がリリースされた。インクリメンタルガベージコレクションが導入された。[3]
2014年5月9日、PyPy 2.3がリリースされた。Python 2.7.6と互換性がある。[4]
2019年10月14日、PyPy v7.2がリリースされた。CPython 2.7.13と互換性のあるPyPy2.7、およびCPython 3.6.9と互換性のあるPyPy3.6の、2つの異なるインタプリタを含んでいる。[5]
PyPy は Specific Targeted Research Projects(特定領域研究プロジェクト)として 2004年12月から2007年3月まで欧州連合から援助を受けていた。
脚注
[編集]- ^ “PyPy v7.3.17 release”. 20 9月 2024閲覧。
- ^ “PyPy 2.1 - Considered ARMful”. 2013年8月4日閲覧。
- ^ “PyPy 2.2 - Incrementalism”. 2013年11月14日閲覧。
- ^ “PyPy 2.3 - Terrestrial Arthropod Trap”. 2014年5月9日閲覧。
- ^ “PyPy v7.2 released”. 2019年12月14日閲覧。