再次重申下,PyPy真正可贵之处在于我们可以利用RPython实现各种不同的Python解释器,不用去关心JIT除了一些小的提示外)。PyPy到时候会利用RPython工具链/PyPy(2)为我们自动实现JIT

事实上,我们还可以更抽象一点,我们理论上可以写一个适用于任何语言的解释器,然后将它扔给PyPy,最后获得那种语言的JIT。原因是PyPy仅仅关心的是优化解释器,而不会去关心这个解释器到底解释的是什么语言。

理论上你自己可以写一个适用于任何语言的解释器,然后将这个解释器传给PyPy,最后你得到这个语言的一个JIT。一个简单的题外话,我这里想提一下,JIT本事是相当棒的。它使用了一种叫做跟踪的技术,按照下面的步骤执行:

想获取更多信息,可以参考这篇文章,易于理解,并且非常有趣

最后收尾:我们使用PyPy的RPython-to-C或者其他目标平台)编译器去编译PyPy的基于RPython实现的解释器。

结尾

为什么它如此的伟大?为什么这个疯狂的想法值得我们去追求?我想Alex Gaynor已经在他的博客上面做了很好的解释了:“[PyPy就是未来] 因为[它]提供了更快的速度,更大的灵活性,并且对于Python的成长也提供了一个更好的平台”

总之:

  • 它很快,因为它将源代码编译成了本地机器码使用了JIT)
  • 它很灵活,因为除了极少数的额外工作需要做外,它就能将JIT加入你的解释器中
  • 它还是很灵活,因为你能使用RPython实现你的解释器,这个比其他的比如C语言)更易扩展。事实上,它是如此的简单,这里有一篇教程教你如何实现你自己的解释器。

附录: 其他一些你可能已经听过的名字

  • Python 3000 (Py3k): Python 3.0的一个别名,2008年释出的一个主要版本,但是它并不向后兼容.。Py3k团队预测这个版本被完全采用可能需要5年时间.。现在绝大多数注意: 这个是江湖传闻)Python开发者继续在使用2.x版本,不过现在人们越来越多的对Py3k开始关心了。
  • Cython: 一个Python的超集,能够调用C语言的函数
  • 目标: 允许你为你的Python代码写C扩展
  • 允许你为你的Python代码加入静态类型,运行编译并达到接近C语言的性能。
  • 这个跟PyPy比较类似,但是不是一样的。使用这个的时候,在提交给编译器之前必须用户代码里面写好这些特殊代码。如果使用PyPy的话,你写的还是普通形式的Python代码,编译器会帮你处理一切优化的工作。
  • Numba: 将JIT加入到被注解的Python代码中,简单来讲就是,你给它一些提示,它就会优化加速你这段代码。Numba是Anaconda发行版一系列数据分析和管理的软件包)的一部分。
  • IPython: 跟我们讨论过的其他版本完全不一样。这是一个Python的计算环境。为一些GUI工具集和浏览器体验等提供支持。
  • Psyco: 一个Python的扩展模块,也是早先的一种Python JIT的成果。 然而,它已经被标注为“停止维护和死亡”了。事实上,Psyco的首席开发者Armin Rigo现在在为PyPy工作。

语言绑定

  • RubyPython: Ruby和Python虚拟机的一座桥梁。允许你在你的Ruby代码中嵌入Python代码。你定义Python的起始位置,然后RubyPython负责在不同VM直接传递整理数据。
  • PyObjc: Python和Objective-C语言直接的桥梁。实际上,这意味着你能在你的Python代码中使用Objective-C的库包括创建一个OS X应用程序所需要的一切),反过来在Objective-C里面也可以使用Python的模块。这样的话,CPython用C语言来实现就很方便了,因为 C语言是Objective-C的一个子集。
  • PyQt: 同PyObjc帮你绑定OS X GUI组件类似,PyQt帮你绑定Qt应用程序框架,让你可以创建丰富的图形界面,访问关系数据库等等。另外的一个旨在帮你简化从Python到另外的框架的工具。 

JavaScript 框架

  • pyjs (Pyjamas): Python中一个创建web和桌面应用程序的框架。包含一个Python-to-JavaScript的编译器和其他一些工具。
  • Brython: 一个使用JavaScript语言写的Python虚拟机,可以让Py2k 代码在浏览器中执行。

译文链接:http://www.oschina.net/translate/why-are-there-so-many-pythons


评论关闭