谷歌發布新項目,旨在將Python代碼編譯為Go
譯文【51CTO.com快譯】Python很可能遭遇另一位強勁的編程語言對手:谷歌Go。
作為一項實驗性項目,谷歌公司的Grumpy能夠將Python代碼轉換為Go形式,這意味著Python程序將能夠在編譯后利用Go工具鏈作為靜態二進制文件運行。其對Python的轉換相當于創建了一款Go應用。
在一篇開源發布博文中,谷歌公司指出,該項目能夠加快其Python開發型YouTube前端的升級工作。谷歌公司在此前的工作也遇到了Python用戶的普遍困擾:很難利用CPython——以C語言編寫的默認Python解釋器——進行有效擴展。
谷歌公司表示,“我們認為Grumpy擁有遠超CPython的實際工作負載擴展潛力。”
以小失換大得
盡管Grumpy需要通過Go工具鏈將Python代碼轉換為靜態二進制文件,但這并不會給其運行速度帶來多少影響。畢竟已經存在眾多將Python編譯為二進制形式的項目,考慮到Python本身的動態類型系統特性,其很難通過這種方式實現提速。舉例來說,Cython只有在開發者提供靜態C類型信息時才能實現加速。
根據谷歌的說法,Grumpy能夠通過消除部分CPython遺留負擔加速Python代碼。其中提速效果最明顯的是刻意舍棄對C擴展模塊的支持以換取速度提升。目前存在著大量使用C擴展模塊的資源庫,其中相當一部分來自Python標準庫(例如用于同C代碼對接的ctypes)。
由于不再支持C擴展,Grumpy并不具備CPython的全局解釋器鎖(Global Interpreter Lock),而這通常被視為順利實現Python并發負載運行的***障礙。Grumpy還將使用Go的垃圾回收機制進行內存管理,而不再沿用CPython的類似機制。
Grumpy允許導入Go軟件包并配合與Go模塊同樣的語法加以使用,從而在Python與GO之間建立起緊密的互操作性。這不禁讓人聯想到pythonnet項目,其允許Python與.Net程序集實現互操作性。
缺失部分
Go及其工具鏈目前已經被眾多第三方用于開發新型語言。其中Have項目利用Go作為轉換目標,而Oden項目則利用Go工具鏈在Haskell或者Lisp當中創建一種新的函數性語言。Oden項目已經于去年年底停止開發,不過Have項目則仍在積極推進當中。
利用Grumpy,Go的工具鏈將有助于幫助龐大的Python用戶社區解決諸多現實難題。雖然谷歌公司的實際使用效果應該更好,畢竟Grumpy是專門針對其需求打造的項目,但我們也相信廣泛Python社區同樣將借此解除或者應對諸多既有障礙。不過,這一切都要視Grumpy項目的實際發展狀況而定。
舉例來說,Grumpy僅支持Python的早期Python 2.x語法,另外亦有眾多標準庫未完成移植,exec或eval這樣的函數也尚無法正常使用。
而最重要的缺失部分并非對C擴展本身的支持,而是依賴于C擴展的各類資源庫。失去了C擴展,意味著只有最為普通的Python腳本才能編譯并運行在Grumpy的當前互操作機制之下。雖然谷歌方面也可以利用Go語言編寫出相關替代方案,但其中某些大型Python庫——例如NumPy——將完全不可用,而此類庫正是Python整體生態系統中的重要組成部分。
原文標題:Google boosts Python by turning it into Go
原文作者:Serdar Yegulalp
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】
了解更多熱點新聞,請關注51CTO《科技新聞早報》欄目!