主要差異
編譯器和直譯器都翻譯高階語言程式,不同之處在於編譯器將原始碼編譯為可執行的機器程式碼,而直譯器解釋每個指令並執行它,而不產生任何機器/目的碼。編譯器的工作是一次性的,一旦程式被編譯;它可以被儲存以備以後執行,而每次程式執行時直譯器都必須解釋。在編譯器的情況下生成目的碼,而在直譯器中不生成目的碼;它只生成中間程式碼。編譯器基本上處理程式,但直譯器按指令處理程式。在編譯器中,程式的執行速度很快,而在直譯器中則較慢,因為逐條語句的解釋和執行非常耗時。在編譯器中,除錯過程比在直譯器中除錯要困難得多。編譯器在執行時不需要原始碼,但如果是直譯器,則需要完整的原始碼檔案來執行程式。編譯器需要更多的記憶體,因為生成的機器程式碼相當大,但是對於直譯器來說,不需要額外的記憶體。在編譯器中,程式中的錯誤在分析完完整的原始碼後顯示出來,但在直譯器中,每解釋一行就顯示錯誤。對於編譯器,編譯後的程式碼由計算機硬體執行,而在直譯器中,中間程式碼由另一個程式處理。在程式設計場景中,編譯器檢查程式的語法,但直譯器驗證程式的關鍵字。在編譯器中有一個程式碼最佳化的範圍,直譯器允許在執行時修改程式碼。這兩種方法都是程式設計師經常使用的,它們都有自己的規範和優點。
比較圖
編譯器定義
編譯器是一種專門的程式,它將用某種高階語言編寫的原始碼處理成計算機可理解的機器程式碼。這個機器程式碼實際上是用二進位制語言編寫的,處理器可以理解並執行它。為了編寫原始碼,程式設計師使用C語言、C++語言或Pascal語言編寫程式,使用一些程式設計編輯器。然後使用適合編寫原始碼的語言的編譯器執行該程式。編譯器的輸入是一個完整的程式;它首先分析它,然後處理它。它對作為輸入的原始碼執行大量分析,包括詞法和語法分析。在完成這兩個步驟之後,編譯器的最終任務是生成機器程式碼。此編譯的輸出是目的碼,並且是可執行的。程式只編譯一次,不需要每次程式執行時都編譯。
口譯員的定義
直譯器是對用某種高階語言編寫的程式原始碼執行逐條語句(逐行)翻譯的程式。直譯器,當給定一個程式時,它接受它的一行,解釋它,然後執行它。直譯器在解釋原始碼之後生成一箇中間程式碼,然後執行它。沒有編譯階段,也沒有生成機器程式碼。這就是直譯器如何逐行翻譯和執行整個程式。當需要逐條指令立即執行時,它是首選。它們非常有用,尤其是在程式碼測試完成後。每次,當一個程式要執行時,直譯器都以同樣的方式解釋它。
一言以蔽之
- 編譯器處理整個程式;直譯器逐行解釋程式碼。
- 編譯器生成二進位制機器程式碼;直譯器生成中間程式碼。
- 編譯器的機器碼在編譯後可以儲存和重用,直譯器每次都要解釋原始碼。
- 編譯器檢查程式碼語法的有效性;解釋程式檢查關鍵字。
- 在編譯器中,程式執行速度快;在直譯器中,程式執行速度慢。
- 在編譯器中除錯很複雜;在直譯器中除錯很容易。
- 編譯器在檢查完整的原始碼後顯示錯誤;直譯器按指定的順序以程式碼形式顯示每個指令的錯誤。
- 編譯器的機器碼由硬體進一步處理,直譯器的中間碼由另一個專門的程式處理。
- 編譯器在執行時不需要原始碼檔案;直譯器在執行時執行時需要原始碼檔案。
- 在編譯器中,程式的執行是在編譯階段之後完成的,直譯器直接執行程式而不進行任何編譯。
- 編譯器使用更多的記憶體;直譯器需要更少的記憶體。
結論
計算機體系結構和理解與之相關的術語可能是一個麻煩的任務,上面這兩個術語是相似的,它們之間有著各種不同,但似乎總是彼此相似。因此,本文試圖解釋它們之間的差異,以幫助人們建立一個清晰的認識。