Pyston:Dropbox 正开发的开源 Python 解释器

大家好,我非常激动宣布 Pyston,这是一个正在由 Dropbox 开发的开源 Python 解释器。 这个项目的目标是产生一个高性能的 Python 解释器,使 Python 也能用于那些被如 C++ 这样的传统系统语言占据的领域。

在 Dropbox ,我们热爱 Python ,尝试用它来做一切可以做的事情。然而随着规模的的变大和要处理的问题越来越多,我们开始发现继续使用 Python 而要达到我们的性能目标有时候极其困难。有时用另外一门语言重写也起不了多大作用。我本人非常喜欢 Python , 每次当我们决定重写什么东西的时候我都很受伤,所以我想为它做一点什么。在静态编译上做了一些无用功后,我们到处查资料然后发现 JIT 技术在 Javascript 上非常成功,尤其 是 Chrome 的 V8 引擎大大地改善了 Javascript 的性能。我们希望通过同样的技术也能在 Python 上达到相同的性能提升。

Pyston 现在仍然处于初期阶段,还不能投入使用。但我们希望早点在它的生命周期之初就公布并开源出来,这样我们就能和 Python 和 JIT 社区来合作开发了。太多的细节在这篇博客写不下,但我们想说一下我们为什么需要一个新的 Python 实现,以及讲一点点 Pyston 是怎么工作的。

为什么选择实现一个新的 Python 解释器

早就已经有了一大堆使用 JIT 技术的 Python 实现:PyPy 使用它的 tracing JIT 来提高性能;Jython 和 IronPython 都是构建在广泛支持 JIT 的虚拟机上的。所以为什么我们认为还值得开始创造一个新的实现呢?

简单来说,是因为我们认为绝大多数有前景的技术都和现有的实现不兼容。比如,在 Javascript 界就因为强大的性能优势从 tracing JIT 切换到 method-at-a-time JIT 。对 Python 是否有同样的性能优势还有待商榷,但由于这两种途径从根本上都是和现有的实现不兼容的,所以答案只能是构建一个新的 method-at-a-time JIT。

另外一个区别是我们对传统的垃圾回收器有计划地使用来高效地支持拓展模块。同样,我们现在也无法知道这是否是一种更好的方法,但这个决定对一个很难在现有的实现下进行测试的 JIT 来说是必不可少的。

从零开始的坏处就是,创造一个新的语言的实现毋庸置疑是一个巨大的任务。幸运的是, 有助于这个过程的一些工具已经开始出现了。尤其是 Pyston 是构建在 LLVM 之上的,使得我们不需要自己处理细节就可以生成上层的高质量代码。尽管如此,一个新的 Python 实现还是一个巨大 的工程,所以 Pyson 将不会马上就能投入使用。

它是怎么工作的

从顶层看,Pyston 将解析好的 Python 代码转换成 LLVM 中间代码。然后中间代码就通过 LLVM 的优化然后传递给 LLVM 的 JIT 引擎,产生可执行的机器代码。LLVM 包含许多优化步骤和机制,使得它能产生非常快的代码。

然而问题是 LLVM 不能推出 Python 代码,因为动态语言不得不把所有底层的行为都隐藏在类型分派(Type Dispatch)后。为了解决这个问题,Pyston 采用类型推断:虽然证明一个变量将会是某个特别的类型通常是不可能,但是 Pyston 经常可以根据一些确定的事实来预测某个对象会是什么类型。一旦做出 了一个预测,Pyston 将在运行时检测这个预测,在预测所对应的快速分支和预测失败所对应的慢速分支之间进行选择。

Pyston 还包含许多其他的现代技术,比如为快速查找属性和快速调用方法而设计的隐藏类和内联缓存。你可以在 Github 页面上找到更多的技术细节,以及一篇单独讲述这些技术细节的博文。

现状

Pyston 仍然处于初始阶段,只支持 Python 语言的一个最小子集。拿基准测试数据来说话是不怎么公平的,因为 1) Pyston 不支持足够大的基准测试,所以这不具备代表意义。2) Pyston 不支持所有运行时特性(包括一些可能带来减速的特性),所以这不是一个同类的比较。 在这两点注意事项下,Pyston 在性能上通常可以击败 CPython,但是仍然弱于 PyPy。

代码以 Apache 2.0 许可证发布在 Github 上,技术文档正在增加。还有大量的工作需要做, 我们正在扩张团队:如果你对这类事感兴趣,请联系我们!

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-08-01 22:49:19

Pyston:Dropbox 正开发的开源 Python 解释器的相关文章

用 Python 实现 Python 解释器

Allison 是 Dropbox 的工程师,在那里她维护着这个世界上最大的 Python 客户端网络之一.在去 Dropbox 之前,她是 Recurse Center 的协调人, 是这个位于纽约的程序员深造机构的作者.她在北美的 PyCon 做过关于 Python 内部机制的演讲,并且她喜欢研究奇怪的 bug.她的博客地址是 akaptur.com. 介绍 Byterun 是一个用 Python 实现的 Python 解释器.随着我对 Byterun 的开发,我惊喜地的发现,这个 Pytho

