直譯器( interpreter ) 與 編譯器( compiler ) 的對比
阿新 • • 發佈:2020-10-19
什麼是直譯器與編譯器
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