PyPy:关于什么是嗡嗡声?
注意:标题是故意挑衅的(让你点击它并想要近距离投票),我不想看起来心事重重。
我一直在阅读和听更多关于PyPy 。 这就像一个线性图。
-
为什么PyPy如此特别? 据我所知,使用这些语言编写的dynamic语言的实现本身并不是那么罕见,或者我没有得到什么东西?
-
有些人甚至称PyPy为“python的未来”,或者在这个实现中看到某种深度的潜力。 这到底是什么意思?
在谈论PyPy项目时,要注意的一点是它实际上提供了两个可交付成果:第一个是JIT编译器生成器 。 是的,生成器,这意味着他们正在实现一个框架,编写高度dynamic的编程语言,如Python的实现。 第二个是这个框架的实际testing,并且是PyPy Python解释器实现 。
现在,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的一个替代scheme是unladden swallow(一个Google项目),其目的是通过使用LLVM的JITfunction来加速CPython的实现,但由于开发人员需要处理LLVM中的错误,所以缓慢吞下的进度减慢了。
所以,总结起来,我猜PyPy被认为是Python的未来,因为它将语言规范与VM实现分开。 function介绍,例如。 无堆栈的Python,然后可以在PyPy中用很less的额外努力来实现,因为它只是改变了语言规范,并且保持共享代码相同。 更less的代码,更less的bug,更less的合并,更less的努力。
例如,通过编写一个在RPython中的新的bash shell实现,您可以免费获得一个JIT编译器,并且可以加速很多linux shell脚本,而无需实际学习任何重要的JIT知识。
让我们看看这样…假设你想实现你自己的dynamic语言,并且你想让它变得更快。 你有两个select:困难的方式和pypy。
困难的方法意味着用c写你的解释器,然后用c语言手工实现一个jit,使用一种非常复杂的技术,例如jit,threaded-jit,tracing jit,多态内联caching,循环不变运动等等…花了几年的时间进行调整,如果你坚持了很多,你不放弃,你可能会结束一个快速的dynamic语言实现。
或者,你可以使用pypy框架。 这意味着,用python而不是c编写你的解释器(实际上,它将是rpython,它可以被编译为c的一个更有限的python子集)。 一旦你写了你的解释器,pypy会自动生成一个jit。 而你基本上完成了。
听起来不错,对吧?
关于PyPy的一件很酷的事情(除了被快速编写成RPython(Python语言的一个子集),基本上是引导的),它可以为你在PyPy中编写的任何程序提供一个自动创build的JIT (即时编译器):this使得理想的执行,快速,你自己的语言 ,让它相当快。
在这里阅读更多
更何况,他们刚刚超过了一些基准CPython的速度。 看他们的博客,我想。 我无法从这里得到它:
由于我们大多数人都认为Python比C编写起来更容易,所以用Python编写的Python解释器(技术上说RPython)应该能够比CPython更容易被修改,而且错误更less。