Medusa:比 CPython 更快的 Python 实现

  • 谢丽

2015 年 1 月 25 日

话题:Python语言 & 开发架构

作为一种解释型语言,Python 有优点,也有缺点。它简单灵活,但编写大型软件时,其执行速度会低于其它原生 /JIT 语言。Medusa项目的目标就是要克服 Python 的这一缺点,提供功能更强大、执行速度更快的 Python。

该项目基于 Dart 虚拟机,用 Qt/C++、Python 和 Dart 实现。它不仅为 Python 提供了一个更快的执行环境,而且还保持着 Python 原有的灵活性。Medusa 将 Python 代码实时编译成 Dart 代码,然后由 Dart 虚拟机直接编译成机器代码,总共包括如下六个步骤:

  1. 将 Python 源文件分解成标记;
  2. 将步骤 1 生成的标记解析成一棵抽象语法树,同时检查错误;
  3. 遍历树,在每个节点生成等价的 Dart 代码并优化;
  4. 将代码缓存在持久性存储 SQLite3 数据库中;
  5. 使用 Dart 代码调用 Dart 虚拟机;
  6. 缓存生成的机器代码并输出。

相应地,其架构图如下:

与 CPython 相比,通过 Medusa 生成的代码要快 10~15 倍。而且,Dart 虚拟机的一些特性进一步丰富了 Python 的功能,开发人员可以用它做更多的事情。比如,项目主要开发人员Rahul De 举了一个小例子,涉及代码如下:

sayHello() 
def sayHello(): print "Hello"

这样的代码在 CPython 中会无法执行,因为 sayHello()函数在定义之前被调用了。但 Medusa 可以找到函数定义,并生成 Dart 代码。

先前也有类似的项目,比如谷歌的实验性项目Shed Skin就试图将隐式静态类型的 Python 程序编译成 C++ 代码,但它对输入的代码有诸多限制。而 Medusa 项目的目标是运行已有的 Python 代码,而又不需要或者只需要很小的修改。

该项目由来自在线电子商务平台解决方案提供商 MartMobi Technologies 的 Rahul De 开源,遵循 BSD 3-Clause 许可协议。要了解更多信息,可以阅读项目文档


感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

Python语言 & 开发架构