|
Python 是一門解釋型的編程語言,因此它具有解釋型語言的運(yùn)行機(jī)制。 計(jì)算機(jī)程序,其實(shí)就是一組計(jì)算機(jī)指令集,能真正驅(qū)動(dòng)機(jī)器運(yùn)行的是機(jī)器指令,但讓普通開發(fā)者直接編寫機(jī)器指令是不現(xiàn)實(shí)的,因此就出現(xiàn)了計(jì)算機(jī)高級(jí)語言。高級(jí)語言允許使用自然語言(通常就是英語)來編程,但高級(jí)語言的程序最終必須被翻譯成機(jī)器指令來執(zhí)行。 高級(jí)語言按程序的執(zhí)行方式可以分為編譯型和解釋型兩種。 編譯型語言是指使用專門的編譯器,針對(duì)特定平臺(tái)(操作系統(tǒng))將某種高級(jí)語言源代碼一次性“翻譯”成可被該平臺(tái)硬件執(zhí)行的機(jī)器碼(包括機(jī)器指令和操作數(shù)),并包裝成該平臺(tái)所能識(shí)別的可執(zhí)行程序的格式,這個(gè)轉(zhuǎn)換過程稱為編譯(Compile)。編譯生成的可執(zhí)行程序可以脫離開發(fā)環(huán)境,在特定的平臺(tái)上獨(dú)立運(yùn)行。 有些程序編譯結(jié)束后,還可能需要對(duì)其他編譯好的目標(biāo)代碼進(jìn)行鏈接,即組裝兩個(gè)以上的目標(biāo)代碼模塊生成最終的可執(zhí)行程序,通過這種方式實(shí)現(xiàn)低層次的代碼復(fù)用。 因?yàn)榫幾g型語言是一次性編譯成機(jī)器碼的,所以可以脫離開發(fā)環(huán)境獨(dú)立運(yùn)行,而且通常運(yùn)行效率較高。但因?yàn)榫幾g型語言的程序被編譯成特定平臺(tái)上的機(jī)器碼,因此編譯生成的可執(zhí)行程序通常無法移植到其他平臺(tái)上運(yùn)行,如果需要移植,則必須將源代碼復(fù)制到特定平臺(tái)上,針對(duì)特定平臺(tái)進(jìn)行修改,至少需要采用特定平臺(tái)上的編譯器重新編譯。 現(xiàn)有的 C 、C 、Objective-C、Pascal 等高級(jí)語言都屬于編譯型語言。 解釋型語言是指使用專門的解釋器對(duì)源程序逐行解釋成特定平臺(tái)的機(jī)器碼并立即執(zhí)行的語言。解釋型語言通常不會(huì)進(jìn)行整體性的編譯和鏈接處理,解釋型語言相當(dāng)于把編譯型語言中的編譯和解釋過程混合到一起同時(shí)完成。 可以這樣認(rèn)為,每次執(zhí)行解釋型語言的程序都需要進(jìn)行一次編譯,因此解釋型語言的程序運(yùn)行效率通常較低,而且不能脫離解釋器獨(dú)立運(yùn)行。但解釋型語言有一個(gè)優(yōu)勢(shì),就是跨平臺(tái)比較容易,只需提供特定平臺(tái)的解釋器即可,每個(gè)特定平臺(tái)上的解釋器都負(fù)責(zé)將源程序解釋成特定平臺(tái)的機(jī)器指令。解釋型語言可以方便地實(shí)現(xiàn)源程序級(jí)的移植,但這是以犧牲程序執(zhí)行效率為代價(jià)的。 編譯型語言和解釋型語言的對(duì)比如圖 1 所示。
此外,還有一種偽編譯型語言,如 Visual Basic,它屬于半編譯型語言,并不是真正的編譯型語言。它首先被編譯成 P- 代碼,并將解釋引擎封裝在可執(zhí)行程序內(nèi),當(dāng)運(yùn)行程序時(shí),P- 代碼會(huì)被解析成真正的二進(jìn)制代碼。 從表面上看,Visual Basic 可以編譯生成可執(zhí)行的 EXE 文件,而且這個(gè) EXE 文件也可以脫離開發(fā)環(huán)境,在特定平臺(tái)上運(yùn)行,非常像編譯型語言。實(shí)際上,在這個(gè) EXE 文件中,既有程序的啟動(dòng)代碼,也有鏈接解釋程序的代碼,而這部分代碼負(fù)責(zé)啟動(dòng) Visual Basic 解釋程序,再對(duì) Visual Basic 代碼進(jìn)行解釋井執(zhí)行。 Python 語言屬于解釋型語言,因此運(yùn)行 Python 程序時(shí)需要使用特定的解釋器進(jìn)行解釋、執(zhí)行。 解釋型的 Python 語言天生具有跨平臺(tái)的能力,只要為 Python 提供相應(yīng)平臺(tái)的解釋器即可。 接下來將會(huì)介紹為不同平臺(tái)安裝 Python 解釋器。 |
|
|