通常的說法,編譯代表著將一個高級語言轉(zhuǎn)化為CPU能執(zhí)行的機(jī)器碼。當(dāng)你編譯C的時候,的確是做的這樣的操作。編譯的結(jié)果是一個二進(jìn)制可執(zhí)行文件,這時你的系統(tǒng)可直接運(yùn)行這個程序。
與此相對的,解釋的意思是這樣的:程序運(yùn)行時每次讀源文件中的一行代碼,并執(zhí)行相應(yīng)的操作,就這樣一行一行的重復(fù)下去。當(dāng)然,所謂的腳本語言就是這么運(yùn)行的。
在Python中,源代碼會被編譯為更低級的一種形式,我們稱之為字節(jié)碼。字節(jié)碼是一串指令,和CPU的指令集類似。但是字節(jié)碼并不直接被CPU執(zhí)行,而是在虛擬機(jī)中執(zhí)行的。當(dāng)然,這里的虛擬機(jī)并不模仿整個操作系統(tǒng)的環(huán)境,只是提供了字節(jié)碼執(zhí)行的一個環(huán)境。
Python還有一個重要的特性,就是交互式命令行。你可以敲入一行Python語句,然后立刻回車執(zhí)行。實際上,即使是這個過程,Python同樣是先轉(zhuǎn)為字節(jié)碼,然后執(zhí)行。而這個交互式命令行這個特性,在很多編譯型語言里是沒有的。同樣因為沒有顯示的調(diào)用編譯程序,很多人將執(zhí)行Python源文件的程序叫做Python解釋器。
解釋型語言和編譯型語言
計算機(jī)是不能夠識別高級語言的,所以當(dāng)我們運(yùn)行一個高級語言程序的時候,就需要一個“翻譯機(jī)”來從事把高級語言轉(zhuǎn)變成計算機(jī)能讀懂的機(jī)器語言的過程。這個過程分成兩類,第一種是編譯,第二種是解釋。
編譯型語言在程序執(zhí)行之前,先會通過編譯器對程序執(zhí)行一個編譯的過程,把程序轉(zhuǎn)變成機(jī)器語言。運(yùn)行時就不需要翻譯,而直接執(zhí)行就可以了。最典型的例子就是C語言。
解釋型語言就沒有這個編譯的過程,而是在程序運(yùn)行的時候,通過解釋器對程序逐行作出解釋,然后直接運(yùn)行,最典型的例子是Ruby。
通過以上的例子,我們可以來總結(jié)一下解釋型語言和編譯型語言的優(yōu)缺點,因為編譯型語言在程序運(yùn)行之前就已經(jīng)對程序做出了“翻譯”,所以在運(yùn)行時就少掉了“翻譯”的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解釋器的優(yōu)化來在對程序做出翻譯時對整個程序做出優(yōu)化,從而在效率上接近編譯型語言,而不能超過編譯型語言。
此外,隨著Java等基于虛擬機(jī)的語言的興起,我們又不能把語言純粹地分成解釋型和編譯型這兩種。
用Java來舉例,Java首先是通過編譯器編譯成字節(jié)碼文件,然后在運(yùn)行時通過解釋器給解釋成機(jī)器文件。所以我們說Java是一種先編譯后解釋的語言。
以上內(nèi)容為大家介紹了python培訓(xùn)之解釋型語言,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。