跳转到内容

PyPy:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
第37行: 第37行:


==项目状态==
==项目状态==
PyPy的7.3.7版本兼容于三个[[CPython]]版本:2.7、3.7和3.8<ref name=pypycompat>{{cite web |url=http://pypy.org/compat.html |title=PyPy – Python compatibility |access-date=2020-12-15 |website=pypy.org}}</ref><ref name=pypycompat36>{{cite web |url=https://www.pypy.org/posts/2021/10/pypy-v737-release.html |title=PyPy v7.3.7: bug-fix release of 3.7, 3.8 |access-date=2021-11-10 |website=pypy.org}}</ref>。第一个兼容于CPython v3的PyPy版本是PyPy v2.3.1 (2014)<ref name=pypyblogpypy3>{{cite news |date=20 June 2014 |author=the PyPy team |title=PyPy3 2.3.1 – Fulcrum |publisher=PyPy blog |url=http://morepypy.blogspot.it/2014/06/pypy3-231-fulcrum.html }}</ref>。兼容于CPython v3的PyPy解释器叫作PyPy3。
PyPy当前版本7.3.3兼容于三个[[CPython]]版本:2.7.18、3.6.12和3.7.9(支持Python 3.7的beta版本)<ref name=pypycompat /><ref name=pypycompat36 />。兼容于CPython v3的PyPy解释器叫作PyPy3。


PyPy有着在32-bit/64-bit [[x86]]和32-bit/64-bit [[ARM架构|ARM]]处理器上的[[即时编译|JIT编译]]支持<ref name="whatsnew720">{{cite news |date={{date|2019-10-16}} |title=PyPy v7.2.0: release of 2.7, and 3.6 |publisher=[[pypy.org]] |url=https://pypy.readthedocs.io/en/latest/release-v7.2.0.html }}</ref>。它已经夜间测试于Windows、Linux、OpenBSD和Mac OS X之上。PyPy能够运行不依赖于特定于实现特征的纯Python软件<ref>{{Cite web|title = PyPy – Python compatibility | url = http://pypy.org/compat.html}}</ref>。
PyPy有着在32-bit/64-bit [[x86]]和32-bit/64-bit [[ARM架构|ARM]]处理器上的[[即时编译|JIT编译]]支持<ref name="whatsnew720">{{cite news |date={{date|2019-10-16}} |title=PyPy v7.2.0: release of 2.7, and 3.6 |publisher=[[pypy.org]] |url=https://pypy.readthedocs.io/en/latest/release-v7.2.0.html }}</ref>。它已经夜间测试于Windows、Linux、OpenBSD和Mac OS X之上。PyPy能够运行不依赖于特定于实现特征的纯Python软件<ref>{{Cite web|title = PyPy – Python compatibility | url = http://pypy.org/compat.html}}</ref>。

2021年12月19日 (日) 17:24的版本

PyPy
首次发布2007年,​17年前​(2007
当前版本
  • 7.3.16 (2024年4月23日;穩定版本)[1]
編輯維基數據鏈接
源代码库 編輯維基數據鏈接
编程语言RPython
操作系统跨平台
类型Python解释器编译器工具链
许可协议MIT許可證
网站https://www.pypy.org/

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

PyPy不完全兼容于Python生态系统(至少是它的最新版本):它只宣称兼容于Python 2.7和3.6以及3.7(是CPython的顺带替代者);它不提供Python 3.8[5]和3.9[6]等中的新特征和语法,比如赋值表达式[7]、唯位置形式参数[8];和将来的Python 3.10语法,比如模式匹配[9]

细节和动机

PyPy被构思为使用一种类似于Python的编程语言来书写Python实现。目的是易于辨识出可改进的区域,并使得PyPy更加灵活和易于同CPython进行试验。

PyPy目标是为产生动态语言实现提供通用转换和支持框架,强调了在语言规定和实现方面之间的明晰分离。它还致力于提供规矩的、灵活的和快速的Python编程语言实现,使用上述框架来启用新的高级特征而不需要在其中编码低层细节[10][11]

RPython

PyPy解释器自身是使用叫作RPython(Restricted Python)的Python受限子集书写的[12]。RPython在Python语言上施加了一些约束,使得一个变量的类型可以在编译时间推论出来[13]

PyPy计划开发了一个工具链来分析RPython代码并将它转译成某种形式的字节码,它可以降低为C。除了C之外还有过其他后端:Java、C#和Javascript,但是它们遭受了软件腐败而已经移除了。PyPy的递归式图标是一个吞噬自己的蛇,因为RPython是用Python解释器转译的。代码还可以不转换的运行来测试和分析,这为动态语言研究提供了很好的试验台。

它允许可插拔的垃圾回收,还有可选的启用Stackless Python特征。最后,它包括了即时编译(JIT)生成器,在解释器源代码中加入一些标注,就能在解释器中建造入即时编译器。生成的JIT编译器是跟踪JIT英语tracing just-in-time compilation[14]

RPython现在也用于书写非Python语言实现比如Pixie[15]

项目状态

PyPy的7.3.7版本兼容于三个CPython版本:2.7、3.7和3.8[16][17]。第一个兼容于CPython v3的PyPy版本是PyPy v2.3.1 (2014)[18]。兼容于CPython v3的PyPy解释器叫作PyPy3。

PyPy有着在32-bit/64-bit x86和32-bit/64-bit ARM处理器上的JIT编译支持[19]。它已经夜间测试于Windows、Linux、OpenBSD和Mac OS X之上。PyPy能够运行不依赖于特定于实现特征的纯Python软件[20]

有叫作CPyExt的针对CPython C API扩展的兼容层,但它是不完全和实验性的。同C共享库交互的较好方式是通过内建的C外界函数接口英语foreign function interface(CFFI)或ctypes库。

历史

PyPy可溯源至Psyco计划,它是Python的即时特殊化编译器英语Run-time algorithm specialization,由Armin Rigo在2002年至2010年间开发。最初时,RPython还可以被编译成Java字节码CILJavaScript,但是这些后端由于缺乏价值而被移除了。

PyPy最初是研究和面向开发的项目。在2007年中期达到了开发成熟状态并官方发行了1.0版本,接下来它聚焦于发行更好的CPython兼容性的生产级版本。

资助

PyPy在2004年十二月至2007年三月期间由欧盟特殊目标研究计划资助[21]。在2008年六月,PyPy宣布获得资助为Google开源规划的一部份,允诺使PyPy更加兼容于CPython

註釋

  1. ^ PyPy v7.3.16 release. 
  2. ^ PyPy Blog. [2021-11-09]. 
  3. ^ Interview Maciej Fijalkowski PyPy. 
  4. ^ PyPy Speed. speed.pypy.org. [2019-12-01]. 
  5. ^ What’s New In Python 3.8 — Python 3.9.1 documentation. docs.python.org. [2021-02-15]. 
  6. ^ What’s New In Python 3.9 — Python 3.9.1 documentation. docs.python.org. [2021-02-15]. 
  7. ^ PEP 572 -- Assignment Expressions. Python.org. [2021-02-15] (英语). 
  8. ^ PEP 570 -- Python Positional-Only Parameters. Python.org. [2021-02-15] (英语). 
  9. ^ PEP 634 -- Structural Pattern Matching: Specification. Python.org. [2021-02-15] (英语). 
  10. ^ Samuele Pedroni. PyPy – Goals and Architecture Overview. March 2007. (原始内容存档于2012-06-30). 
  11. ^ PyPy – Goals and Architecture Overview – Mission Statement. [11 October 2013]. 
  12. ^ Our runtime interpreter is “RPython”, Coding Guide – PyPy documentation
  13. ^ "It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation", Ancona et al., 2007.
  14. ^ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Tracing the Meta-Level: PyPy’s Tracing JIT Compiler. ICOOOLPS '09. doi:10.1145/1565824.1565827. 
  15. ^ Timothy Balridge interview.
  16. ^ PyPy – Python compatibility. pypy.org. [2020-12-15]. 
  17. ^ PyPy v7.3.7: bug-fix release of 3.7, 3.8. pypy.org. [2021-11-10]. 
  18. ^ the PyPy team. PyPy3 2.3.1 – Fulcrum. PyPy blog. 20 June 2014. 
  19. ^ PyPy v7.2.0: release of 2.7, and 3.6. pypy.org. 16 October 2019. 
  20. ^ PyPy – Python compatibility. 
  21. ^ EU Community Research and Development Information Service Entry. 

參考文獻

外部链接