博主呓语:

谷歌发布新项目,旨在将Python代码编译为Go

Posted by 破冰 on 2017-1-9 10:10 Monday

Python很可能遭遇另一位强劲的编程语言对手:谷歌Go

作为一项实验性项目,谷歌公司的Grumpy能够将Python代码转换为Go形式,这意味着Python程序将能够在编译后利用Go工具链作为静态二进制文件运行。其对Python的转换相当于创建了一款Go应用。

在一篇开源发布博文中,谷歌公司指出,该项目能够加快其Python开发型YouTube前端的升级工作。谷歌公司在此前的工作也遇到了Python用户的普遍困扰:很难利用CPython——以C语言编写的默认Python解释器——进行有效扩展。

谷歌公司表示,“我们认为Grumpy拥有远超CPython的实际工作负载扩展潜力。”

以小失换大得

尽管Grumpy需要通过Go工具链将Python代码转换为静态二进制文件,但这并不会给其运行速度带来多少影响。毕竟已经存在众多将Python编译为二进制形式的项目,考虑到Python本身的动态类型系统特性,其很难通过这种方式实现提速。举例来说,Cython只有在开发者提供静态C类型信息时才能实现加速。

根据谷歌的说法,Grumpy能够通过消除部分CPython遗留负担加速Python代码。其中提速效果最明显的是刻意舍弃对C扩展模块的支持以换取速度提升。目前存在着大量使用C扩展模块的资源库,其中相当一部分来自Python标准库(例如用于同C代码对接的ctypes)。

由于不再支持C扩展,Grumpy并不具备CPython的全局解释器锁(Global Interpreter Lock),而这通常被视为顺利实现Python并发负载运行的最大障碍。Grumpy还将使用Go的垃圾回收机制进行内存管理,而不再沿用CPython的类似机制。

Grumpy允许导入Go软件包并配合与Go模块同样的语法加以使用,从而在Python与GO之间建立起紧密的互操作性。这不禁让人联想到pythonnet项目,其允许Python与.Net程序集实现互操作性。

缺失部分

Go及其工具链目前已经被众多第三方用于开发新型语言。其中Have项目利用Go作为转换目标,而Oden项目则利用Go工具链在Haskell或者Lisp当中创建一种新的函数性语言。Oden项目已经于去年年底停止开发,不过Have项目则仍在积极推进当中。

利用Grumpy,Go的工具链将有助于帮助庞大的Python用户社区解决诸多现实难题。虽然谷歌公司的实际使用效果应该更好,毕竟Grumpy是专门针对其需求打造的项目,但我们也相信广泛Python社区同样将借此解除或者应对诸多既有障碍。不过,这一切都要视Grumpy项目的实际发展状况而定。

举例来说,Grumpy仅支持Python的早期Python 2.x语法,另外亦有众多标准库未完成移植,exec或eval这样的函数也尚无法正常使用。

而最重要的缺失部分并非对C扩展本身的支持,而是依赖于C扩展的各类资源库。失去了C扩展,意味着只有最为普通的Python脚本才能编译并运行在Grumpy的当前互操作机制之下。虽然谷歌方面也可以利用Go语言编写出相关替代方案,但其中某些大型Python库——例如NumPy——将完全不可用,而此类库正是Python整体生态系统中的重要组成部分。

原文标题:Google boosts Python by turning it into Go

原文作者:Serdar Yegulalp

发表评论: