Interpreter(解釋器)與complier(編譯器)的區別


首先需要說明的是,我們通常寫代碼用的語言(匯編除外)對於機器來說都是高級語言(high-level language),但由於機器並不能直接理解高級語言,所以我們的代碼若是想被執行還需要經過中間的翻譯步驟,這個翻譯要么是“解釋”,要么是“編譯”,也因此,我們平時寫代碼的語言主要分為兩類:

解釋型語言:R,Python,Java等

編譯型語言:C, C++, Pascal等

 

一. Compiler(編譯器)

其實我覺得最能體會解釋器與編譯器的區別就是在調試/運行代碼的時候,

作為計算機專業的學生,大學要學的第一門語言是C,我記得當時我們普遍用Dev-C++ (輕量級易啟動易安裝),

當時每次寫完代碼后,可以單獨選擇 編譯(compile) 再選 運行(run),或者 編譯且運行,但是無論如何,是需要有這么一個編譯的過程的

如果在命令行中用GCC來編譯C文件的話,大概對編譯過程有更深的體會,

在寫好一個hello world的c文件后,需要用gcc來執行:

 $ gcc -Wall -hello.c -o hello 

這個過程中,gcc將原始的hello.c文件編譯成機器可以理解的代碼並且存為hello文件,之后再執行:

 $ ./hello 

這一步驟將可以被機器理解的hello文件送到內存中由CPU開始執行,之后就可以得到執行結果。

以上是想強調,complier需要先把不可被機器理解的High-level language(例如C或者C++)翻譯成可被機器理解的語言(一般是二進制’0‘和’1‘),並存入新的目標文件中(例如上面例子中的hello文件),之后我們真正執行的對象也是hello文件

 

二.Interpreter(解釋器)

如果有在Pycharm調試經驗的同學大概會發現,一個有bug的文件是可以被調試的,直到遇到bug,報錯,自動退出調試過程。

這也對應了Interpreter最明顯的特征:一行一行讀取源碼后,解釋,立即執行

相比於編譯型語言來說,解釋型語言由於不要翻譯成目標文件,因此占據空間較少,但由於逐行解釋的翻譯方式,也因此降低了整體的執行效率。

 

以上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM