PyPy を理解する最も簡単な方法は、それが Python で実装されていることを忘れることです。
とにかく、実際には RPython で実装されているわけではありません。RPython は Python インタープリターで実行できますが、Python コードはRPython コンパイラー (PyPy 変換フレームワーク) でコンパイルできません。RPython は Python のサブセットですが、「省略」されている部分は十分に実質的であるため、RPython でのプログラミングは Python での通常のプログラミングとは大きく異なります。
したがって、Python コードは RPython コードとして扱うことができず、慣用的な RPython プログラムの「ルック アンド フィール」は慣用的な Python プログラムとは大きく異なるため、これらの間の接続を完全に無視して、作成された例を考えてみましょう。
コンパイラを使って新しい言語 Frobble を開発したとします。また、Frobble で Python インタープリターを作成しました。私の「FrobblePython」インタープリターは、多くの場合、CPython インタープリターよりも大幅に高速であると主張しています。
これは奇妙または不可能だと思いますか? もちろん違います。新しい Python インタープリターは、CPython インタープリターよりも速くなったり遅くなったりする可能性があります (または、さまざまなマージンによって、ある部分では速く、別の部分では遅くなる可能性が高くなります)。高速かどうかは、FrobblePython の実装と、私の Frobble コンパイラでコンパイルされたコードのパフォーマンス特性に依存します。
PyPy インタープリターについては、まさにそのように考える必要があります。それを実装するために使用される言語である RPython がたまたま Python インタープリターによって解釈される可能性があるという事実 (RPython プログラムをコンパイルして実行するのと同じ外部結果を伴う) は、それがどれほど高速であるかを理解することとはまったく関係ありません。重要なのは、PyPy インタープリターの実装と、RPython コンパイラーによってコンパイルされたコードのパフォーマンス特性 (RPython コンパイラーがコンパイルするプログラムに特定の種類の JIT 機能を自動的に追加できるという事実など) だけです。