GETTY IMAGES/IEEE SPECTRUMPython作為最流行(沒有之一)的高級編程語言之一,使用廣泛。然而,盡管高級語言的簡化語法使其易于學習和使用,但與C或C++等低級語言相比,它可能會慢一些。麻省理工學院計算機科學與人工智能實驗室(CSAIL)的研究人員希望通過Codon來改變這一現狀,Codon是一種基于Python的編譯器,允許用戶編寫與C或C++程序一樣高效運行的Python代碼。麻省理工學院CSAIL研究生Ariya Shajii說:“普通Python編譯成所謂的字節碼,然后字節碼在虛擬機中執行,這要慢得多。使用Codon,我們正在進行本機編譯,因此您可以直接在CPU上運行最終結果,而不需要中間的虛擬機或解釋器。”
基于Python的編譯器附帶了適用于Linux和macOS的預構建二進制文件,您還可以從源代碼構建或構建可執行文件。Shajii說:“使用Codon,你可以像Python一樣分發源代碼,或者你可以將其編譯為二進制文件。如果你想分發二進制文件,它將與C++這樣的語言相同,例如,你有一個Linux二進制文件或Mac二進制文件。”為了使Codon更快,團隊決定在編譯時執行類型檢查。類型檢查涉及將數據類型(如整數、字符串、字符或浮點數等)分配給值。例如,數字5可以指定為整數,字母“c”可指定為字符,單詞“hello”可指定為字符串,十進制數3.14可指定為浮點數。Shajii說:“在常規Python中,它將所有類型都留給運行時使用。使用Codon,我們在編譯過程中進行類型檢查,這樣在運行時就不需要耗費判斷數據類型的開銷。”麻省理工學院教授、CSAIL首席研究員Saman Amarasinghe也是Codon論文的合著者,他補充道,“如果你有一種動態語言(比如Python),每次你有一些數據時,你都需要保留大量額外的元數據,以在運行時確定類型。”Codon去掉了這些元數據,所以“代碼更快,數據更小,”他說。Shajii表示,在運行時沒有任何不必要的數據或類型檢查的情況下,Codon的開銷為零。談到性能,“Codon通常與C++不相上下。與Python相比,我們通常看到的是10到100倍的改進,”他說。但Codon的方法也有取舍。Shajii說:“我們做這種靜態類型檢查,不允許Python的一些動態特性,例如在運行時動態更改類型,同時有些Python庫暫時還不支持Codon,也就是兼容性還有待提高。”Amarasinghe補充道:“Python已經經過了許多人的實戰項目測試,但Codon才剛開始,還沒有達到和Python一樣的完美。它需要運行更多的程序,獲得更多的反饋,并加強和修復更多。達到Python的強化水平需要一些時間。”Codon最初被設計用于基因組學和生物信息學。Shajii說:“這些領域的數據集越來越大,像Python和R這樣的高級語言處理每組測序數據太慢了。這就是我們想要填補的空白,通過培訓一種無需編寫C或C++代碼即可處理大數據的方法,為不一定是計算機科學家或程序員的領域專家提供幫助。”
MIT/EXALOOP/UNIVERSITY OF VICTORIA/ACM除了基因組學,Codon還可以應用于處理大量數據集的類似應用程序,以及基于Python的編譯器支持的GPU編程和并行編程等領域。事實上,Codon現在正通過初創公司Exaloop在生物信息學、深度學習和定量金融領域進行商業應用,Shajii創立了Exaloop,旨在將Codon從學術項目轉變為行業應用。為了使Codon能夠處理這些不同的域,該團隊開發了一個插件系統。“這就像一個可擴展的編譯器,”Shajii說,“你可以為基因組學或其他領域編寫一個插件,這些插件可以有新的庫和新的編譯器優化。”此外,組織可以使用Codon進行原型設計和應用程序開發。Shajii說:“我們看到的一種模式是,人們用Python進行原型設計和測試,因為它很容易使用,但當緊要關頭,他們必須重寫(他們的應用程序),或者讓其他人用C或C++重寫它,以便在更大的數據集上進行測試。有了Codon,你可以繼續使用Python,兩全其美。”關于Codon的下一步,Shajii和他的團隊目前正在研究廣泛使用的Python庫的本地實現,以及特定于庫的優化,以從這些庫中獲得更好的性能。他們還計劃創建一個廣受歡迎的功能:為Codon創建一個WebAssembly后端,以便在Web瀏覽器上運行代碼。
IEEE Spectrum
《科技縱覽》
官方微信公眾平臺