用Python实现Python解释器

Allison 是 Dropbox 的工程师,在那里她维护着这个世界上最大的 Python 客户端网络之一.在去 Dropbox 之前,她是 Recurse Center 的协调人, 是这个位于纽约的程序员深造机构的作者.她在北美的 PyCon 做过关于 Python 内部机制的演讲,并且她喜欢研究奇怪的 bug.她的博客地址是akaptur.com. 介绍 Byterun 是一个用 Python 实现的 Python 解释器.随着我对 Byterun 的开发,我惊喜地的发现,这个 Python

未来物联网全栈开发 —— JavaScript OR Python?

未来物联网全栈开发 -- JavaScript OR Python? 物联网开发涉及面庞杂,开发周期长,所以我们必须寻找一种覆盖面广的编程语言和方法. JavaScript 支持 HTTP 和 JSON .支持函数式编程.可提供交互式环境等特点堪称适用于物联网全栈开发: Python 作为一种胶水语言,可在物联网及嵌入式系统中承担大量任务,并部分替代以上语言.   物联网是新一代信息技术的重要组成部分,也是"信息化"时代的重要发展阶段,不太清楚的可以看上篇文章<IoT领域的故事.

以正确的方式开源 Python 项目(转)

大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清晰和无痛.我不是简单的指--"创建一个GitHub库,提交,在Reddit上发布,每天调用它".在本文的结尾,你可以把现有的代码转换成一个能够鼓励他人使用和贡献的开源项目. 然而每一个项目都是不同的,但其中将现有代码开源的流程对所有的Python项目都是类似的.在另一个受欢迎的文章系列里我写了"以正确方式开始一个Django项目&qu

《Python数据科学实践指南》——1.2 Python解释器

1.2 Python解释器 由于Python是一门开源语言,所以只要愿意,任何人都可以为其实现一个解释器.目前官方解释器CPython是绝对主流,如果读者有兴趣,可以了解一下其他的版本,比如支持JIT(即时编译)的PyPy,可以把Python编译成C语言的Cython,拥有notebook这样友好.方便编程界面的IPython等.本书会使用官方解释器CPython进行讲解,并且还会使用到一些第三方的库,本节也将介绍一下如何在主流的操作系统中安装必要的软件. 1.2.1 Mac OS X系统 如果

《树莓派Python编程入门与实战》——3.4 关于Python解释器

3.4 关于Python解释器 树莓派Python编程入门与实战 Python是一种解释型的语言,而不是一种编译型的语言.编译型的语言在它执行之前需要一次性把它所有的程序语句变成二进制代码.而解释型的语言,每次检查一条语句,翻译成二进制代码然后执行. 通过使用下列三类工具你可以学习大部分的Python语法和概念. 交互式shell --交互式shell允许你输入一条Python语句然后立即检查错误并解释. 开发环境shell--这个工具提供了很多特性来帮助Python开发.通过交互式shell,

《树莓派Python编程入门与实战(第2版)》——3.4 关于Python解释器

3.4 关于Python解释器 Python是一种解释型的语言,而不是一种编译型的语言.编译型的语言在执行之前需要一次性将其所有的程序语句变成二进制代码,而解释型的语言,每次检查一条语句,翻译成二进制代码然后执行. 通过使用下列3类工具,你可以学习大部分的Python语法和概念. 交互式shell--交互式shell允许你输入一条Python语句然后立即检查错误并执行. 开发环境--这个工具提供了很多特性来帮助 Python 程序开发.它有一个交互式shell,每一条 Python 语句在输入的

10款Web开发最佳的Python框架

Python是跻身于当代IT世界最流行和代码最高效的编程语言之一.Python框架能帮助你快速启动Web应用. 1.CubicWeb CubicWeb的最重要的功能是其代码的可重用性,由一个个代码单元组成.它灵活又强大,并且还有一些特别的功能,包括RQL查询语言和支持有效编码的语义视图功能.这是语义Web应用程序的最佳解决方案,并且提供理想的环境. 作为一个程序员,我们必须了解Python这门编程语言的灵活和强大.框架的选择取决于Web应用程序的使用目的和复杂程度.测量项目所需的负荷.可扩展性和

《Python数据科学实践指南》一1.2 Python解释器

1.2 Python解释器 由于Python是一门开源语言,所以只要愿意,任何人都可以为其实现一个解释器.目前官方解释器CPython是绝对主流,如果读者有兴趣,可以了解一下其他的版本,比如支持JIT(即时编译)的PyPy,可以把Python编译成C语言的Cython,拥有notebook这样友好.方便编程界面的IPython等.本书会使用官方解释器CPython进行讲解,并且还会使用到一些第三方的库,本节也将介绍一下如何在主流的操作系统中安装必要的软件. 1.2.1 Mac OS X系统 如果