解釋器( 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等語言。
 
 

總結

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

 

 

 

 

 

 

 

 

相關鏈接

 


免責聲明!

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



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