Python有哪些實現(xiàn)方式你知道嗎缤削?

當(dāng)談到Python時窘哈,一般指的是CPython。但Python實際上是一門語言規(guī)范亭敢,只是定義了Python這門語言應(yīng)該具備哪些語言要素滚婉,應(yīng)當(dāng)能完成什么樣的任務(wù)。這種語言規(guī)范可以用不同的方式實現(xiàn)帅刀,可以用C實現(xiàn)让腹,也可以用C++、Java扣溺、C#骇窍、JavaScript,甚至使用Python自己實現(xiàn)锥余。這篇文章就是簡要介紹并比較不同的Python實現(xiàn)腹纳,并且今后還會不斷的擴充。

CPython

CPython是標(biāo)準(zhǔn)Python驱犹,也是其他Python編譯器的參考實現(xiàn)只估。通常提到“Python”一詞,都是指CPython着绷。CPython由C編寫,將Python源碼編譯成CPython字節(jié)碼锌云,由虛擬機解釋執(zhí)行荠医。沒有用到JIT等技術(shù),垃圾回收方面采用的是引用計數(shù)桑涎。

所以當(dāng)有人問道Python是解釋執(zhí)行還是編譯執(zhí)行彬向,可以這樣回答:Python(CPython)將Python源碼編譯成CPython字節(jié)碼,再由虛擬機解釋執(zhí)行這些字節(jié)碼攻冷。

如果需要廣泛用到C編寫的第三方擴展娃胆,或讓大多數(shù)用戶都能直接使用你的Python代碼,那么還是使用CPython吧等曼。

Jython

Jython在JVM上實現(xiàn)的Python里烦,由Java編寫凿蒜。Jython將Python源碼編譯成JVM字節(jié)碼,由JVM執(zhí)行對應(yīng)的字節(jié)碼胁黑。因此能很好的與JVM集成废封,比如利用JVM的垃圾回收和JIT,直接導(dǎo)入并調(diào)用JVM上其他語言編寫的庫和函數(shù)丧蘸。

對于想在JVM上使用Python簡化工作流程漂洋,或者出于某些原因需要在Python語言中使用Java的相關(guān)代碼,同時無需用到太多CPython擴展的用戶來說力喷,極力推薦Jython刽漂。

IronPython

IronPython與Jython類似,所不同的是IronPython在CLR上實現(xiàn)了Python弟孟,即面向.NET平臺贝咙,由C#編寫。IronPython將源碼編譯成TODO CLR披蕉,同樣能很好的與.NET平臺集成颈畸。即與Jython相同,可以利用.NET框架的JIT没讲、垃圾回收等功能眯娱,能導(dǎo)入并調(diào)用.NET上其他語言編寫的庫和函數(shù)。IronPython默認(rèn)使用Unicode字符串爬凑。

另外徙缴,Python Tools for Visual Studio可以將CPython和IronPython無縫集成進VS中。如果僅需要在Windows上開發(fā)較大的Python項目嘁信。條件允許的情況下于样,IronPython是個不錯的選擇。

PyPy

這里說的PyPy是指使用RPython實現(xiàn)潘靖,利用Tracing JIT技術(shù)實現(xiàn)的Python穿剖,而不是RPython工具鏈。PyPy可以選擇多種垃圾回收方式卦溢,如標(biāo)記清除糊余、標(biāo)記壓縮、分代等单寂。

想對于CPython贬芥,PyPy的性能提升非常明顯,但對第三方模塊的支持真心是弱爆了宣决。比如無法很好的支持使用CPython的C API編寫的擴展蘸劈,完全不支持使用SWIG、SIP等工具編寫的擴展尊沸。就連NumPy威沫,也要在編譯器的層面上從頭實現(xiàn)贤惯。即使實現(xiàn)了,也只能在Python層面中使用壹甥,無法供其他第三方模塊在非Python環(huán)境中使用救巷。關(guān)于PyPy,后續(xù)會嘗試用一篇完整的文章來介紹句柠。不過我的這一篇文章中對PyPy和下面的Pyston有更詳細(xì)的描述浦译。

Pyston

Pyston由Dropbox開發(fā),使用C++11編寫溯职,采用Method-at-a-time-JIT和Mark Sweep——Stop the World的GC技術(shù)精盅。Pyston使用類似JavaScript V8那樣的多層編譯,其中也用到了LLVM來優(yōu)化代碼谜酒。Pyston正在發(fā)展中叹俏,還不成熟。但其前景是非常值得看好的(如果沒像Google的Unladen Swallow那樣死掉的話僻族。話說粘驰,Google的東西現(xiàn)在是越來越不敢用了,不是他們的東西不好述么,是怕用著用著蝌数,他們就關(guān)掉了)。

總結(jié):熱愛Python的小伙伴可以加入這個Python技術(shù)交流干貨分享群733736235一起成長哦度秘!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顶伞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剑梳,更是在濱河造成了極大的恐慌唆貌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垢乙,死亡現(xiàn)場離奇詭異锨咙,居然都是意外死亡,警方通過查閱死者的電腦和手機追逮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門蓖租,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人羊壹,你說我怎么就攤上這事∑胗ぃ” “怎么了油猫?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柠偶。 經(jīng)常有香客問我情妖,道長睬关,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任毡证,我火速辦了婚禮电爹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘料睛。我一直安慰自己丐箩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布恤煞。 她就那樣靜靜地躺著屎勘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪居扒。 梳的紋絲不亂的頭發(fā)上概漱,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音喜喂,去河邊找鬼瓤摧。 笑死,一個胖子當(dāng)著我的面吹牛玉吁,可吹牛的內(nèi)容都是我干的照弥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诈茧,長吁一口氣:“原來是場噩夢啊……” “哼产喉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敢会,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤曾沈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸥昏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塞俱,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年吏垮,在試婚紗的時候發(fā)現(xiàn)自己被綠了障涯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡膳汪,死狀恐怖唯蝶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遗嗽,我是刑警寧澤粘我,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站痹换,受9級特大地震影響征字,放射性物質(zhì)發(fā)生泄漏都弹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一匙姜、第九天 我趴在偏房一處隱蔽的房頂上張望畅厢。 院中可真熱鬧,春花似錦氮昧、人聲如沸框杜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霸琴。三九已至,卻和暖如春昭伸,著一層夾襖步出監(jiān)牢的瞬間梧乘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工庐杨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留选调,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓灵份,卻偏偏與公主長得像仁堪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子填渠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容