PyPy

PyPyとは



PyPyは、Pythonで記述されたPythonの処理系であり、自己ホスティング(セルフホスティング)であることが大きな特徴です。オリジナルのPython実装であるC[[Python]]との互換性を保ちつつ、実行速度と効率を向上させることを目指しています。

JITコンパイルによる高速化



PyPyは、Just-In-Time(JIT)コンパイル機能を備えており、プログラムの実行中に必要に応じてコードを機械語に変換し、効率的な実行を実現します。この動的なコンパイルにより、静的なコンパイルでは得られないパフォーマンス向上が期待できます。

RPythonによる実装



PyPyは、PythonのサブセットであるRPython(Restricted Python)で記述されています。RPythonは型推論が可能なようにPythonに制約を加えた言語であり、これにより、RPythonで書かれたコードをC言語などの静的型付け言語に変換することが可能です。RPythonで書かれたPyPyのコードは、トランスレータによってC言語などに変換され、最終的に実行可能なバイナリとなります。

RPythonの言語仕様はPythonのサブセットであるため、RPythonのコードはC[[Python]]上で実行することもできます。また、PyPy自体をPyPy上で実行することも可能であり、これは開発者が実験的な実装を試す上で大きな利点となります。

他の動的言語実装の基盤として



PyPyは、Pythonだけでなく、他の動的プログラミング言語を実装するための基盤としても使用できます。言語仕様の定義と低水準の実装を分離できるように設計されており、柔軟な言語実装を可能にします。実際に、PyPyをベースにしたRuby処理系であるTopazなどが開発されています。

詳細とプロジェクトの動機



実験的な実装の容易さ



PyPyは、Python処理系上で動作させることが可能なため、改善点を見つけやすく、開発者が様々な実験的な実装を試しやすい環境が提供されています。これは、PyPyがRPythonというPythonの制限版で実装されていることに起因します。

汎用的なフレームワーク



PyPyは、単なるPython処理系ではなく、動的プログラミング言語の実装ツールキットおよびフレームワークとしての側面も持っています。言語仕様と実装の詳細を分離することで、高度な機能を低水準な詳細に煩わされることなく実装できます。このフレームワークにより、他の言語処理系の開発が効率的に行えます。

高速で柔軟な実装



PyPyの主な目的は、Pythonの高速かつ柔軟な実装を提供することです。フレームワークを利用することで、開発者は低水準の詳細に囚われず、高度な機能を実装できます。

RPythonの詳細



静的型付けへの変換



PyPyは、RPythonで実装されています。RPythonは、Pythonのサブセットであり、すべての変数の型を型推論で特定できるように制約が加えられています。これにより、RPythonで書かれたコードを静的型付けされたコードに変換することができます。

トランスレータによる変換



PyPyのパッケージには、RPythonで書かれたコードをC言語Javaバイトコード、CLIなどの低水準コードに変換するトランスレータが含まれています。このトランスレータによって、RPythonで実装されたPyPyは実行可能なバイナリへとコンパイルされます。

Pythonインタプリタ上での実行



RPythonの言語仕様はPythonのサブセットであるため、RPythonで記述されたコードは通常の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公式ウェブサイト

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。