Guido van Rossum將與微軟4位Python核心開發者,共同研究提升CPython效能的方法。目前已經把將計畫文件置於GitHub上。

圖片來源: 

圖/Mark Shannon

交大AI學院副教授魏澤人認為,Python之父Guido van Rossum在今年5月的PyCon US上宣布,要在4年內將CPython的執行速度提升5倍,是Python開發者近期值得關注的議題。他指出,由於這次效能提升的計畫,會直接更新到Python官方版本中,「可能是一個很大的轉變。」

CPython是以C語言實作的直譯器,由於是Python官方組織發布的工具,它也是當前最廣泛使用的Python直譯器。魏澤人解釋,Python的一大缺點,就是執行速度慢,需要靠C語言編寫的直譯器CPython,來加速Python的執行;在進行大數據分析的相關應用時,為了提升大量運算的需求,也可能搭配如Numpy、TensorFlow等以C語言為主編寫的函式庫,來提升執行效率。換句話說,Python執行速度慢的問題已經存在已久,過去常見做法,就是與其他編譯式語言相搭配,來加快Python執行速度。

不過,這個問題似乎在今年迎來轉機。5月時,Guido van Rossum在微軟開發者社群Reactor的一場採訪中表示,去年加入微軟後,原先想投入Python在資料科學領域的貢獻,但在實作AI應用後,發現機器學習領域博大精深,若要精通並對這個領域貢獻,可能要花上3~4年時間。因此,他後來選擇與微軟4位Python核心開發者,共組一個團隊,來研究提升CPython效能的方法。團隊成員更已經把將相關文件置於GitHub上,計畫分4階段來提升CPython執行速度。

文件中明確列出了4階段計畫時程與內容。首先在第一階段,將在今年10月要發布的Python 3.10版本中,增加一個適應性、專業化的直譯器(interpreter);第二階段,則是要在Python 3.11版本中進行多個關鍵項目的改進,包括提升二元運算符(binary operators)的效能,或是透過更好的物件記憶體設計,來減少記憶體管理的資源消耗(overhead)。第三階段,是要在Python 3.12版本加入小範圍使用的簡易JIT編譯器;最後一個階段,是要在Python 3.13版本中擴充編譯區域,加強編譯功能來生成更高級的機器語言(machine code)。

在這4個階段中,預計每階段都要提升CPython速度50%,最後達到總執行速度提升5倍的成效。但文件內也指明,某些平臺禁止執行過程中的程式碼生成(runtime code generation),比如蘋果行動裝置的iOS平臺就是其中一例,對這些平臺來說,只有前兩階段有助於提升CPython的效能,也就無法提升5倍速度,只能提升大約2倍。

Guido van Rossum在PyCon US上,也說明了CPython效能提升,對使用者產生的影響。他指出,受益較大的使用者,是在密集CPU(CPU-intensive)上執行Python程式碼、用Python寫網站,以及使用Python編寫的工具或套件的使用者,未來程式碼執行速度會更快;但相對的,使用Numpy、Tensorflow等本來就已經用C語言編寫的套件、記憶體輸入輸出綁定(I/O-bound)的程式碼、多執行緒程式碼以及演算法效率低下的程式碼,對這些使用者來說受益較小,Python效能精進相對較少。

他在訪談中也提到,「加快Python速度」這件事,過去也有不少團隊致力於改進。比如臉書5月開源了Cinder專案,這是一個Instagram內部效能導向的CPython 3.8生產版本,透過多種方法實現CPython的效能優化,其中的Cinder JIT幾乎支援了所有Python運算程式碼,在許多Python效能基準測試中,更可以達到1.5~4倍的速度提升。

Dropbox內部也有Modzelewski和Marius Wachtler等開發人員,開源了Pyston專案,現在已經更版到Pyston 2.2,最新5月的發布指出,Pyston 2.2在Web伺服器基準測試中,比普通Python快了30%,這還是保守的說法。這個版本也立基在CPython 3.8.8之上,融合了許多CPython的改變。

不過,由於這些專案都不是Python官方所開發,而是各家企業為了在內部加快Python執行的速度,對CPython所做的修改。因此,魏澤人認為,Guido與微軟團隊主導的CPython效能改善,是官方標準版本的改變,能對更多Python使用者帶來影響。

Python TIOBE流行度即將媲美C、Java

除了Python速度的加快,是未來可關注的焦點,Python近期流行度也大幅提升,根據熱門程式語言排行榜TIOBE Index的7月排行公布,前三名C、Java和Python分數前所未有的接近,依照現在的態勢,Python也很有機會超過C語言成為第一名。而Python排名的進步,可能與Python在疫情期間被用於尋找對抗病毒的藥物有關。

魏澤人則是較以長期觀察的角度來評論,認為Python排名提升是許多因素綜合的結果。他推測,其中一大關鍵,可能是Python本身易上手、快速開發、用途廣泛的特性,推動學校紛紛開課教授這門程式語言,學生畢業後進入職場,又帶動職場IT開發語言的改變,而逐漸鞏固了Python的地位。

尤其,Python不只能用於開發網頁、後端、行動應用程式以及嵌入式系統的應用,近年來AI的蓬勃發展,更掀起Python的新一波應用浪潮,加上Python雖然無法直接用於系統開發,但能作為膠水語言,並與其他如C、Java等語言搭配使用,無論是用於整合或串接各式各樣的系統(例如資料庫),或在進行數據計算時,用來連接其他語言編寫的函式庫等,都有用武之地。

因此,他認為,無論Python日後是否如預期的奪下第一的寶座,未來幾年內掉出十名以外的機率較小,因為其他未來很有潛力的程式語言,如Julia、Rust,目前在教學上還不夠普及,需要一點時間才會反映在佔有率上面。

熱門新聞

Advertisement