很多小伙伴在使用python的時(shí)候都會(huì)感慨:這語(yǔ)言也太好用了吧!但是這么好用的語(yǔ)言他是怎么實(shí)現(xiàn)的呢?接下來(lái)這篇文章我們不談技術(shù),就來(lái)好好聊一下python是怎么實(shí)現(xiàn)的。
一門語(yǔ)言的實(shí)現(xiàn)往往依賴于另一門語(yǔ)言(除了機(jī)器碼),比如說(shuō)C語(yǔ)言的實(shí)現(xiàn)就是由匯編實(shí)現(xiàn)的(由匯編語(yǔ)言實(shí)現(xiàn)C語(yǔ)言編譯器,然后用編譯器將C語(yǔ)言編譯成匯編語(yǔ)言),匯編語(yǔ)言是由機(jī)器語(yǔ)言實(shí)現(xiàn)的(匯編語(yǔ)言就是機(jī)器語(yǔ)言加上部分助記符),而python這門語(yǔ)言就厲害了,實(shí)現(xiàn)python語(yǔ)言的語(yǔ)言有好幾種,接下來(lái)我們來(lái)看看都有哪些吧。
C語(yǔ)言實(shí)現(xiàn)的CPython
所有的python版本中,C語(yǔ)言實(shí)現(xiàn)的python被稱為CPython,是使用最廣泛的一個(gè)python版本,同時(shí)它也是python的官方版本,因此一些新的語(yǔ)言特性也會(huì)最先出現(xiàn)在這里。
java實(shí)現(xiàn)的JPython
沒(méi)想到吧,C語(yǔ)言實(shí)現(xiàn)了python,java也能實(shí)現(xiàn)python。JPython是python的另一種版本,它相比于CPython而言擁有了更高的與java語(yǔ)言之間的互操作性(畢竟是java實(shí)現(xiàn)的),具體表現(xiàn)在它可以直接使用java代碼庫(kù)。
JPython最后會(huì)將python代碼編譯成java字節(jié)碼(沒(méi)錯(cuò),jdk也是將java代碼編譯成字節(jié)碼)然后放到j(luò)ava虛擬機(jī)內(nèi)解釋執(zhí)行,這就意味著實(shí)際上JPython寫的代碼最后和java寫的代碼沒(méi)有區(qū)別,只不過(guò)源代碼不一樣(可以理解為同樣代碼的不同源代碼實(shí)現(xiàn))。
python實(shí)現(xiàn)的PyPy
如果你預(yù)判到了上面的java實(shí)現(xiàn)python的操作的話,那么python實(shí)現(xiàn)python你能預(yù)判到嗎?其實(shí)這也很好理解,在計(jì)算機(jī)領(lǐng)域有一個(gè)名詞叫圖靈完備語(yǔ)言。圖靈完備語(yǔ)言的一個(gè)特點(diǎn)就是,可以自己實(shí)現(xiàn)自己。比如說(shuō)你可以使用匯編語(yǔ)言寫一個(gè)匯編語(yǔ)言的編譯器,也可以使用C語(yǔ)言寫一個(gè)C語(yǔ)言的編譯器(事實(shí)上現(xiàn)在的C語(yǔ)言編譯器也確實(shí)是用C語(yǔ)言寫的)。而python也是一門圖靈完備語(yǔ)言,所以你可以使用python實(shí)現(xiàn)一個(gè)python編譯器,然后進(jìn)行python代碼的編譯(套娃行為)。
其他python語(yǔ)言的實(shí)現(xiàn)
實(shí)現(xiàn)python的不止只有上面三大語(yǔ)言巨頭,還有一些別的語(yǔ)言,比如使用.NET語(yǔ)言和C#語(yǔ)言實(shí)現(xiàn)的python,它的操作和java的操作類似,它也能擁有更好的跟.NET語(yǔ)言的互操作性。還有一種特殊的實(shí)現(xiàn)被稱為Stackless,這種實(shí)現(xiàn)可以支持更多的線程,但由于小編對(duì)這個(gè)實(shí)現(xiàn)并不是很了解,所以不做深入介紹。
小結(jié)
以上就是python是怎么實(shí)現(xiàn)的全部?jī)?nèi)容,更多有趣的python知識(shí)可以關(guān)注W3Cschool,小編會(huì)堅(jiān)持給大家分享有趣的python見(jiàn)聞的。