跳转到内容

PyPy

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由Mhss留言 | 贡献2021年3月20日 (六) 06:56 top编辑。这可能和当前版本存在着巨大的差异。

PyPy
首次发布mid 2007年,​18年前​(2007
当前版本7.3.19[1]在维基数据编辑(2025年2月26日,3個月前)
源代码库 編輯維基數據鏈接
编程语言RPython
操作系统跨平台
类型Python解释器编译器工具链
许可协议MIT許可證
网站https://www.pypy.org/

PyPy/ˈpp/)是一种Python编程语言实现[2],可用于替代CPython(它是标准实现)。PyPy通常运行得比CPython更快,因为PyPy是一种即时编译器,而CPython是一种解释器[3]。多数Python代码可以很好的运行在PyPy之上,除非代码依赖于CPython扩展,它们在运行于PyPy的时候,要么不工作要么招致一些开销。PyPy在内部使用叫做元跟踪的技术,它将解释器变换成跟踪即时编译器英语Tracing just-in-time compilation。因为解释通常比编译器要容易写,但运行得更慢,这种技术可以更容易的产生出编程语言的高效实现。PyPy的元跟踪工具链叫做RPython

PyPy不完全兼容于Python生态系统(至少是它的最新版本):它只宣称与Python 2.7及3.6语法和3.7(beta质量、有着一些特征缺失[4][5])的兼容性;它不提供Python 3.8[6]和3.9[7]等中的新语法。比如指定表达式[8]个唯位置形式参数[9],和将来的Python 3.10语法,比如模式匹配[10]

项目背景

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

项目现状

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

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

它支持Python语言的所有核心部分以及大多数的Python语言标准库函数模块,并且通过了Python语言的test suite。但是,Pypy无法支持官方的C/Python API,导致无法使用例如Numpy,Scipy等重要的第三方库。与CPython的区别可以去看它的兼容性页面[12]

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

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

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

PyPy的实现与原理

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

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

PyPy的第二部分:编译器

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

註釋

  1. ^ PyPy v7.3.19 release. [2025年3月12日]. 
  2. ^ Interview Maciej Fijalkowski PyPy. 
  3. ^ PyPy Speed. speed.pypy.org. [2019-12-01]. 
  4. ^ PyPy – Python compatibility. pypy.org. [2020-12-15]. 
  5. ^ PyPy 7.3.3 triple release: python 3.7, 3.6, and 2.7. pypy.org. [2020-12-15]. 
  6. ^ What’s New In Python 3.8 — Python 3.9.1 documentation. docs.python.org. [2021-02-15]. 
  7. ^ What’s New In Python 3.8 — Python 3.9.1 documentation. docs.python.org. [2021-02-15]. 
  8. ^ PEP 572 -- Assignment Expressions. Python.org. [2021-02-15] (英语). 
  9. ^ PEP 570 -- Python Positional-Only Parameters. Python.org. [2021-02-15] (英语). 
  10. ^ PEP 634 -- Structural Pattern Matching: Specification. Python.org. [2021-02-15] (英语). 
  11. ^ Samuele Pedroni. PyPy release announcement. March 2007 [2008-03-09]. (原始内容存档于2008-03-23). 
  12. ^ 兼容性页面存档备份,存于互联网档案馆
  13. ^ 每夜构建页面存档备份,存于互联网档案馆
  14. ^ PyPy EU project page. [2008-03-09]. (原始内容存档于2008-05-12). 

參考文獻

外部链接