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 ...