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