狂攬兩千星,速度百倍提升,高效能Python編譯器Codon開源

機器之心發表於2022-12-12

眾所周知,Python 是一門簡單易學、具有強大功能的程式語言,在各種使用者使用統計榜單中總是名列前茅。相應地,圍繞 Python,研究者開發了各種便捷工具,以更好的服務於這門語言。

編譯器充當著高階語言與機器之間的翻譯官,不同版本的 Python 編譯器已被開發出來,下面我們將為大家介紹一款新的高效能 Python 編譯器:Codon。該專案上線短短几天,已收穫 2.2k 星。


圖片

專案地址:https://github.com/exaloop/codon


作為高效能 Python 編譯器,Codon 可將 Python 程式碼編譯為本機機器程式碼,而無需任何執行時開銷。在單執行緒上,Python 的典型加速大約為 10-100 倍或更多。Codon 的效能通常與 C/C++ 的效能相當。與 Python 不同,Codon 支援本機多執行緒,這可以使速度提高很多倍。Codon 可透過外掛基礎結構進行擴充套件,它允許使用者合併新的庫、編譯器最佳化甚至關鍵字。


Codon 框架是完全模組化和可擴充套件的,允許無縫整合新模組、編譯器最佳化、領域特定語言等,並積極為生物資訊學和量化金融等多個領域開發新的 Codon 擴充套件。


圖片Codon Pipeline

這個一經發布就瘋狂攬星的編譯器效果如何呢?下面我們來看看一些基準測試結果。


基準測試


以下是來自 Codon 基準測試套件的結果,比較了 Python、PyPy、C++ 和 Codon 在一系列任務和應用程式上的表現。


基準測試在以下設定上執行:


圖片

圖片

Python、PyPy、Codon 的對比


圖片

圖片

圖片

圖片

圖片

圖片

圖片

Python、PyPy、C++ 、Codon 的對比


圖片

圖片

圖片

圖片

圖片

幾種語言的具體對比如下:


Codon 儘可能地遵循 CPython 語法、語義和 API,但在一些特殊情況下,考慮效能原因,Codon 與 CPython 會有些不同,例如 Codon 為 64 位 int,CPython 是任意寬度 int。在效能方面,CPython 的加速通常是 10-100 倍的加速。


雖然 Codon 確實提供了一個類似於 Numba 的 JIT 裝飾器,但 Codon 通常是一個提前(ahead-of-time)編譯器,可以將端到端程式編譯為本機程式碼。它還支援編譯更廣泛的 Python 構造和庫集。


PyPy 的目標是成為 CPython 的簡易替代品,而 Codon 在一些地方有所不同,這些不同主要體現在消除動態執行時或虛擬機器上,從而獲得更好的效能。


Codon 通常生成與等效的 C 或 C++ 程式相同的程式碼,有時可以生成比 C/C++ 編譯器更好的程式碼。原因有很多,例如更好的容器實現,Codon 不使用目標檔案和內聯所有庫程式碼,或者不使用 C 執行的特定於 Codon 的編譯器最佳化或 C++。


Codon 的編譯過程實際上更接近 C++ 而不是 Julia。Julia 是一種動態型別語言,它執行型別推斷作為最佳化,而 Codon 型別是提前檢查整個程式。Codon 還試圖透過採用 Python 的語法和語義來規避新語言的學習曲線。


常見問題解答


雖然 Codon 幾乎支援 Python 的所有語法,但它並不是一個簡單的替代品,大型程式碼庫可能需要修改才能透過 Codon 編譯器執行。例如,一些 Python 的模組還沒有在 Codon 中實現,一些 Python 的動態特性是不允許的。Codon 編譯器會生成詳細的錯誤訊息,以幫助識別和解決任何不相容問題。Codon 支援無縫的 Python 互操作性,以處理需要特定 Python 庫或動態性的情況。


我想使用 Codon,但我有一個大型 Python 程式碼庫且不想移植,怎麼辦?


你可以透過 @codon.jit 裝飾器來使用 Codon,這將只編譯帶註釋的函式,並自動處理與 Codon 之間的資料轉換。它還允許使用任何特定於 Codon 的模組或擴充套件,例如多執行緒。


與其他語言和框架的互通性如何?


互通性是 Codon 的優先事項。我們不希望使用 Codon 使使用者無法使用現有的其他優秀框架和庫。Codon 支援與 Python 和 C/C++ 的完全互通。


Codon 是否使用垃圾收集?


是的,Codon 使用了 Boehm 垃圾收集器。


Codon 不支援 Python 模組 X 或函式 Y?


雖然 Codon 涵蓋了 Python 標準庫的一個相當大的子集,但它還沒有涵蓋每個模組的每個函式。請注意,仍然可以透過 Python 呼叫缺少的函式 from python import。許多缺少 Codon 本地實現的函式(例如 I/O 或 OS 相關功能)通常不會實現 Codon 的實質性加速。


對於我的應用程式,Codon 並不比 Python 快?


大部分時間用在 C 語言實現的庫程式碼中的應用程式通常不會在 Codon 中看到實質性的效能提升。同樣地,受 I/O 或網路限制的應用程式在 Codon 中也會遇到相同的瓶頸。


對於我的應用程式,Codon 比 Python 慢?


如果是這樣,請將 Codon 明顯比 Python 慢的情況報告給問題跟蹤器。


Codon 是免費的嗎?


對於非生產用途,Codon 始終是免費的。使用者可以免費將 Codon 用於個人、學術或其他非商業應用。


Codon 是開源的嗎?


Codon 是根據商業原始碼許可證 (BSL) 獲得許可的,它的原始碼是公開可用的,並且可以免費用於非生產用途。BSL 在技術上不是「開源」許可證,儘管在許多情況下你仍然可以像對待任何其他開源專案一樣對待 Codon。重要的是,根據 BSL,每個版本的 Codon 都會在 3 年後轉換到實際的開源許可證(特別是 Apache)。

相關文章