PyPy

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
PyPy
最新版 2.2.1 / 2013年11月27日
対応OS クロスプラットフォーム
種別 Python インタプリタおよびコンパイラツールチェーン
ライセンス MIT License
公式サイト http://pypy.org/
テンプレートを表示

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は人気のあるライブラリであるPylonsPyglet、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機能を正式にサポートした最初のバージョンである。[1]

2013年11月14日、PyPy 2.2がリリースされた。インクリメンタルガベージコレクションが導入された。[2]

PyPy は Specific Targeted Research Projects(特定領域研究プロジェクト)として 2004年12月から2007年3月まで欧州連合から援助を受けていた。

参考文献[編集]

  1. ^ PyPy 2.1 - Considered ARMful”. 2013年8月4日閲覧。
  2. ^ PyPy 2.2 - Incrementalism”. 2013年11月14日閲覧。

関連項目[編集]

外部リンク[編集]