解釋性語言和翻譯性語言的區別

計算機程序,其實就是一組計算機指令的集合,能真正驅動機器運行的是機器指令,但讓普通開發者直接編寫機器指令是不現實的,因此就出現了計算機高級語言。高級語言允許使用自然語言(通常就是英語)來編程,但高級語言的程序最終必須被翻譯成機器指令來執行。

高級語言按照程序的執行方式,可以分爲編譯型和解釋型兩種。

編譯型語言

編譯型語言是指使用專門的編譯器,針對特定平臺(操作系統)將某種高級語言源代碼,一次性“翻譯”成可被該平臺硬件執行的機器語言(包括機器指令和操作數),幷包裝成該平臺所能識別的可執行程序的格式,這個轉換過程稱爲編譯(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 不難理解,編譯型語言和解釋型語言的區別在於,編譯是對高級語言程序進行一次性翻譯,這樣的好處是,一旦源程序被徹底翻譯,它就可以重複運行,且今後都不再需要編譯器和源代碼;而如果使用解釋器,則高級語言程序每次運行,都需要藉助源程序和解釋器,其最大的好處就是,程序有很好的可移植性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章