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


165

私はPyPyを見ていましたが、なぜそれがメインラインのPythonディストリビューションに採用されていないのか疑問に思っていました。JITコンパイルやメモリフットプリントの削減など、すべてのPythonコードの速度が大幅に向上しませんか?

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


4
さらに、pypyはまだnumpyをサポートしていません。morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html
rthiago

そして、numpyサポートは、PyPyに切り替える前に科学計算アプリケーションが必要とするもののほんの一部にすぎません。ここでは、元のnumpyの作者からいくつかの説得力の考えは以下のとおりです。technicaldiscovery.blogspot.com/2011/10/...
スチュアートベルク

3
これらの回答やコメントは古くなっていると思います
Marlon Abeykoon

回答:


249

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

理論的には、PythonコミュニティはPyPyを普遍的に採用し、PyPyはリファレンス実装になり、CPythonは廃止される可能性があります。ただし、PyPyには独自の弱点があります。

  • CPythonは、Cで記述されたPythonモジュールと簡単に統合できます。これは、伝統的に、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よりも高速です。最後に、どの実装がより効率的かは、特定のアプリケーションのボトルネックがどこにあるかによって異なります。

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

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


4
PyPyがスクリプトの実行に適していないことは事実ではありません。起動時間はCPythonとほぼ同じで、解釈速度はほぼ同じです。
2013

6
PyPyにはインクリメンタルGCが付属しており、結果としてゲームに適している可能性があることは注目に値します。
porgarmingduod 2013年

63

1つは、Python 2.xとの100%の互換性がなく、3.xの予備的なサポートしかないことです。

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

PyPyとCPythonの間には非常に具体的な違いがいくつかあります。大きな違いは、拡張モジュールのサポート方法です。これは、標準ライブラリの枠を超えたい場合は非常に重要です。

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


54

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

ハイライト:

  • Python 3互換性の欠如
  • 拡張サポートの欠如
  • グルーコードとしては不適切
  • スピードがすべてではありません

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


3
ビデオの関連部分への直接リンク付きリンクの+1!また、1陽気真実グイド・ヴァンロッサム非公式世論調査のために、「どのように多くの人々の生産にPyPyを使用していますか?...?は何の手まあ、私は[CPythonのための]希望はまだあると思いません。」
Trevor Boyd Smith

15

1つの理由は、PyPyサイトによると、現在、32ビットおよび64ビットのIntel x86アーキテクチャでのみ実行されているのに対し、CPythonは他のプラットフォームでも実行されているためです。これはおそらく、PyPyのプラットフォーム固有の速度の向上によるものです。速度は良いことですが、言語の実装をできるだけ「プラットフォームに依存しない」ものにしたいと考える人がよくいます。


6
ARMバックエンドは「ほぼそこ」にあり、PowerPCバックエンドはWIPであることに注意してください。また、これはJITコンパイラのみを参照しており、JITを新しいアーキテクチャに移植するには、比較的単純で低レベルのIR用のコードジェネレータを実装するだけでよいことに注意してください。

1
2018年現在、PyPyはより多くのアーキテクチャ x86(Linunx、Windows、MacOSおよびBSDでは32/64ビット)で動作しますが、Linuxでは、より新しいARMハードウェア(ARMv6またはARMv7、VFPv3を搭載)、ビッグエンディアンおよびリトルエンディアンも実​​行しますPPC64、およびs390xのバリアント。
フレデリック・Grosshans


6

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


2
2018年の時点で、sympyのさまざまな使用法でおよそ1桁のスピードアップが見られたことを確認できます
フレデリック

1
@FrédéricGrosshans興味深い。もう一度ベンチマークを試す必要があります。
asmeurer 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.