Pyston 0.2发布,支持更多Python特性
Pyston 是 Dropbox 发起的一个开源项目,目标是使用 LLVM 和现代 JIT 技术开发一款高性能的 Python 实现。4 月份 InfoQ 中文站曾经报道过。在经历了 5 个月的开发之后,Pyston 0.2发布了。与最初的 0.1 版本相比,该版本包含了大量改进。尽管仍然有很多工作要做,但是语言兼容性已经有很大改观,而且很多标准库、某些标准扩展模块无需修改即可运行。不过 Pyston 离真正可用还有很长的路要走。
该版本支持的 Python 特性包括:
- 异常,使用 C++ 风格的异常处理
- 继承和元类(metaclass),不过尚不支持多重继承
- 基本的原生 C API 支持
- 闭包、生成器、Lambda 和生成器表达式
- 完整的参数处理行为
- long 和 integer 的提升(promotion)
- 多线程支持
具体而言,如仍在继续开发的原生C语言支持,目前能够原生提供 CPython API 的一个子集,重新编译一次就能运行现有的扩展。在其他技术中,开发团队禁用了所有的引用计数操作,转而使用保守的垃圾收集来处理内存管理。
该版本也使用 GIL 管理线程相关的代码。不过提供了实验性的配置选项,支持使用读写锁的一个变种。该选项去掉了 GIL,支持多个线程使用多个处理器核,但是受限于 C API 的语义,并行性还有待继续挖掘。
根据原来的设想,0.1 版本的目标是验证整个 JIT 架构,0.2 改进语言兼容性,0.3 改进性能。0.1 版本已经说明,可以使用 LLVM 生成高性能代码,但是基准测试表明,性能还是被非常简单的垃圾收集器、较为初级的 SSA 变换实现拖了后腿。未来数月,开发团队将集中解决这些问题,并引入一个新的分层框架,以支持更先进的类型推导、支持 Python 的高级框架内省特性。
项目的核心人员 Kevin Modzelewski 提到:
很多地方都可以这么说:目前还比较慢,但是我们相信可以做到更快。因此我们暂时选择不给出基准测试数据,因为现在噪音比较多。
未来的 0.3 版本将提供性能数据。
另外,尽管 Python 之父 Guido van Rossum 就职于 Dropbox,但是他并没有参与该项目的开发,不过会提供一些建议。
该项目目前已经有 10 余位 Dropbox 之外的开发人员贡献代码。对构建一款高性能 Python JIT 编译器感兴趣的读者也可以浏览代码,并加入进去。