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

Google发布了一个旨在将Python代码编译成Go的新项目

时间:2023-03-19 10:16:11 科技观察

【.com快译】Python很可能会遇到另一个强大的编程语言对手:GoogleGo。  作为一个实验性项目,Google的Grumpy可以将Python代码转换为Go形式,这意味着Python程序在编译后将能够使用Go工具链作为静态二进制文件运行。其转换为Python相当于创建一个Go应用程序。  在一篇开源发布的博客文章中,谷歌指出该项目将加速对其基于Python的YouTube前端的升级。谷歌之前的工作也遇到了Python用户普遍的挫败感:很难使用CPython进行有效扩展,CPython是用C语言编写的默认Python解释器。  谷歌表示,“我们相信Grumpy的扩展潜力远远超过CPython的实际工作量。”,但这对它的运行速度影响不大。毕竟现在已经有很多将Python编译成二进制形式的项目了。考虑到Python自身动态类型系统的特点,这种方式很难实现提速。例如,Cython只有在开发人员提供静态C类型信息的情况下才能加速。  据谷歌称,Grumpy能够通过消除一些CPython遗留负担来加速Python代码。其中,提速效果最明显的就是刻意放弃对C扩展模块的支持,以换取提速。目前有大量使用C扩展模块的资源库,其中相当一部分来自于Python标准库(如用于对接C代码的ctypes)。  由于不再支持C扩展,Grumpy没有CPython的全局解释器锁(GlobalInterpreterLock),这通常被视为平滑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早期的Python2.x语法。另外还有很多标准库没有移植,exec或者eval等函数无法正常使用。  最重要的缺失部分不是对C扩展本身的支持,而是依赖于C扩展的各种资源库。C扩展的丢失意味着在Grumpy当前的互操作机制下只能编译和运行最常见的Python脚本。虽然谷歌可以用Go编写替代方案,但一些大型Python库(例如NumPy)将完全不可用,而此类库是整个Python生态系统的重要组成部分。  原标题:Google通过将Python变成Go来提升Python原作者:SerdarYegulalp敬请关注《科技新闻早报》专栏!