当前位置: 首页 > 科技观察

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

时间:2023-03-15 16:51:13 科技观察

大家好,我很高兴地宣布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使用它的跟踪JIT来提高性能;Jython和IronPython构建在具有广泛JIT支持的虚拟机上。那么为什么我们认为值得开始创建一个新的实现呢?简而言之,因为我们认为绝大多数有前途的技术与现有实施不兼容。例如,在Javascript世界中,由于强大的性能优势,从跟踪JIT切换到method-at-a-timeJIT。相同的性能优势是否适用于Python是值得商榷的,但由于这两种方法从根本上与现有实现不兼容,答案只能是一次构建一个新的方法JIT。另一个区别是我们计划使用传统的垃圾收集器来有效地支持扩展模块。同样,此时我们无法知道这是否是更好的方法,但对于难以针对现有实现进行测试的JIT,该决定是必要的。从头开始的缺点是创建新的语言实现无疑是一项艰巨的任务。幸运的是,一些工具已经开始出现,以帮助完成这一过程。特别是,Pyston是建立在LLVM之上的,允许我们在其之上生成高质量的代码,而无需自己处理细节。不过,新的Python实现是一项艰巨的任务,因此Pyson不会立即准备好使用。它是如何工作的从顶层开始,Pyston将解析后的Python代码转换为LLVM中间代码。然后中间代码经过LLVM的优化,传递给LLVM的JIT引擎生成可执行的机器码。LLVM包括许多优化步骤和机制,使其能够生成非常快速的代码。然而,问题在于LLVM无法启动Python代码,因为动态语言必须将所有低级行为隐藏在TypeDispatch后面。为了解决这个问题,Pyston采用了类型推断:虽然通常不可能证明一个变量将属于特定类型,但Pyston通常可以根据某些特定事实预测一个对象将是什么类型。一旦做出预测,Pyston将在运行时检查预测,在与预测对应的快分支和与预测失败对应的慢分支之间进行选择。Pyston还包括许多其他现代技术,例如隐藏类和专为快速属性查找和快速方法调用而设计的内联缓存。您可以在Github页面上找到更多技术细节,以及涵盖这些技术细节的单独博客文章。StatusPyston仍处于起步阶段,仅支持Python语言的最小子集。谈论基准测试数据并不公平,因为1)Pyston不支持足够大的基准测试,因此不具有代表性。2)Pyston不支持所有运行时特性(包括一些可能会导致速度下降的特性),因此这不是一个同类比较。有了这两个警告,Pyston在性能上经常可以击败CPython,但仍然不如PyPy。代码在Apache2.0许可下发布在Github上,技术文档也在不断增加。还有很多工作要做,我们正在扩充团队:如果你对这种东西感兴趣,请联系我们!请继续关注项目进展。您也可以在这里订阅我们的邮件列表。原文链接:Dropbox翻译:伯乐在线-atupal翻译链接:http://blog.jobbole.com/65414/