在谈论 PyPy 项目时要注意的是,它实际上旨在提供两个可交付成果:首先是 JIT 编译器生成器。是的,生成器,这意味着他们正在实现一个框架,用于编写高度动态的编程语言(例如 Python)的实现。第二个是对这个框架的实际测试,是PyPy Python解释器实现。
现在,为什么 PyPy 如此特别有多个答案:项目开发从 2004 年开始,从研究项目开始而不是从公司开始,在 Python 中重新实现 Python,在 Python 中实现 JIT 编译器,并且可以翻译 RPython (Python 代码有一些限制,框架能够将该代码转换为 C)到编译的二进制文件。
当前版本的 PyPy99% 兼容 CPython 2.5 版,可以运行 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 的替代方案是 unladden Swallow(一个 Google 项目),旨在通过使用 LLVM 的 JIT 功能来加速 CPython 的实现,但 unladden Swallow 的进展缓慢,因为开发人员需要处理 LLVM 中的错误。
所以,总而言之,我猜 PyPy 被认为是 Python 的未来,因为它将语言规范与 VM 实现分离。中引入的功能,例如。 stackless Python,然后可以用很少的额外工作在 PyPy 中实现,因为它只是改变语言规范并且您保持共享代码相同。更少的代码,更少的错误,更少的合并,更少的工作。
例如,通过在 RPython 中编写一个新的 bash shell 实现,您可以免费获得一个 JIT 编译器并加速许多 linux shell 脚本,而无需实际学习任何大量的 JIT 知识。