「PyPyはPythonでのPythonの再実装です」は、技術的には真実ですが、PyPy、IMHOを説明するのに誤解を招く方法です。
PyPyには2つの主要な部分があります。
- 翻訳フレームワーク
- 通訳
翻訳フレームワークはコンパイラです。RPythonコードをC(または他のターゲット)にコンパイルし、ガベージコレクションやJITコンパイラなどの側面を自動的に追加します。RPythonのみを処理して、任意のPythonコードを処理することはできません。
RPythonは通常のPythonのサブセットです。すべてのRPythonコードはPythonコードですが、その逆はありません。RPythonは基本的に「PyPyの翻訳フレームワークで翻訳できるPythonのサブセット」に過ぎないため、RPythonの正式な定義はありません。しかし、翻訳するには、RPythonコードを静的に型指定する必要があります(型は推測されますが、宣言はしませんが、変数ごとに厳密に1つの型です)。関数の宣言/変更などのことはできません/実行時のクラス。
インタプリタはRPythonで書かれた通常のPythonインタプリタです。
RPythonコードは通常のPythonコードであるため、任意のPythonインタープリターで実行できます。しかし、PyPyの速度に関する主張は、そのように実行したことによるものではありません。インタプリタの翻訳には長い時間がかかるため、これは迅速なテストサイクルのためのものです。
これが理解できれば、PyPyPyまたはPyPyPyPyに関する推測が実際には意味をなさないことはすぐに明らかになります。RPythonで作成されたインタープリターがあります。Pythonをすばやく実行するCコードに変換します。そこでプロセスは停止します。再度処理することでスピードアップするRPythonはもうありません。
したがって、「PyPyがCPythonよりも高速になるのはなぜですか」もかなり明白になります。PyPyは、JITコンパイラを含め、より優れた実装を備えています(JITコンパイラがないと、通常、それほど速くはありません。つまり、PyPyは、JITコンパイルの影響を受けやすいプログラムに対してのみ高速です)。(彼らはそれを非常に作ってみるんがCPythonのは、Python言語の高度最適化実装できるように設計されなかった最適化されたあなたは違いに従うならば、実装)。
PyPyプロジェクトの本当に革新的なビットは、高度なGCスキームやJITコンパイラーを手動で作成しないことです。彼らはインタプリタをRPythonで比較的簡単に記述します。すべてのRPythonはPythonよりも低いレベルであり、オブジェクト指向のガベージコレクション言語であり、Cよりもはるかに高いレベルです。その後、変換フレームワークは自動的に GCやJITなどを追加します。だから翻訳フレームワークは巨大ですPyPy pythonインタープリターにも同じように適用されますが、実装を変更するため、実験の自由度が大幅に向上し、GCバグの導入や、変更に対応するためのJITコンパイラーの更新を心配する必要がありません。また、Python3インタープリターの実装に取り掛かると、自動的に同じ利点が得られます。また、PyPyフレームワークで作成された他のインタプリタ(その中には、さまざまな段階のポリッシュがあります)。そして、PyPyフレームワークを使用するすべてのインタープリターは、フレームワークによってサポートされるすべてのプラットフォームを自動的にサポートします。
したがって、PyPyプロジェクトの真の利点は、動的言語用のプラットフォームに依存しない効率的なインタープリターの実装のすべての部分を(可能な限り)分離することです。そして、それらを1か所に実装して、多くのインタープリターで再利用できます。それは「私のPythonプログラムは今より速く実行される」のようにすぐに成功するわけではありませんが、将来の大きな展望です。
そして、それはあなたのPythonプログラムをより速く実行することができます(たぶん)。