42

注: タイトルは意図的に挑発的であり (クリックして質問にクローズ投票したくなるようにするため)、夢中になっているように見せたくありません。

私はPyPyについてますます読んだり聞いたりしています。線形グラフのようなものです。

  • PyPy はなぜ特別なのですか? 私の知る限り、言語自体で記述された動的言語の実装はそれほど珍しいことではありませんか、それとも何かを得ていないのでしょうか?

  • PyPy を [Python の] 「未来」と呼んだり、この実装にある種の深い可能性を見出したりする人さえいます。これは正確にはどういう意味ですか?

4

5 に答える 5

47

PyPyプロジェクトについて話すときは、実際に2つの成果物を提供することを目的としていることに注意してください。1つはJITコンパイラジェネレータです。はい、ジェネレーターです。つまり、Pythonなどの非常に動的なプログラミング言語の実装を作成するためのフレームワークを実装しています。2つ目は、このフレームワークの実際のテストであり、PyPyPythonインタープリターの実装です。

現在、PyPyが特別である理由は複数あります。プロジェクト開発は2004年から実行され、会社からではなく研究プロジェクトとして開始され、PythonでPythonを再実装し、PythonでJITコンパイラを実装し、RPython(PythonコードフレームワークがそのコードをC)にコンパイルされたバイナリに変換できるようにするためのいくつかの制限があります。

PyPyの現在のバージョンはCPythonバージョン2.5と99%互換性があり、Django、Twisted、および他の多くのPythonプログラムを実行できます。以前は、既存のCPython C拡張機能を実行できないという制限がありましたが、それはPyPyのcpyextモジュールでも対処されています。C APIとの互換性は可能であり、ある程度はすでに実装されています。JITも非常にリアルです。このpystoneの比較を参照してください。

CPythonの場合:

Python 2.5.5 (r255:77872, Apr 21 2010, 08:44:16) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from test import pystone
>>> pystone.main(1000000)
Pystone(1.1) time for 1000000 passes = 12.28
This machine benchmarks at 81433.2 pystones/second

PyPyの場合:

Python 2.5.2 (75632, Jun 28 2010, 14:03:25)
[PyPy 1.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``A radioactive cat has 18
half-lives.''
>>>> from test import pystone
>>>> pystone.main(1000000)
Pystone(1.1) time for 1000000 passes = 1.50009
This machine benchmarks at 666625 pystones/second

したがって、いくつかの計算でPyPyを使用するだけで、ほぼ10倍のスピードアップを得ることができます。

したがって、PyPyプロジェクトはゆっくりと成熟し、いくつかの利点を提供しているため、コードの速度の問題に対処しようとしている人々からより多くの関心を集めています。PyPyの代わりに、LLVMのJIT機能を使用してCPythonの実装を高速化することを目的としたunladden swallow(Googleプロジェクト)がありますが、開発者がLLVMのバグに対処する必要があるため、unladdenswallowの進行は遅くなりました。

つまり、要約すると、PyPyは言語仕様をVM実装から分離しているため、Pythonの未来と見なされていると思います。で導入された機能、例えば。スタックレスPythonは、言語仕様を変更するだけで、共有コードを同じに保つため、追加の労力をほとんどかけずにPyPyに実装できます。より少ないコード、より少ないバグ、より少ないマージ、より少ない労力。

また、たとえばRPythonで新しいbashシェルの実装を作成することで、JITコンパイラを無料で入手し、JITに関する深い知識を実際に習得しなくても、多くのLinuxシェルスクリプトを高速化できます。

于 2010-07-24T15:23:27.213 に答える
22

このように見てみましょう...独自の動的言語を実装し、それを高速化したいとします。ハードウェイとpypyの2つのオプションがあります。

難しい方法とは、インタプリタをcで記述し、メソッド-jit、threaded-jit、トレースjit、多形インラインキャッシュ、ループ不変条件などの非常に複雑な手法を組み合わせて、手動でjitを実装することです。 、などなど...調整に数年を費やしました。多くのことを頑張って諦めなければ、高速で動的な言語の実装になってしまう可能性があります。

または、pypyフレームワークを使用できます。つまり、インタプリタをcではなくpythonで記述します(実際には、cにコンパイルできるPythonのより限定されたサブセットであるrpythonになります)。インタプリタを作成すると、pypyは自動的に無料でjitを生成します。そして、あなたは基本的に完了です。

いいですね

于 2010-12-09T05:58:35.397 に答える
11

PyPy の優れた点は (高速であり、RPython (Python 言語のサブセット) で書かれているため基本的にブートストラップされていることを除けば)、PyPy で作成したプログラムに対して自動的に作成された JIT (ジャスト イン タイム コンパイラ) を提供できることです:独自の言語を迅速に実装し、かなり高速にするのに理想的です。

詳細はこちら

于 2010-06-03T22:11:30.813 に答える
5

最近、一部のベンチマークで CPython の速度を超えたことは言うまでもありません。彼らのブログを見てください。ここからはアクセスできません:

http://morepypy.blogspot.com/

于 2010-06-03T22:30:42.550 に答える
4

私たちのほとんどは、C よりも Python を書く方が簡単であることに同意しているため、Python (技術的には RPython) で書かれた Python インタープリターは、CPython よりもはるかに簡単に変更でき、バグも少ないはずです。

于 2010-06-03T22:21:36.500 に答える