web-dev-qa-db-ja.com

PyPyが標準Pythonに含まれていなかったのはなぜですか?

PyPy を見ていましたが、なぜそれがメインラインPythonディストリビューションに採用されていないのか疑問に思っていました。すべてのPythonコードの速度を大幅に改善しますか?

要するに、PyPyが別のプロジェクトのままでいる原因となるPyPyの主な欠点は何ですか?

161
KLee1

PyPyはCPythonのフォークではないため、CPythonに直接マージすることはできません。

理論的には、PythonコミュニティはPyPyを普遍的に採用でき、PyPyは参照実装になり、CPythonは廃止される可能性があります。ただし、PyPyには次のような弱点があります。

  • CPythonは、Python Cで記述されたモジュールと簡単に統合できます。これは、従来の方法ですPythonアプリケーションはCPU集中型タスクを処理します(たとえば、SciPyプロジェクトを参照)。
  • PyPy JITコンパイル手順自体はCPU時間を消費します。コンパイルされたコードを繰り返し実行することによってのみ、全体的に高速になります。つまり、起動時間が長くなる可能性があるため、PyPyはグルーコードや簡単なスクリプトを実行するのに必ずしも効率的ではありません。
  • PyPyとCPythonの動作は、すべての点で同一ではありません。特に「実装の詳細」(言語で指定されていないが、実用レベルでは依然として重要な動作)に関してはそうです。
  • CPythonはPyPyよりも多くのアーキテクチャで実行され、PyPyにとって実用的ではない可能性のある方法で組み込みアーキテクチャでの実行に成功しました。
  • メモリ管理のためのCPythonの参照カウントスキームは、PyPyのさまざまなGCシステムよりも予測可能なパフォーマンスへの影響がほぼ間違いなくありますが、これはすべての「純粋なGC」戦略に必ずしも当てはまりません。
  • PyPyはまだPython 3.xを完全にはサポートしていませんが、これはアクティブな作業項目です。

PyPyは素晴らしいプロジェクトですが、CPUを集中的に使用するタスクの実行速度はすべてではなく、多くのアプリケーションでは多くの懸念事項の中で最も少ないです。たとえば、DjangoはPyPyで実行でき、テンプレート作成は高速になりますが、CPythonのデータベースドライバーはPyPyよりも高速です。最終的に、どの実装がより効率的かは、特定のアプリケーションのボトルネックです。

もう1つの例:PyPyはゲームに最適だと思いますが、PyPyで使用されるようなGC戦略のほとんどは、顕著なジッターを引き起こします。 CPythonの場合、CPUを集中的に使用するゲームの大部分はPyGameライブラリにオフロードされます。PyGameは主にC拡張として実装されているため、PyPyは利用できません(ただし、pygame-cffiを参照)。 PyPyはゲームの素晴らしいプラットフォームになるとまだ思っていますが、実際に使用されるのを見たことはありません。

PyPyとCPythonは、基本的な設計問題に対する根本的に異なるアプローチを持ち、異なるトレードオフを行うため、いずれの場合もどちらも「優れた」ものではありません。

244

1つは、 100%互換ではありません with Python 2.xであり、3.xでは 予備サポート のみです。

マージできるものでもありません-PyPyによって提供されるPython実装は、作成したフレームワークを使用して生成されます。これは非常にクールですが、既存のCPython実装とは完全に異なります。それは完全な代替品でなければなりません。

非常に具体的な違い PyPyとCPythonの間には、大きな違いがあります 拡張モジュール がサポートされている-標準ライブラリを超えたい場合、それは大きいです対処。

また、PyPyは普遍的に高速ではないことにも注意してください。

62
Gareth Latty

Guido van Rossumによるこのビデオ を参照してください。彼はあなたが12分33秒で尋ねたのと同じ質問について話します。

ハイライト:

  • Python 3互換性の欠如
  • 拡張機能サポートの欠如
  • グルーコードとしては適切ではありません
  • 速度がすべてではない

結局のところ、彼が決定するのは...

52
none

PyPy siteによると、現在32ビットおよび64ビットのIntel x86アーキテクチャでのみ動作しているのに対し、CPythonは他のプラットフォームでも動作していることが理由の1つである可能性があります。これはおそらく、PyPyのプラットフォーム固有の速度強化によるものです。速度は良いことですが、多くの場合、言語実装は可能な限り「プラットフォームに依存しない」ことを望んでいます。

14
Bitwise

より多くの洞察を得るには、この基調講演を David Beazley で見ることをお勧めします。 PyPyの性質と複雑さを明確にすることで質問に答えます。

7
Abhishek Mishra

ここで述べたことすべてに加えて、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/ を参照してください。

6
asmeurer