注意:标题是故意挑衅的(让你点击它并想要关闭投票的问题),我不想看起来全神贯注.
我一直在阅读和听到越来越多关于PyPy的内容.这就像一个线性图.
为什么PyPy如此特别?据我所知,用语言本身编写的动态语言的实现并不是那么罕见,或者我没有得到什么?
有些人甚至称PyPy为"未来"[python],或者在此实现中看到某种深层潜力.这究竟是什么意思?
use*_*673 47
在谈论PyPy项目时要注意的好处是它的目的是实际提供两个可交付成果:首先是JIT编译器生成器.是的,生成器,意味着他们正在实现编写高动态编程语言(如Python)的实现的框架.第二个是该框架的实际测试,是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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
因此,只需在某些计算中使用PyPy即可获得近10倍的加速!
因此,随着PyPy项目正在慢慢成熟并提供一些优势,它吸引了更多人们试图解决其代码中的速度问题的兴趣.PyPy的替代品是unladden swallow(谷歌项目),旨在通过使用LLVM的JIT功能加速CPython实现,但由于开发人员需要处理LLVM中的错误,因此无法实现吞噬的进展.
总而言之,我认为PyPy被认为是Python的未来,因为它将语言规范与VM实现分开.引入的功能,例如.无堆栈的Python,然后可以用很少的额外工作在PyPy中实现,因为它只是改变了语言规范并且你保持共享代码相同.更少的代码,更少的错误,更少的合并,更少的努力.
例如,通过编写RPython中的新bash shell实现,您可以免费获得JIT编译器并加速许多Linux shell脚本,而无需实际学习任何繁重的JIT知识.
小智 22
让我们这样看......假设您想要实现自己的动态语言,并希望快速实现.你有两个选择:艰难的方式和pypy.
困难的方式意味着在c中编写解释器,然后在c中使用混合非常复杂的技术,例如方法jit,thread-jit,跟踪jit,多态内联缓存,循环不变运动来实现jit等等......花了好几年的时间来调整它,如果你坚持不懈而且不放弃,你最终可能会得到一个快速动态的语言实现.
或者,您可以使用pypy框架.这意味着,用python而不是c编写解释器(实际上,它将是rpython,一个可以编译为c的更有限的python子集).一旦你编写了解释器,pypy就会自动生成一个免费的jit.你基本上完成了.
听起来不错,对吧?
| 归档时间: |
|
| 查看次数: |
7050 次 |
| 最近记录: |