作為最受歡迎的編程語言之一,Python 需要一個解釋器來執(zhí)行其代碼所定義的命令。與其他可直接編譯成機(jī)器代碼的語言不同,Python 代碼需要解釋器讀取它并把它轉(zhuǎn)譯給進(jìn)行相關(guān)操作的 CPU。那么,哪些解釋器有哪些呢?本文將對其中幾種進(jìn)行介紹。 解釋器簡介提到 Python 解釋器,我們通常會想到
如你所見,在任何實(shí)質(zhì)性的操作發(fā)生之前,我們需要走過這些步驟。這也解釋了深入研究不同解釋器的重要性。 1、CPython作為 Python 的參考實(shí)現(xiàn),CPython默認(rèn)地被許多系統(tǒng)所采用。如其名稱所示,CPython 是用 C 語言編寫的。這也意味著,我們可以以 C 語言編寫擴(kuò)展,從而讓 Python 打通到廣泛使用的 C 語言庫代碼。CPython 廣泛應(yīng)用于各種平臺,包括 ARM 和 RISC。然而,作為 Python 的參考實(shí)現(xiàn),CPython 更注重精細(xì)的優(yōu)化,而非運(yùn)行速度。 2、PystonPyston是一個從 CPython 解釋器衍生出的分支,其中實(shí)現(xiàn)了性能優(yōu)化。該項(xiàng)目定位自己為標(biāo)準(zhǔn) CPython 解釋器在處理大型、真實(shí)世界應(yīng)用時的替代品,并有可能加速高達(dá) 30%。由于缺乏兼容的二進(jìn)制包,Pyston 在下載過程中需要重新編譯。 3、PyPy采用了 RPython 編寫的 PyPy是一個專為 Python 配備的即時(JIT)編譯器,RPython 是 Python 的一個靜態(tài)類型的子集。不同于 CPython 解釋器,PyPy 對源代碼進(jìn)行編譯,生成 CPU 可直接執(zhí)行的機(jī)器碼。PyPy 是 Python 開發(fā)者的實(shí)驗(yàn)室,在這里他們能更容易地測試新特性。 相較于 CPython,PyPy 的執(zhí)行速度更快。由于 JIT 編譯器的特性,長時間運(yùn)行的應(yīng)用更能從緩存中受益。PyPy 可以被視為 CPython 的有效替代。雖然其中存在一些缺點(diǎn),大部分的 C 擴(kuò)展模塊在 PyPy 中也得到支持,但運(yùn)行速度會相對慢一些。PyPy 擴(kuò)展模塊使用 Python(而不是 C)編寫,這使 JIT 編譯器能夠?qū)ζ溥M(jìn)行優(yōu)化。只要你的應(yīng)用程序不依賴于不兼容的模塊,PyPy 就是替換 CPython 的理想選擇。你可以在項(xiàng)目官網(wǎng)找到一個專門的頁面,詳細(xì)描述 PyPy 與 CPython 的不同之處:PyPy 與 CPython 的差異 4、RustPython顧名思義,RustPython是一個由 Rust 編寫的 Python 解釋器。盡管 Rust 如今還是一個相對年輕的編程語言,但因其優(yōu)良特性已逐步受到開發(fā)者的推崇,甚至被視為 C 和 C++ 的可能接班人。默認(rèn)情況下,RustPython 的行為與 CPython 的解釋器類似,但它也可以選擇啟用 JIT 編譯器。值得一提的是,Rust 工具鏈能直接編譯為WebAssembly,進(jìn)而允許在瀏覽器中全面運(yùn)行解釋器。你可以在這里看到它的在線演示。 5、Stackless PythonStackless Python自稱是 Python 編程語言的增強(qiáng)版本。該項(xiàng)目基本上是 CPython 解釋器衍生的一個項(xiàng)目,其為該語言添加了微線程、通道和調(diào)度器。微線程可以幫助你將代碼組織成可以并行運(yùn)行的 “小任務(wù)tasklet”。這與采用greenlet模塊的綠色線程模型相似。通道可以用作 “小任務(wù)” 之間的雙向通信。Stackless Python 的一個知名用戶是大型多人在線角色扮演游戲Eve Online。 6、Micro Python如果你的目標(biāo)平臺是微控制器,那么 MicroPython將是你的首選。它是一種極簡的實(shí)現(xiàn),只需要 16kB 的內(nèi)存和 256kB 的存儲空間。由于其主要面向的是嵌入式環(huán)境,MicroPython 的標(biāo)準(zhǔn)庫只包含 CPython 豐富的 STL 的一部分。對于開發(fā)和測試,或者作為輕量級替代品,MicroPython 也可以在普通的 x86 和 x64 系統(tǒng)上運(yùn)行。MicroPython 支持 Linux、Windows,以及多種微控制器。 性能就其設(shè)計(jì)而言,Python 本質(zhì)上是一種運(yùn)行速度不夠快的語言。根據(jù)任務(wù)性質(zhì)的不同,各種解釋器間存在明顯的性能差異。要想弄清楚哪種解釋器最適合特定任務(wù),可以參考 pybenchmarks.org。與使用解釋器相比,另一種選擇是直接將 Python 二進(jìn)制代碼編譯成機(jī)器碼,例如,Nuitka就是能夠完成這種工作的項(xiàng)目之一,它可以將 Python 代碼編譯成 C 代碼,然后將 C 代碼通過常規(guī)的 C 編譯器編譯成機(jī)器碼。Python 編譯器的主題范圍廣泛,值得一篇獨(dú)立的文章來詳述。 總結(jié)Python 是構(gòu)建快速原型和自動化任務(wù)的優(yōu)秀語言,同時它又易于學(xué)習(xí),對初學(xué)者友好。如果你平時維持使用 CPython,那么嘗試看看你的代碼在另一解釋器上運(yùn)行會是什么樣子也許會很有趣。如果你是 Fedora 用戶,你可以輕松地測試幾種其他解釋器,因?yàn)槠浒芾砥饕呀?jīng)提供了需要的二進(jìn)制文件。你可以在 fedora.developer.org上查找更多信息。 (題圖:MJ/9b24f27b-bd2b-4916-9f33-bcfb9e2b1d33) via: https:///article/22/9/python-interpreters-2022 作者:Stephan Avenwedde選題:lkxed譯者:ChatGPT校對:wxy 本文由 LCTT原創(chuàng)編譯,Linux中國榮譽(yù)推出 |
|
|