PyPyとは
PyPyは、
Pythonで記述された
Pythonの処理系であり、自己ホスティング(セルフホスティング)であることが大きな特徴です。オリジナルの
Python実装である
C[[Python]]との互換性を保ちつつ、実行速度と効率を向上させることを目指しています。
JITコンパイルによる高速化
PyPyは、Just-In-Time(JIT)コンパイル機能を備えており、プログラムの実行中に必要に応じてコードを
機械語に変換し、効率的な実行を実現します。この動的なコンパイルにより、静的なコンパイルでは得られないパフォーマンス向上が期待できます。
PyPyは、
PythonのサブセットであるR
Python(Restricted
Python)で記述されています。R
Pythonは型推論が可能なように
Pythonに制約を加えた言語であり、これにより、R
Pythonで書かれたコードを
C言語などの静的型付け言語に変換することが可能です。R
Pythonで書かれたPyPyのコードは、トランスレータによって
C言語などに変換され、最終的に実行可能なバイナリとなります。
R
Pythonの言語仕様は
Pythonのサブセットであるため、R
Pythonのコードは
C[[Python]]上で実行することもできます。また、PyPy自体をPyPy上で実行することも可能であり、これは開発者が実験的な実装を試す上で大きな利点となります。
他の動的言語実装の基盤として
PyPyは、
Pythonだけでなく、他の動的
プログラミング言語を実装するための基盤としても使用できます。言語仕様の定義と低水準の実装を分離できるように設計されており、柔軟な言語実装を可能にします。実際に、PyPyをベースにした
Ruby処理系であるTopazなどが開発されています。
詳細とプロジェクトの動機
実験的な実装の容易さ
PyPyは、
Python処理系上で動作させることが可能なため、改善点を見つけやすく、開発者が様々な実験的な実装を試しやすい環境が提供されています。これは、PyPyがR
Pythonという
Pythonの制限版で実装されていることに起因します。
汎用的なフレームワーク
PyPyは、単なる
Python処理系ではなく、動的
プログラミング言語の実装ツールキットおよびフレームワークとしての側面も持っています。言語仕様と実装の詳細を分離することで、高度な機能を低水準な詳細に煩わされることなく実装できます。このフレームワークにより、他の言語処理系の開発が効率的に行えます。
高速で柔軟な実装
PyPyの主な目的は、
Pythonの高速かつ柔軟な実装を提供することです。フレームワークを利用することで、開発者は低水準の詳細に囚われず、高度な機能を実装できます。
静的型付けへの変換
PyPyは、R
Pythonで実装されています。R
Pythonは、
Pythonのサブセットであり、すべての変数の型を型推論で特定できるように制約が加えられています。これにより、R
Pythonで書かれたコードを静的型付けされたコードに変換することができます。
トランスレータによる変換
PyPyのパッケージには、R
Pythonで書かれたコードを
C言語、
Javaバイトコード、CLIなどの低水準コードに変換するトランスレータが含まれています。このトランスレータによって、R
Pythonで実装されたPyPyは実行可能なバイナリへとコンパイルされます。
R
Pythonの言語仕様は
Pythonのサブセットであるため、R
Pythonで記述されたコードは通常の
Pythonインタプリタ上でも実行できます。
JITコンパイラ
Meta-tracing JIT
PyPyは、トレーシングJITコンパイルを採用しています。これは、実行されるコード自体をJITコンパイルするのではなく、処理系のコードをJITコンパイルで特殊化する点が特徴的です。このアプローチは、従来のJITよりも優れた性能を発揮することが実験的に確認されています。PyPyでは、この手法をMeta-tracing JITと呼んでいます。
プロジェクトの状況
Psycoの後継プロジェクト
PyPyは、Armin Rigo氏によって開発された
PythonのJIT特殊化コンパイラであるPsycoの後継プロジェクトとしてスタートしました。PyPyの目的は、Psycoではカバーできなかった範囲のコードに対応した、ジャストインタイムの動的コンパイラを提供することです。
開発の成熟とリリース
当初は研究開発プロジェクトとして開始されましたが、開発が非常に進み、2007年中頃に公式リリースとなるバージョン1.0が発表されました。このリリースでは、
C[[Python]]との互換性を向上させた製品版が目標とされました。バージョン1.1は2008年4月にリリースされ、多くの変更が行われました。
ライブラリのサポートと速度向上
2008年後半には、Pylons、Pyglet、Nevow、Djangoといった人気のあるライブラリでの動作が確認されました。2010年3月には、JITコンパイラを導入したPyPy 1.2がリリースされ、速度向上が図られましたが、製品環境での利用は推奨されませんでした。このリリースと同時に、速度向上を示すPyPy speed centerというウェブサイトも公開されました。
製品としての適合
2010年12月にリリースされたPyPy 1.4は、最初の製品として適合するバージョンとなり、
Python 2.5との互換性がありました。2011年4月には、
Python 2.7.1と互換性のあるPyPy 1.5がリリースされました。その後も、2012年、2013年とバージョンアップが重ねられ、2013年8月には
Python 2.7.3と互換性のあるPyPy 2.1がリリースされました。このバージョンから、ARMプロセッサ向けのJIT機能が正式にサポートされました。2013年11月には、インクリメンタルガベージコレクションが導入されたPyPy 2.2がリリースされ、2014年5月には
Python 2.7.6と互換性のあるPyPy 2.3がリリースされました。
最新バージョン
2019年10月には、PyPy v7.2がリリースされ、
C[[Python]] 2.7.13と互換性のあるPyPy2.7と、
C[[Python]] 3.6.9と互換性のあるPyPy3.6の2つの異なるインタープリタが含まれています。
PyPyは、2004年12月から2007年3月まで、
欧州連合の特定領域研究プロジェクトとして援助を受けていました。
脚注
参考文献
PyPy公式ウェブサイト
関連項目
ブートストラップ問題
セルフホスティング
*
セルフインタプリタ
外部リンク
PyPy公式ウェブサイト