11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

Medusa:比 CPython 更快的 Python 实现

  • 2015-01-25
  • 本文字数:793 字

    阅读完需:约 3 分钟

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

2015-01-25 08:564142
用户头像

发布了 1008 篇内容, 共 346.7 次阅读, 收获喜欢 330 次。

关注

评论

发布
暂无评论
发现更多内容

畅聊分布式体系架构

DisonTangor

分布式架构

EasyRecovery,重新找寻丢失的文件

淋雨

EasyRecovery

深入学习 SAP UI5 框架代码系列之七:控件数据绑定的三种模式 - One Way, Two Way 和 OneTime 实现原理比较

Jerry Wang

JavaScript 数据绑定 SAP UI5 签约计划第二季 技术专题合集

小程序电商微服务拆分和框架选择

云里雾花

视野数科借助 SAE + Jenkins 打造云原生 DevOps,运维效率提升 60%!

阿里巴巴云原生

阿里云 Serverless DevOps 云原生 SAE

数字人民币试点呈现“全面开花”

CECBC

阿里云徐立:面向容器和 Serverless Computing 的存储创新

阿里巴巴云原生

阿里云 Serverless 容器 云原生

深入学习 SAP UI5 框架代码系列之六:SAP UI5 控件数据绑定的实现原理

Jerry Wang

JavaScript SAP SAP UI5 签约计划第二季 技术专题合集

Linux安装mysql

犟马骝

复盘最近遇到的几个问题

liin

编码习惯 经验总结

Exchange漏洞分析:SSRF RCE

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

CPU的流水线指令设计

JavaEdge

【死磕Java并发】-----J.U.C之Condition

chenssy

11月日更 死磕 Java 死磕 Java 并发

深入学习 SAP UI5 框架代码系列之五:SAP UI5 控件的实例数据修改和读取逻辑

Jerry Wang

JavaScript SAP UI5 签约计划第二季 控件 技术专题合集

工业3D视觉,为智能制造打开新视域

脑极体

网络安全好就业吗?

喀拉峻

网络安全 安全 信息安全 渗透

模块五作业

doublechun

「架构实战营」

选手机的一点建议

liin

手机 生活随想

DevOps反模式

俞凡

DevOps

Redis持久化策略——RDB

蝉沐风

redis redis持久化 rdb RDB 快照

深入学习 SAP UI5 框架代码系列 | 内容合集

Jerry Wang

JavaScript SAP 内容合集 签约计划第二季 技术专题合集

小谈startup类ConfigureServices方法的作用

喵叔

11月日更

记录

Melody

微信 ClickHouse 实时数仓的最佳实践

腾讯云大数据

Clickhouse 云数据仓库

深入学习 SAP UI5 框架代码系列之四:SAP UI5 控件的元数据实现

Jerry Wang

JavaScript SAP UI5 签约计划第二季 WebIDE 技术专题合集

深入学习SAP UI5框架代码系列之八:谈谈 SAP UI5 的视图控件 ID,以及 SAP UI5 视图和 Angular 视图的异同

Jerry Wang

JavaScript 大前端 SAP UI5 签约计划第二季 技术专题合集

会日语的开发工程师看过来~

CITEC赛伯尔

Java c++ php .net 日语

不改一行代码,轻松拥有企业级微服务治理|MSE微服务治理专业版重磅发布

阿里巴巴云原生

阿里云 云原生 微服务治理 MSE

独家交付秘籍,你确定不点开看看?

阿里巴巴云原生

阿里云 云原生 应用交付平台 ADP

中国的区块链技术该高压打击虚拟货币之下,中国的区块链技术该如何发展?

CECBC

Python Qt GUI设计:QDrag拖拽数据传输类(基础篇—18)

不脱发的程序猿

Python PyQt GUI设计 QDrag

Medusa:比CPython更快的Python实现_Python_谢丽_InfoQ精选文章