BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Medusa:比CPython更快的Python实现

| 作者 谢丽 关注 11 他的粉丝 发布于 2015年1月26日. 估计阅读时间: 2 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

作为一种解释型语言,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)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT