私はPyPyを見ていましたが、なぜそれがメインラインの Python ディストリビューションに採用されていないのか疑問に思っていました。JIT コンパイルやメモリ フットプリントの削減などによって、すべての Python コードの速度が大幅に向上するのではないでしょうか?
要するに、PyPy が別のプロジェクトのままである主な欠点は何ですか?
PyPy は CPython のフォークではないため、CPython に直接マージすることはできません。
理論的には、Python コミュニティは PyPy を広く採用し、PyPy をリファレンス実装にすることができ、CPython を廃止することができます。ただし、PyPy には独自の弱点があります。
PyPy は素晴らしいプロジェクトですが、CPU を集中的に使用するタスクの実行速度がすべてではありません。多くのアプリケーションでは、これは多くの懸念事項の中で最小のものです。たとえば、Django は PyPy で実行できるため、テンプレート作成が高速になりますが、CPython のデータベース ドライバーは PyPy よりも高速です。最終的に、どの実装がより効率的かは、特定のアプリケーションのボトルネックがどこにあるかによって異なります。
別の例: PyPy はゲームに最適だと思うかもしれませんが、PyPy で使用されるようなほとんどの GC 戦略では、顕著なジッターが発生します。CPython の場合、CPU を集中的に使用するゲームのほとんどは PyGame ライブラリにオフロードされますが、PyGame は主に C 拡張として実装されているため、PyPy はこれを利用できません (ただし、pygame-cffi を参照してください)。PyPy はゲームの優れたプラットフォームになり得ると今でも思いますが、実際に使用されているのを見たことはありません。
PyPy と CPython は、基本的な設計上の問題に対するアプローチが根本的に異なり、トレードオフも異なります。そのため、あらゆる場合にどちらが「優れている」ということはありません。
1 つは、 Python 2.x と100% の互換性があるわけではなく、3.x の予備的なサポートしかないことです。
また、マージできるものでもありません - PyPy によって提供される Python 実装は、彼らが作成したフレームワークを使用して生成されます。これは非常にクールですが、既存の CPython 実装とは完全に異なります。それは完全な交換でなければなりません。
PyPy と CPython には非常に具体的な違いがいくつかあります。大きな違いは、拡張モジュールのサポート方法です。標準ライブラリを超えたい場合、これは大きな問題です。
また、PyPy が普遍的に高速であるとは限らないことにも注意してください。
Guido van Rossum によるこのビデオを参照してください。彼は、あなたが 12 分 33 秒で尋ねたのと同じ質問について話しています。
ハイライト:
やっぱり彼が決める…
理由の 1 つは、PyPyサイトによると、現在 32 ビットおよび 64 ビットの Intel x86 アーキテクチャでのみ実行され、CPython は他のプラットフォームでも実行されるためです。これはおそらく、PyPy のプラットフォーム固有の速度向上によるものです。スピードは良いことですが、多くの人は言語の実装をできるだけ「プラットフォームに依存しない」ものにしたいと考えています。
詳細については、 David Beazleyによる基調講演をご覧になることをお勧めします。PyPy の性質と複雑さを明確にすることで、あなたの質問に答えます。
ここで述べたことすべてに加えて、バグに関しては、PyPy は CPython ほど堅実ではありません。SymPy では、リリースされたバージョンとナイトリーの両方で、過去 2 年間で PyPy に約 12 個のバグが見つかりました。
一方、CPython で見つかったバグは 1 つだけで、それはプレリリースでした。
さらに、Python 3 のサポートがないことも軽視しないでください。コアの Python コミュニティの誰も、もはや Python 2 に関心を持っていません。彼らは、Python 3 の 5 番目のメジャー リリースとなる Python 3.4 の次の大きなことに取り組んでいます。そのため、競争相手になる前に、追いつく必要があります。
誤解しないでください。PyPy は素晴らしいです。しかし、多くの非常に重要な点で CPython より優れているとは言えません。
ちなみに、PyPy で SymPy を使用しても、メモリ フットプリントが小さくなることはありません (スピードアップもありません)。https://bitbucket.org/pypy/pypy/issues/1447/を参照してください。