溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Dropbox正開(kāi)發(fā)的開(kāi)源Python 解釋器Pyston的實(shí)例分析

發(fā)布時(shí)間:2021-10-29 17:55:07 來(lái)源:億速云 閱讀:211 作者:柒染 欄目:編程語(yǔ)言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Dropbox正開(kāi)發(fā)的開(kāi)源Python 解釋器Pyston的實(shí)例分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

大家好,我非常激動(dòng)宣布 Pyston,這是一個(gè)正在由 Dropbox 開(kāi)發(fā)的開(kāi)源 Python 解釋器。 這個(gè)項(xiàng)目的目標(biāo)是產(chǎn)生一個(gè)高性能的 Python 解釋器,使 Python 也能用于那些被如 C++ 這樣的傳統(tǒng)系統(tǒng)語(yǔ)言占據(jù)的領(lǐng)域。

在 Dropbox ,我們熱愛(ài) Python ,嘗試用它來(lái)做一切可以做的事情。然而隨著規(guī)模的的變大和要處理的問(wèn)題越來(lái)越多,我們開(kāi)始發(fā)現(xiàn)繼續(xù)使用 Python 而要達(dá)到我們的性能目標(biāo)有時(shí)候極其困難。有時(shí)用另外一門語(yǔ)言重寫(xiě)也起不了多大作用。我本人非常喜歡 Python , 每次當(dāng)我們決定重寫(xiě)什么東西的時(shí)候我都很受傷,所以我想為它做一點(diǎn)什么。在靜態(tài)編譯上做了一些無(wú)用功后,我們到處查資料然后發(fā)現(xiàn) JIT 技術(shù)在 Javascript 上非常成功,尤其 是 Chrome 的 V8 引擎大大地改善了 Javascript 的性能。我們希望通過(guò)同樣的技術(shù)也能在 Python 上達(dá)到相同的性能提升。

Pyston 現(xiàn)在仍然處于初期階段,還不能投入使用。但我們希望早點(diǎn)在它的生命周期之初就公布并開(kāi)源出來(lái),這樣我們就能和 Python 和 JIT 社區(qū)來(lái)合作開(kāi)發(fā)了。太多的細(xì)節(jié)在這篇博客寫(xiě)不下,但我們想說(shuō)一下我們?yōu)槭裁葱枰粋€(gè)新的 Python 實(shí)現(xiàn),以及講一點(diǎn)點(diǎn) Pyston 是怎么工作的。

為什么選擇實(shí)現(xiàn)一個(gè)新的 Python 解釋器

早就已經(jīng)有了一大堆使用 JIT 技術(shù)的 Python 實(shí)現(xiàn):PyPy 使用它的 tracing JIT 來(lái)提高性能;Jython 和 IronPython 都是構(gòu)建在廣泛支持 JIT 的虛擬機(jī)上的。所以為什么我們認(rèn)為還值得開(kāi)始創(chuàng)造一個(gè)新的實(shí)現(xiàn)呢?

簡(jiǎn)單來(lái)說(shuō),是因?yàn)槲覀冋J(rèn)為絕大多數(shù)有前景的技術(shù)都和現(xiàn)有的實(shí)現(xiàn)不兼容。比如,在 Javascript 界就因?yàn)閺?qiáng)大的性能優(yōu)勢(shì)從 tracing JIT 切換到 method-at-a-time JIT 。對(duì) Python 是否有同樣的性能優(yōu)勢(shì)還有待商榷,但由于這兩種途徑從根本上都是和現(xiàn)有的實(shí)現(xiàn)不兼容的,所以答案只能是構(gòu)建一個(gè)新的 method-at-a-time JIT。

另外一個(gè)區(qū)別是我們對(duì)傳統(tǒng)的垃圾回收器有計(jì)劃地使用來(lái)高效地支持拓展模塊。同樣,我們現(xiàn)在也無(wú)法知道這是否是一種更好的方法,但這個(gè)決定對(duì)一個(gè)很難在現(xiàn)有的實(shí)現(xiàn)下進(jìn)行測(cè)試的 JIT 來(lái)說(shuō)是必不可少的。

從零開(kāi)始的壞處就是,創(chuàng)造一個(gè)新的語(yǔ)言的實(shí)現(xiàn)毋庸置疑是一個(gè)巨大的任務(wù)。幸運(yùn)的是, 有助于這個(gè)過(guò)程的一些工具已經(jīng)開(kāi)始出現(xiàn)了。尤其是 Pyston 是構(gòu)建在 LLVM 之上的,使得我們不需要自己處理細(xì)節(jié)就可以生成上層的高質(zhì)量代碼。盡管如此,一個(gè)新的 Python 實(shí)現(xiàn)還是一個(gè)巨大 的工程,所以 Pyson 將不會(huì)馬上就能投入使用。

它是怎么工作的

從頂層看,Pyston 將解析好的 Python 代碼轉(zhuǎn)換成 LLVM 中間代碼。然后中間代碼就通過(guò) LLVM 的優(yōu)化然后傳遞給 LLVM 的 JIT 引擎,產(chǎn)生可執(zhí)行的機(jī)器代碼。LLVM 包含許多優(yōu)化步驟和機(jī)制,使得它能產(chǎn)生非??斓拇a。

然而問(wèn)題是 LLVM 不能推出 Python 代碼,因?yàn)閯?dòng)態(tài)語(yǔ)言不得不把所有底層的行為都隱藏在類型分派(Type Dispatch)后。為了解決這個(gè)問(wèn)題,Pyston 采用類型推斷:雖然證明一個(gè)變量將會(huì)是某個(gè)特別的類型通常是不可能,但是 Pyston 經(jīng)常可以根據(jù)一些確定的事實(shí)來(lái)預(yù)測(cè)某個(gè)對(duì)象會(huì)是什么類型。一旦做出 了一個(gè)預(yù)測(cè),Pyston 將在運(yùn)行時(shí)檢測(cè)這個(gè)預(yù)測(cè),在預(yù)測(cè)所對(duì)應(yīng)的快速分支和預(yù)測(cè)失敗所對(duì)應(yīng)的慢速分支之間進(jìn)行選擇。

Pyston 還包含許多其他的現(xiàn)代技術(shù),比如為快速查找屬性和快速調(diào)用方法而設(shè)計(jì)的隱藏類和內(nèi)聯(lián)緩存。你可以在 Github 頁(yè)面上找到更多的技術(shù)細(xì)節(jié),以及一篇單獨(dú)講述這些技術(shù)細(xì)節(jié)的博文。

現(xiàn)狀

Pyston 仍然處于初始階段,只支持 Python 語(yǔ)言的一個(gè)最小子集。拿基準(zhǔn)測(cè)試數(shù)據(jù)來(lái)說(shuō)話是不怎么公平的,因?yàn)?1) Pyston 不支持足夠大的基準(zhǔn)測(cè)試,所以這不具備代表意義。2) Pyston 不支持所有運(yùn)行時(shí)特性(包括一些可能帶來(lái)減速的特性),所以這不是一個(gè)同類的比較。 在這兩點(diǎn)注意事項(xiàng)下,Pyston 在性能上通??梢該魯?CPython,但是仍然弱于 PyPy。

上述就是小編為大家分享的Dropbox正開(kāi)發(fā)的開(kāi)源Python 解釋器Pyston的實(shí)例分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI