17611538698
webmaster@21cto.com

Codon​:IEEE Spectrum 推出新Python编译器

资讯 0 1283 2023-04-03 06:16:36

IEEE Spectrum最近发布了Codon,这是一种专门开发的 Python 编译器,正如他们所说,“为Python 众所周知的慢速型编译器提供涡轮增压技术”。


图片

“我们在编译过程中进行类型检查,这让我们避免了在运行时进行所有昂贵的类型操作,”麻省理工学院 CSAIL 研究生和 Codon 的作者 Ariya Shajii 说。


Codon在运行时没有任何不必要的数据或类型检查,可以达到零开销。在性能方面,“Codon 可以与 C++ 相当。与 Python 官方解释器相比,我们将看到的是 10 到 100 倍的改进,”他说。但 Codon 的方法有其权衡取舍。“我们进行这种静态类型检查,并且我们不允许 Python 的一些动态特性,比如在运行时动态更改类型,”Shajii 还说:“还有一些 Python 库,我们还没有实现……”


Codon 最初设计用于基因组学和生物信息学。“这些领域的数据集正变得非常大,而像 Python 和 R 这样的高级语言计算速度太慢,无法处理每组测序数据,特别是 TB 级,”Shajii 解释说,“所以我们想要填补的空白——通过训练一种无需编写 C 或 C++ 代码即可处理大数据的方法,为不全是计算机科学家或程序员的领域专家提供帮助。” 


除了基因组学,Codon 还可以应用于处理海量数据集的类似应用,以及 GPU 编程和并行编程等领域,基于 Python 的编译器支持。事实上,Codon 现在正通过初创公司 Exaloop 在生物信息学、深度学习和量化金融领域进行商业应用,Shajii 创立了公司,旨在将 Codon 从学术项目转变为行业应用。


为了使 Codon 能够与这些不同的域一起工作,该团队还开发了一个插件系统。“它就像一个可扩展的编译器,你可以为基因组学或其他领域编写一个插件,这些插件可以有新的库和新的编译器优化......”


关于 Codon 的下一步,Shajii 和团队目前正在研究本地实现广泛使用的 Python 库,以及特定于库的优化,以从这些库中获得更好的性能。他们还计划创建一个广受欢迎的功能:Codon 的 WebAssembly 后端,以支持在 Web 浏览器上运行代码。


安装与实践

首先安装Codon环境

/bin/bash -c "$(curl -fsSL https://exaloop.io/install.sh)"
安装完成后,输入codon查看是否配置好了,如下即可:
error: Available commands: codon 

如果报错找不到codon,请使用如下步骤:

手动配置/root/.bashrc,添加export PATH=/root/.codon/bin:$PATH并source /root/.bashrc激活。

环境修改


Codon默认的Python库是libpython.so,但是Debian使用的是具体的名字,如libpython.3.9.so,所以在编译的时候会报错找不到依赖库,执行以下命令(注意Python版本),软链接一个即可:

ln -s /usr/lib/x86_64-linux-gnu/libpython3.9.so /usr/lib/x86_64-linux-gnu/libpython.so

实际测试

Codon目前还处于原始的状态,比如不支持unicode只能使用ASCII,Python package支持度不足等问题。但是瑕不掩瑜

使用如下编译程序:

codon build -exe -release CheckSysUpgradable.py

可以看到,程序中出现了from python import xxx的内容。

这是因为很多package是不被codon支持的(可以粗略的理解为不兼容),所以‘借用’了Python的功能。此外,在 num = output.count("upgradable")之前还出现了num = 0,这个不常用的初始化是为了符合LLVM的要求,所以Codon也不是那么的Python了。

总结


性能上,比CPython快很多,因为是优化编译的程序,不是解释器这类能比的。


兼容性上,Codon之于Python,更像是Carbon之于C++,已有的Python程序用Codon编译,需要修改的地方不少。


总体而言,Codon更像是借用了Python风格的新语言,从官网上演示的程序后缀是.codon而不是.py就能看出来一二。


作者: 大雄

评论