1. 程式人生 > >編譯型語言與解釋型語言的區別及各自的優缺點【轉】

編譯型語言與解釋型語言的區別及各自的優缺點【轉】

編譯型語言在程式執行之前,有一個單獨的編譯過程,將程式翻譯成機器語言就不用再進行翻譯了。

解釋型語言,是在執行的時候將程式翻譯成機器語言,雖然Java程式在執行之前也有一個編譯過程,但是並不是將程式編譯成機器語言,而是將它編譯成位元組碼(可以理解為一箇中間語言)。在執行的時候,由JVM將位元組碼再翻譯成機器語言。

注:指令碼語言一般都有相應的指令碼引擎來解釋執行。 他們一般需要直譯器才能執行。JAVASCRIPT,ASP,PHP,PERL,Nuva都是指令碼語言。C/C++編譯、連結後,可形成獨立執行的exe檔案。

編譯型語言:

  1. 編譯型語言最大的優勢之一就是其執行速度。用C/C++編寫的程式執行速度要比用Java編寫的相同程式快30%-70%。
  2. 編譯型程式比解釋型程式消耗的記憶體更少。
  3. 不利的一面——編譯器比直譯器要難寫得多。
  4. 編譯器在除錯程式時提供不了多少幫助——有多少次在你的C語言程式碼中遇到一個“空指標異常”時,需要花費好幾個小時來明確錯誤到底在程式碼中的什麼位置。
  5. 可執行的編譯型程式碼要比相同的解釋型程式碼大許多。例如,C/C++的.exe檔案要比同樣功能的Java的.class檔案大很多。
  6. 編譯型程式是面向特定平臺的因而是平臺依賴的。
  7. 編譯型程式不支援程式碼中實現安全性——例如,一個編譯型的程式可以訪問記憶體的任何區域,並且可以對你的PC做它想做的任何事情(大部分病毒是使用編譯型語言編寫的)
  8. 由於鬆散的安全性和平臺依賴性,編譯型語言不太適合開發因特網或者基於Web的應用。

解釋型語言:

  1. 解釋型語言提供了極佳的除錯支援。一名Java程式設計師只需要幾分鐘就可以定位並修復一個“空指標異常”,因為Java執行環境不僅指明瞭異常的性質,而且給出了異常發生位置具體的行號和函式呼叫順序(著名的堆疊跟蹤資訊)。這樣的便利是編譯型語言所無法提供的。
  2. 另一個優勢是直譯器比編譯器容易實現
  3. 解釋型語言最大的優勢之一是其平臺獨立性
  4. 解釋型語言也可以保證高度的安全性——這是網際網路應用迫切需要的
  5. 中間語言程式碼的大小比編譯型可執行程式碼小很多
  6. 平臺獨立性,以及嚴密的安全性是使解釋型語言成為適合網際網路和Web應用的理想語言的2個最重要的因素。
  7. 解釋型語言存在一些嚴重的缺點。解釋型應用佔用更多的記憶體和CPU資源。這是由於,為了執行解釋型語言編寫的程式,相關的直譯器必須首先執行。直譯器是複雜的,智慧的,大量消耗資源的程式並且它們會佔用很多CPU週期和記憶體。
  8. 由於解釋型應用的decode-fetch-execute(解碼-抓取-執行)的週期,它們比編譯型程式慢很多。
  9. 直譯器也會做很多程式碼優化,執行時安全性檢查;這些額外的步驟佔用了更多的資源並進一步降低了應用的執行速度。