首页 > IT资讯 > 正文

PyPy 庆祝 10 周年生日

PyPy 在其官方博客上发表文章庆祝其 10 周年生日。文章写到:

10 年对软件工程来说是很长的一段时间,PyPy 大约在 10 年前的某天推出的,确切的日期已经因为版本控制系统问题无法得知。在这 10 年里,我们已经走了很长的路,从一个“最小的 Python”,到一个高性能的 VM 的不断超越。

这 10 年来一些关键的时间点:

2007 年,结束了欧盟注资期间,我承诺很快发布 JIT,但我过分乐观了,第一个可用的 PyPy 在 2010 年才推出

我曾经决定要拥有一个 JavaScript 后端以便将 RPython 程序编译成 JavaScript ,并在浏览器上运行。事实证明这是一个很糟糕的主意

我们还尝试使用 RPython 来编写 CPython 的 C 扩展,可 RPython 是个很糟糕的语言,于是我们开发了更快的 JIT,因此你没必要再写 C 扩展

我尝试 4-5 次来使用 LLVM,虽然还没完全放弃,但总有这样那样的问题

我开始对 ctypes 抱有极大兴趣,并尝试做一个静态类型的子集,名为 rctypes,这也是个很糟糕的做法。第二次了!

一开始我非常希望创建一个 JIT 生成器,但第一个版本失败得很惨,生成太多的汇编器;第二个、第三个版本也都失败了,好在我们在 2010 年发布了可用的 JIT

Martijn Faassen 经常问我 PyPy 到底有多快,因此我决定增加一个选项 "--faassen" 来打开所有优化开关,然后又家了 "--no-faassen" ,后来改名为 -O2 ,而现在是 -Ojit

第一次 Python 解释器成功编译到 C 语言时,发生了段错误,因为代码生成器使用了有符号的字符而不是无符号

为了更加容易被接受,欧盟项目建议一个语言的每个特性都要暴露在阳光下,这证明是烦人的,因为这样我必须实现所有的这些特性。后来我做了个清理工作,删除了 30% 的代码和 70% 的功能!

有一次有人提供一个新的软件开发方法学 —— 术语驱动编程。这名字很花俏。然后讨论并实现,例如:timeshifter, rainbow interpreter, meta-space bubble, hint annotations (但这些真实存在).

有这个一个定律,翻译工作进展如此之慢是因为经常时间上被搁置,直到实际大量问题爆发才恢复工作进展,这样显得工作进度加快

总的来说,这是一段很长的路。然而,10年后我们还有健康的身体。以及我们正在接近 PyPy 2.0 与 stackless+JIT 和 cffi 支持,支持Python 3正在成型,像STM非标准扩展正在慢慢准备(很快),有几个非Python解释器即将推出(Hippy, Topaz等等)。


相关内容:

pypy简介

项目背景

PyPy是,Python开发者为了更好的Hack Python创建的项目。此外,PyPy比CPython是更加灵活,易于使用和试验,以制定具体的功能在不同情况的实现方法,可以很容易实施。 该项目的目标是,让PyPy比C实现的Python更为容易的适应各个项目和方便裁剪。

项目现状

PyPy是Armin Rigo开发的,Python语言的动态编译器,是Psyco的后继项目。PyPy的目的是,做到Psyco没有做到的动态编译。

PyPy开始只是研究性质的项目。但是开发非常成熟,在2007年中旬发布了1.0 Release版本后,大家关注的焦点是,能否在2008年出现可供生产环境使用的版本。

最新的PyPy版本是1.8,兼容Python 2.7.2。可以运行在Linux的32位和64位、MacOSX和Windows的32位平台中,但是基于arm平台的正在开发中。它支持Python语言的所有核心部分以及大多数的Python语言标准库函数模块,并且通过了Python语言的test suite。与CPython的区别可以去看它的兼容性页面.

PyPy还提供了JIT编译器和沙盒功能,因此运行速度比CPython要快,以及可以安全的运行一些不被信任的代码。PyPy还有一个单独的支持微线程的版本。

另外,PyPy 也有 每夜构建 版本供开发者测试。

PyPy是作为Specific Targeted Research Projects(特定领域研究项目)从2004年12月到2007年3月,开始接受欧盟的援助。

PyPy的实现与原理

PyPy的第一部分:用Python实现的Python

其实这么说并不准确,准确得说应该是用rPython实现的Python,rPython是Python的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言。

PyPy的第二部分:编译器

这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,不过它的后端却是不少,也就是说这个编译器支持许多的目标语言,比较重要的有:C,CIL,Javascript ...


上一篇:Javascript发明者对谷歌Dart语言的真实评价
下一篇:小心黑客使用物联网来攻击

PythonTab微信公众号:

Python技术交流互助群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854