微信号:infoqchina

介绍:有内容的技术社区媒体

Medusa:比CPython更快的Python实现

2015-01-26 11:39 InfoQ


作为一种解释型语言,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 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 程序员写好简历的五大技巧 微镜像挑战赛,微到极致 高频错误:ORA-01555深入剖析 一次心惊肉跳的服务器误删文件的恢复过程 RESTful 安卓网络层解决方案(三):API model 与 Business model 分离