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