私はPyPyを見ていましたが、なぜそれがメインラインのPythonディストリビューションに採用されていないのか疑問に思っていました。JITコンパイルやメモリフットプリントの削減など、すべてのPythonコードの速度が大幅に向上しませんか?
要するに、PyPyが別のプロジェクトとして残る原因となる主な欠点は何ですか?
私は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拡張として実装されているため(PyGame-cffiを参照)、PyPyはこのライブラリを利用できません。PyPyはゲームの優れたプラットフォームになるとまだ思いますが、実際に使用されるのを見たことがありません。
PyPyとCPythonは、基本的な設計の質問に対して根本的に異なるアプローチをとり、異なるトレードオフを行うため、どちらの場合もどちらもどちらよりも「優れています」。
Guido van Rossumによるこのビデオを参照してください。彼はあなたが12分33秒で尋ねた同じ質問について話します。
ハイライト:
結局のところ、彼が決めるのは彼です...
1つの理由は、PyPyサイトによると、現在、32ビットおよび64ビットのIntel x86アーキテクチャでのみ実行されているのに対し、CPythonは他のプラットフォームでも実行されているためです。これはおそらく、PyPyのプラットフォーム固有の速度の向上によるものです。速度は良いことですが、言語の実装をできるだけ「プラットフォームに依存しない」ものにしたいと考える人がよくいます。
詳細については、David Beazleyの基調講演をご覧になることをお勧めします。PyPyの性質と複雑さを明確にすることで、あなたの質問に答えます。
ここで述べたことすべてに加えて、PyPyはバグに関してCPythonほど堅固ではありません。SymPyでは、リリースされたバージョンとナイトリーの両方で、過去数年間にPyPyの約12のバグが見つかりました。
一方、CPythonで見つかったバグは1つだけで、それはプレリリースにありました。
さらに、Python 3サポートの欠如を軽視しないでください。コアPythonコミュニティの誰も、Python 2を気にしさえしません。彼らはPython 3.4の次の大きなことに取り組んでいます。これはPython 3の5番目のメジャーリリースになる予定です。したがって、彼らは、競争相手になる前に、追いつくために追いつく必要があります。
誤解しないでください。PyPyは素晴らしいです。しかし、多くの非常に重要な点で、CPythonより優れているわけではありません。
ちなみに、PyPyでSymPyを使用する場合、メモリフットプリントが小さくなることはありません(または速度が向上します)。https://bitbucket.org/pypy/pypy/issues/1447/を参照してください。