Python/ target=_blank class=infotextkey>Python 是一種流行的編程語言,但它通常不是高速應用程序的首選。然而,麻省理工學院的計算機科學家和他們的同事開發了一種名為 Codon 的 Python 編譯器,它可以將 Python 代碼轉換為本機機器代碼,而不會犧牲運行時性能。
使用 Codon 可以使得 Python 加速在單個線程上大約為 10-100 倍或更多,并且 Codon 的性能通常與 C/C++ 相當或更好。Codon 通過依賴靜態類型編譯器引擎并省略動態類型操作和運行時反射等使代碼更難以分析和優化的功能來實現這一點。
測試
那么,Codon 真的像它聲稱的那樣快嗎?一位開發者在 Codon 論壇上進行了測試。
$ cat fib.py
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
if __name__ == "__main__":
import sys
print(fib(int(sys.argv[1])))
CPython 3.11
$ python fib.py 40
102334155
# mem: 8'816_KB
# time: 18.42_s
PyPy 7.3.9
$ pypy fib.py 40
102334155
# mem: 74'596_kB
# time: 4.99_s
# ~= 3.7x
Codon 編譯
$ codon build -release fib.py
$ ./fib 40
102334155
# mem: 5'612_kB
# time: 0.26_s
# ~= 70.8x
最終,發現使用 Codon 編譯的簡單 Fibonacci 腳本比 CPython 版本快 70 多倍。
Codon 已在 Github 上開源,地址如下:
https://github.com/exaloop/codon
概述
Codon 最初是作為在 Python 中創建高性能領域特定語言 (DSL) 的框架而開發的,現已發展成為一種與 Python 3 基本兼容的語言編譯器。該工具鏈支持開發 DSL,這些 DSL 與添加的領域共享 Python 的語法和語義-特定功能和 IR 優化。由于 Codon 可以在沒有任何 Python 運行時開銷的情況下輸出本機機器代碼,因此該論文的作者聲稱他們可以使用 Python 腳本實現類似 C 的性能。
Codon 還可以顯著加速標準 Python 程序,盡管那些依賴外部庫(如 Django 或 DocUtils)的程序必須依賴 CPython 橋,該橋將性能限制為 CPython。盡管如此,Codon 正在商業上用于從量化金融和生物信息學到深度學習等領域,其開發人員計劃在未來幾個月內實現缺失的 Python 功能。