1. 程式人生 > >直譯器( interpreter ) 與 編譯器( compiler ) 的對比

直譯器( interpreter ) 與 編譯器( compiler ) 的對比

 

 

 

什麼是直譯器與編譯器

1、直譯器

直譯器是一種計算機程式,它將每個高階程式語句轉換成機器程式碼。

 

2、編譯器

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

 

3、機器語言

一個機器語言程式是由一系列二進位制模式組成的(例 110110) 它表示應該由計算機執行的簡單操作。機器語言程式是可執行的,所以它們可以直接執行

 

兩者都是將高階語言轉換成機器碼,直譯器在程式執行時將程式碼轉換成機器碼,編譯器在程式執行之前將程式碼轉換成機器碼

 

兩者的區別

 

  Interpreter(直譯器) compare(編譯器)
程式步驟 1、建立程式碼
2、沒有檔案連結或機器程式碼生成
3、源語句在執行過程中逐行執行
1、建立程式碼
2、Compile將解析或分析所有語言語句的正確性。如果不正確,則丟擲錯誤
3、如果沒有錯誤,編譯器將把原始碼轉換為機器碼
4、它將不同的程式碼檔案連結到一個可執行的程式(稱為exe)
5、執行程式
Input(輸入) 每次讀取一行 整個程式
Output(輸出) 不產生任何的中間程式碼 生成中間目的碼
工作機制 編譯和執行同時進行 編譯在執行之前完成
儲存 不儲存任何機器程式碼 儲存編譯後的機器程式碼在機器上
執行 程式執行是解釋過程的一部分,因此是逐行執行的 程式執行與編譯是分開的,它只在整個輸出程式編譯後執行
生成程式 不生成輸出程式,所以他們在每次執行過程中都要評估源程式 生成可以獨立於原始程式執行的輸出程式(以exe的形式)
修改 直接修改就可執行 如果需要修改程式碼,則需要修改原始碼,重新編譯
執行速度
記憶體 它需要較少的記憶體,因為它不建立中間物件程式碼 記憶體需求更多的是由於目的碼的建立
錯誤 直譯器讀取一條語句並顯示錯誤(如果有的話)。你必須糾正錯誤才能解釋下一行 編譯器在編譯時顯示所有錯誤和警告。因此,不修正錯誤就不能執行程式
錯誤監測 容易
程式語言 PHP, Perl, Python, Ruby C, C++, C#, Scala,  Java
   

編譯器

 

 

1、編譯器讀取原始碼,輸出可執行程式碼 2、將用高階語言編寫的軟體翻譯成計算機可以理解的指令,它把程式設計師寫的文字轉換成CPU能理解的格式 3、編譯的過程比較複雜,它花了很多時間分析和處理程式 4、可執行結果是某種形式的特定於機器的二進位制程式碼 5、編譯器是一種程式,它讀取用高階語言編寫的程式,並將其轉換為機器語言或低階語言,並報告程式中出現的錯誤   編譯器的型別:前端編譯器、後端編譯器   1)編譯器的分析階段也稱為前端,它將程式劃分為基本的組成部分,檢查程式碼的語法、語義和語法,然後生成中間程式碼。分析階段包括詞法分析、語義分析和語法分析。 2)編譯器的合成階段也稱為後端,優化中間程式碼,生成目的碼。合成階段包括程式碼優化器和程式碼生成器。  

 

 

直譯器

1:直譯器在執行時逐行轉換原始碼 2、解釋完全將一個用高階語言編寫的程式翻譯成機器級語言 3、直譯器允許在程式執行時求值和修改程式 4、用於分析和處理程式的時間相對較少 5、與編譯器相比,程式執行相對緩慢     注:  Java既是編譯的又是解釋的,Java程式碼本身被編譯成目的碼。在執行時,JVM將目的碼解釋為目標計算機的機器程式碼。

 

主要區別

讓我們看看編譯器和直譯器之間的主要區別 1、編譯器將一個程式作為一個整體進行翻譯,而直譯器則一條一條地翻譯一個程式 2、在編譯器的情況下生成中間程式碼或目的碼。而直譯器不建立中間程式碼 3、編譯器比直譯器要快得多,因為編譯器一次完成整個程式,而直譯器則是依次編譯每一行程式碼 4、由於要生成目的碼,編譯器比直譯器需要更多的記憶體 5、編譯器同時顯示所有錯誤,很難檢測錯誤,而直譯器則逐個顯示每條語句的錯誤,更容易檢測錯誤 6、在編譯器中,當程式中出現錯誤時,它會停止翻譯,並在刪除錯誤後重新翻譯整個程式。相反,當直譯器中發生錯誤時,它會阻止其翻譯,在刪除錯誤後,翻譯將繼續 7、在編譯器中,這個過程需要兩個步驟,首先將原始碼翻譯成目標程式,然後執行。而在直譯器中,這是一個一次性的過程,原始碼在編譯和執行的同時 8、編譯器用於程式語言,如C、c++、c#、Scala等。另一個直譯器用於PHP、Ruby、Python等語言。    

總結

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

 

 

相關連結

https://www.guru99.com/difference-compiler-vs-interpreter.html https://techdifferences.com/difference-between-compiler-and-interpreter.html  https://www.cnblogs.com/sword03/archive/2010/06/27/1766147.html