這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Dropbox正開發(fā)的開源Python 解釋器Pyston的實(shí)例分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),成都做網(wǎng)站、網(wǎng)站設(shè)計(jì),微信小程序,網(wǎng)頁設(shè)計(jì)制作,手機(jī)網(wǎng)站制作,成都全網(wǎng)營銷推廣幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級(jí)專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對(duì)客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。
大家好,我非常激動(dòng)宣布 Pyston,這是一個(gè)正在由 Dropbox 開發(fā)的開源 Python 解釋器。 這個(gè)項(xiàng)目的目標(biāo)是產(chǎn)生一個(gè)高性能的 Python 解釋器,使 Python 也能用于那些被如 C++ 這樣的傳統(tǒng)系統(tǒng)語言占據(jù)的領(lǐng)域。
在 Dropbox ,我們熱愛 Python ,嘗試用它來做一切可以做的事情。然而隨著規(guī)模的的變大和要處理的問題越來越多,我們開始發(fā)現(xiàn)繼續(xù)使用 Python 而要達(dá)到我們的性能目標(biāo)有時(shí)候極其困難。有時(shí)用另外一門語言重寫也起不了多大作用。我本人非常喜歡 Python , 每次當(dāng)我們決定重寫什么東西的時(shí)候我都很受傷,所以我想為它做一點(diǎn)什么。在靜態(tài)編譯上做了一些無用功后,我們到處查資料然后發(fā)現(xiàn) JIT 技術(shù)在 Javascript 上非常成功,尤其 是 Chrome 的 V8 引擎大大地改善了 Javascript 的性能。我們希望通過同樣的技術(shù)也能在 Python 上達(dá)到相同的性能提升。
Pyston 現(xiàn)在仍然處于初期階段,還不能投入使用。但我們希望早點(diǎn)在它的生命周期之初就公布并開源出來,這樣我們就能和 Python 和 JIT 社區(qū)來合作開發(fā)了。太多的細(xì)節(jié)在這篇博客寫不下,但我們想說一下我們?yōu)槭裁葱枰粋€(gè)新的 Python 實(shí)現(xiàn),以及講一點(diǎn)點(diǎn) Pyston 是怎么工作的。
早就已經(jīng)有了一大堆使用 JIT 技術(shù)的 Python 實(shí)現(xiàn):PyPy 使用它的 tracing JIT 來提高性能;Jython 和 IronPython 都是構(gòu)建在廣泛支持 JIT 的虛擬機(jī)上的。所以為什么我們認(rèn)為還值得開始創(chuàng)造一個(gè)新的實(shí)現(xiàn)呢?
簡單來說,是因?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ì)劃地使用來高效地支持拓展模塊。同樣,我們現(xiàn)在也無法知道這是否是一種更好的方法,但這個(gè)決定對(duì)一個(gè)很難在現(xiàn)有的實(shí)現(xiàn)下進(jìn)行測(cè)試的 JIT 來說是必不可少的。
從零開始的壞處就是,創(chuàng)造一個(gè)新的語言的實(shí)現(xiàn)毋庸置疑是一個(gè)巨大的任務(wù)。幸運(yùn)的是, 有助于這個(gè)過程的一些工具已經(jīng)開始出現(xiàn)了。尤其是 Pyston 是構(gòu)建在 LLVM 之上的,使得我們不需要自己處理細(xì)節(jié)就可以生成上層的高質(zhì)量代碼。盡管如此,一個(gè)新的 Python 實(shí)現(xiàn)還是一個(gè)巨大 的工程,所以 Pyson 將不會(huì)馬上就能投入使用。
從頂層看,Pyston 將解析好的 Python 代碼轉(zhuǎn)換成 LLVM 中間代碼。然后中間代碼就通過 LLVM 的優(yōu)化然后傳遞給 LLVM 的 JIT 引擎,產(chǎn)生可執(zhí)行的機(jī)器代碼。LLVM 包含許多優(yōu)化步驟和機(jī)制,使得它能產(chǎn)生非??斓拇a。
然而問題是 LLVM 不能推出 Python 代碼,因?yàn)閯?dòng)態(tài)語言不得不把所有底層的行為都隱藏在類型分派(Type Dispatch)后。為了解決這個(gè)問題,Pyston 采用類型推斷:雖然證明一個(gè)變量將會(huì)是某個(gè)特別的類型通常是不可能,但是 Pyston 經(jīng)常可以根據(jù)一些確定的事實(shí)來預(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 頁面上找到更多的技術(shù)細(xì)節(jié),以及一篇單獨(dú)講述這些技術(shù)細(xì)節(jié)的博文。
Pyston 仍然處于初始階段,只支持 Python 語言的一個(gè)最小子集。拿基準(zhǔn)測(cè)試數(shù)據(jù)來說話是不怎么公平的,因?yàn)?1) Pyston 不支持足夠大的基準(zhǔn)測(cè)試,所以這不具備代表意義。2) Pyston 不支持所有運(yùn)行時(shí)特性(包括一些可能帶來減速的特性),所以這不是一個(gè)同類的比較。 在這兩點(diǎn)注意事項(xiàng)下,Pyston 在性能上通??梢該魯?CPython,但是仍然弱于 PyPy。
上述就是小編為大家分享的Dropbox正開發(fā)的開源Python 解釋器Pyston的實(shí)例分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。