解釋器( interpreter ) 與 編譯器( compiler ) 的對比

 

 

 

什麼是解釋器與編譯器

一、解釋器html

解釋器是一種計算機程序,它將每一個高級程序語句轉換成機器代碼。前端

 

二、編譯器c++

把高級語言編寫的程序轉換成機器碼,將人可讀的代碼轉換成計算機可讀的代碼(0和1)。程序員

 

三、機器語言編程

一個機器語言程序是由一系列二進制模式組成的(例 110110) 它表示應該由計算機執行的簡單操做。機器語言程序是可執行的,因此它們能夠直接運行c#

 

二者都是將高級語言轉換成機器碼,解釋器在程序運行時將代碼轉換成機器碼,編譯器在程序運行以前將代碼轉換成機器碼後端

 

二者的區別

 

  Interpreter(解釋器) compare(編譯器)
程序步驟 一、建立代碼
二、沒有文件連接或機器代碼生成
三、源語句在執行過程當中逐行執行
一、建立代碼
二、Compile將解析或分析全部語言語句的正確性。若是不正確,則拋出錯誤
三、若是沒有錯誤,編譯器將把源代碼轉換爲機器碼
四、它將不一樣的代碼文件連接到一個可運行的程序(稱爲exe)
五、運行程序
Input(輸入) 每次讀取一行 整個程序
Output(輸出) 不產生任何的中間代碼 生成中間目標代碼
工做機制 編譯和執行同時進行 編譯在執行以前完成
存儲 不保存任何機器代碼 存儲編譯後的機器代碼在機器上
執行 程序執行是解釋過程的一部分,所以是逐行執行的 程序執行與編譯是分開的,它只在整個輸出程序編譯後執行
生成程序 不生成輸出程序,因此他們在每次執行過程當中都要評估源程序 生成能夠獨立於原始程序運行的輸出程序(以exe的形式)
修改 直接修改就可運行 若是須要修改代碼,則須要修改源代碼,從新編譯
運行速度
內存 它須要較少的內存,由於它不建立中間對象代碼 內存需求更多的是因爲目標代碼的建立
錯誤 解釋器讀取一條語句並顯示錯誤(若是有的話)。你必須糾正錯誤才能解釋下一行 編譯器在編譯時顯示全部錯誤和警告。所以,不修正錯誤就不能運行程序
錯誤監測 容易
編程語言 PHP, Perl, Python, Ruby C, C++, C#, Scala,  Java
 
 

編譯器

 

 

一、編譯器讀取源代碼,輸出可執行代碼
二、將用高級語言編寫的軟件翻譯成計算機能夠理解的指令,它把程序員寫的文本轉換成CPU能理解的格式
三、編譯的過程比較複雜,它花了不少時間分析和處理程序
四、可執行結果是某種形式的特定於機器的二進制代碼
五、編譯器是一種程序,它讀取用高級語言編寫的程序,並將其轉換爲機器語言或低級語言,並報告程序中出現的錯誤
 
編譯器的類型:前端編譯器、後端編譯器
 
1)編譯器的 分析階段也稱爲前端,它將程序劃分爲基本的組成部分,檢查代碼的語法、語義和語法,而後生成中間代碼。分析階段包括詞法分析、語義分析和語法分析。
2)編譯器的 合成階段也稱爲後端,優化中間代碼,生成目標代碼。合成階段包括代碼優化器和代碼生成器。
 

 

 

解釋器

1:解釋器在運行時逐行轉換源代碼
二、解釋徹底將一個用高級語言編寫的程序翻譯成機器級語言
三、解釋器容許在程序執行時求值和修改程序
四、用於分析和處理程序的時間相對較少
五、與編譯器相比,程序執行相對緩慢
 
 
注: 
Java既是編譯的又是解釋的,Java代碼自己被編譯成目標代碼。在運行時,JVM將目標代碼解釋爲目標計算機的機器代碼。

 

主要區別

讓咱們看看編譯器和解釋器之間的主要區別
一、編譯器將一個程序做爲一個總體進行翻譯,而解釋器則一條一條地翻譯一個程序
二、在編譯器的狀況下生成中間代碼或目標代碼。而解釋器不建立中間代碼
三、編譯器比解釋器要快得多,由於編譯器一次完成整個程序,而解釋器則是依次編譯每一行代碼
四、因爲要生成目標代碼,編譯器比解釋器須要更多的內存
五、編譯器同時顯示全部錯誤,很難檢測錯誤,而解釋器則逐個顯示每條語句的錯誤,更容易檢測錯誤
六、在編譯器中,當程序中出現錯誤時,它會中止翻譯,並在刪除錯誤後從新翻譯整個程序。相反,當解釋器中發生錯誤時,它會阻止其翻譯,在刪除錯誤後,翻譯將繼續
七、在編譯器中,這個過程須要兩個步驟,首先將源代碼翻譯成目標程序,而後執行。而在解釋器中,這是一個一次性的過程,源代碼在編譯和執行的同時
八、編譯器用於編程語言,如C、c++、c#、Scala等。另外一個解釋器用於PHP、Ruby、Python等語言。
 
 

總結

編譯器和解釋器的目的是作相同的工做,但在操做過程上不一樣,編譯器以聚合的方式獲取源代碼,而解釋器獲取源代碼的組成部分,即一條一條的語句。
 

 

 

 

 

 

 

 

 

相關連接

相關文章
相關標籤/搜索