PyPy

維基百科,自由的百科全書
跳至導覽 跳至搜尋
PyPy
File:Pypy-logo (2020).svg
首次釋出2007年,​19年前​(2007
目前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    原始碼庫
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    程式語言RPython
    引擎
      Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
      作業系統跨平台
      類型Python直譯器編譯器工具鏈
      特許條款MIT特許條款
      網站https://www.pypy.org/

      PyPy/ˈpp/)是一種Python程式語言實現[1],可用於替代CPython(它是標準實現)。由於PyPy直譯器在其內部採用了即時編譯器,通常執行得比只是單純直譯器的CPython更快[2]。多數Python代碼可以很好的執行在PyPy之上,除非代碼依賴於CPython擴充,它們在執行於PyPy的時候,要麼不工作要麼招致一些開銷。PyPy在內部使用叫做元跟蹤的技術,它將直譯器變換成跟蹤即時編譯器英語Tracing just-in-time compilation。因為解釋通常比編譯器要容易寫,但執行得更慢,這種技術可以更容易的產生出程式語言的高效實現。PyPy的元跟蹤工具鏈叫做RPython

      PyPy正式支援Python 2.7和3.11[3],但在實現上與CPython有一些不同之處[4]

      細節和動機[編輯]

      PyPy被構思為使用一種類似於Python的程式語言來書寫Python實現。目的是易於辨識出可改進的區域,並使得PyPy更加靈活和易於同CPython進行試驗。

      PyPy目標是為產生動態語言實現提供通用轉換和支援框架,強調了在語言規定和實現方面之間的明晰分離。它還致力於提供規矩的、靈活的和快速的Python程式語言實現,使用上述框架來啟用新的進階特徵而不需要在其中編碼低層細節[5][6]

      RPython[編輯]

      PyPy直譯器自身是使用叫作RPython(Restricted Python)的Python受限子集書寫的[7]。RPython在Python語言上施加了一些約束,使得一個變量的類型可以在編譯時間推論出來[8]

      PyPy計劃開發了一個工具鏈來分析RPython代碼並將它轉譯成某種形式的位元組碼,它可以降低為C。除了C之外還有過其他後端:Java、C#和Javascript,但是它們遭受了軟件腐敗而已經移除了。PyPy的遞歸式圖示是一個吞噬自己的蛇,因為RPython是用Python直譯器轉譯的。代碼還可以不轉換的執行來測試和分析,這為動態語言研究提供了很好的試驗台。

      它允特許插拔的垃圾回收,還有可選的啟用Stackless Python特徵。最後,它包括了即時編譯(JIT)生成器,在直譯器原始碼中加入一些標註,就能在直譯器中建造入即時編譯器。生成的JIT編譯器是跟蹤JIT英語tracing just-in-time compilation[9]

      RPython現在也用於書寫非Python語言實現比如Pixie[10]

      專案狀態[編輯]

      第一個相容於CPython v3的PyPy版本是2014年的PyPy v2.3.1[11]。相容於CPython v3的PyPy直譯器叫作PyPy3。

      PyPy有着在32-bit/64-bit x86和32-bit/64-bit ARM處理器上的JIT編譯支援[12]。它已經夜間測試於Windows、Linux、OpenBSD和Mac OS X之上。PyPy能夠執行不依賴於特定於實現特徵的純Python軟件[13]

      有叫作CPyExt的針對CPython C API擴充的相容層,但它是不完全和實驗性的。同C共用庫互動的較好方式是通過內建的C外界函數介面英語foreign function interface(CFFI)或ctypes庫[14]

      歷史[編輯]

      PyPy可溯源至Psyco計劃,它是Python的即時特殊化編譯器英語Run-time algorithm specialization,由Armin Rigo在2002年至2010年間開發。最初時,RPython還可以被編譯成Java位元組碼CILJavaScript,但是這些後端由於缺乏價值而被移除了。

      PyPy最初是研究和面向開發的專案。在2007年中期達到了開發成熟狀態並官方發行了1.0版本,接下來它聚焦於發行更好的CPython相容性的生產級版本。

      資助[編輯]

      PyPy在2004年十二月至2007年三月期間由歐盟特殊目標研究計劃資助[15]。在2008年六月,PyPy宣佈獲得資助為Google開源規劃的一部份,允諾使PyPy更加相容於CPython

      註釋[編輯]

      1. ^ Interview Maciej Fijalkowski PyPy. [2020-09-26]. (原始內容存檔於2021-03-09). 
      2. ^ PyPy Speed. speed.pypy.org. [2019-12-01]. (原始內容存檔於2021-05-10). 
      3. ^ PyPy. 30 December 2024. 
      4. ^ Differences between PyPy and CPython — PyPy documentation. 30 December 2024. 
      5. ^ Samuele Pedroni. PyPy – Goals and Architecture Overview. March 2007. (原始內容存檔於2012-06-30). 
      6. ^ PyPy – Goals and Architecture Overview – Mission Statement. [11 October 2013]. (原始內容存檔於2021-05-26). 
      7. ^ Our runtime interpreter is 「RPython」頁面存檔備份,存於互聯網檔案館), Coding Guide – PyPy documentation
      8. ^ "It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation", Ancona et al., 2007.
      9. ^ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Tracing the Meta-Level: PyPy’s Tracing JIT Compiler. ICOOOLPS '09. doi:10.1145/1565824.1565827. 
      10. ^ Timothy Balridge interview頁面存檔備份,存於互聯網檔案館).
      11. ^ the PyPy team. PyPy3 2.3.1 – Fulcrum. PyPy blog. 20 June 2014 [2021-12-19]. (原始內容存檔於2017-12-26). 
      12. ^ PyPy v7.2.0: release of 2.7, and 3.6. pypy.org. 16 October 2019 [2021-03-23]. (原始內容存檔於2019-10-16). 
      13. ^ PyPy – Python compatibility. [2021-03-20]. (原始內容存檔於2021-06-07). 
      14. ^ ctypes — A foreign function library for Python. [2021-12-20]. (原始內容存檔於2022-04-27). 
      15. ^ EU Community Research and Development Information Service Entry. [2021-03-23]. (原始內容存檔於2012-09-10). 

      參考文獻[編輯]

      外部連結[編輯]

      • Module:Official_website第90行Lua錯誤:attempt to index field 'wikibase' (a nil value)