1. 程式人生 > >python學習01: python是編譯型語言,與解釋型語言有什麼區別?

python學習01: python是編譯型語言,與解釋型語言有什麼區別?

編譯型語言

編譯型語言是指使用專門的編譯器,針對特定平臺(作業系統)將某種高階語言原始碼,一次性“翻譯”成可被該平臺硬體執行的機器語言(包括機器指令和運算元),幷包裝成該平臺所能識別的可執行程式的格式,這個轉換過程稱為編譯(Compile)。編譯生成的可執行程式可以脫離開發環境,在特定的平臺上獨立執行。

編譯器,可以理解為就是一個比較複雜的計算機程式,它可以接受一個以高階語言編寫的程式,並將其翻譯成以某個計算機的機器語言表達的等效程式。

有些程式編譯結束後,還可能需要對其他編譯好的目的碼進行連結,即組裝兩個以上的目的碼模組生成最終的可執行程式,通過這種方式實現低層次的程式碼複用。

因為編譯型語言是一次性編譯成機器語言的,所以可以脫離開發環境獨立執行,而且通常執行效率較高。但因為編譯型語言的程式被編譯成特定平臺上的機器碼,因此編譯生成的可執行程式通常無法移植到其他平臺上執行,如果需要移植,則必須將原始碼複製到特定平臺上,針對特定平臺進行修改,至少需要採用特定平臺上的編譯器重新編譯。

現有的 C 、C++、Objective-C、Pascal 等高階語言都屬於編譯型語言。

半編譯型語言

此外,還有一種偽編譯型語言,如 Visual Basic,它屬於半編譯型語言,並不是真正的編譯型語言。它首先被編譯成 P-code 程式碼(中間程式碼),並將解釋引擎封裝在可執行程式內,當執行程式時,P-code 程式碼才會被解析成真正的二進位制程式碼。

從表面上看,Visual Basic 可以編譯生成可執行的 EXE 檔案,而且這個 EXE 檔案也可以脫離開發環境,在特定平臺上執行,非常像編譯型語言。實際上,在這個 EXE 檔案中,既有程式的啟動程式碼,也有連結解釋程式的程式碼,而這部分程式碼負責啟動 Visual Basic 解釋程式,再對 Visual Basic 程式碼進行解釋並執行。

解釋型語言

解釋型語言是指使用專門的直譯器,將源程式逐行解釋成特定平臺的機器程式碼並立即執行的語言。

解釋型語言通常不會進行整體性的編譯和連結處理,解釋型語言相當於把編譯型語言中的編譯和解釋過程混合到一起同時完成。

可以這樣認為,每次執行解釋型語言的程式都需要進行一次編譯,因此解釋型語言的程式執行效率通常較低,而且不能脫離直譯器獨立執行。但解釋型語言有一個優勢,就是跨平臺比較容易,只需提供特定平臺的直譯器即可,每個特定平臺上的直譯器都負責將源程式解釋成特定平臺的機器指令。

也就是說,解釋型語言可以方便地實現源程式級的移植,但這是以犧牲程式執行效率為代價的。

編譯型語言PK解釋型語言

編譯型語言和解釋型語言的對比如圖 1 所示。


編譯型語言和解釋型語言
圖 1 編譯型語言和解釋型語言   藉助圖 1 不難理解,編譯型語言和解釋型語言的區別在於,編譯是對高階語言程式進行一次性翻譯,這樣的好處是,一旦源程式被徹底翻譯,它就可以重複執行,且今後都不再需要編譯器和原始碼;而如果使用直譯器,則高階語言程式每次執行,都需要藉助源程式和直譯器,其最大的好處就是,程式有很好的可移植性。


本教程所講的 Python 語言,屬於解釋型語言,因此執行 Python 程式時需要使用特定的直譯器進行解釋、執行。解釋型的 Python 語言天生具有跨平臺的能力,只要為 Python 提供相應平臺