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

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

class文件 不同 分別是 .class 需要 存在 保存 scrip 源代碼

計算機編程語言種類非常多,根據與計算機硬件貼近程度和抽象程度大致可分為3類,自頂向下分別是 :

高級語言(抽象層次更高的便於記憶和表示的英文代碼) 
            |
匯編語言(抽象層次較高的對應機器硬件的cpu指令集,英文縮的助記    符號代碼)       
            |
機器語言(抽像層次最低的由0、1序列所表示的機器碼) 

眾所周知,計算機底層只能識別(並執行)0、1序列的機器碼,這表示所有的高級編程語言所編寫的代碼,最終都要以某種方式被轉換成能被計算機識別的0、1序列機器碼,方可被計算機接受並執行。這種將代碼轉換為機器碼的方式可分為編譯型和解釋型這2類:

概念:

編譯型語言

:把做好的源程序全部編譯成二進制代碼的可運行程序。然後,可直接運行這個程序。

解釋型語言:把做好的源程序翻譯一句,然後執行一句,直至結束!

編譯型語言

編譯是指在應用源程序執行之前,就將程序源代碼“翻譯”成目標代碼(機器語言),因此其目標程序可以脫離其語言環境獨立執行,使用比較方便、效率 較高。但應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(* .OBJ)才能執行,只有目標文件而沒有源代碼,修改很不方便。現在大多數的編程語言都是編譯型的。編譯程序將源程序翻譯成目標程序後保存在另一個文件中,該目標程序可脫離編譯程序直接在計算機上多次運行。大多數軟件產品都是以目標程序形式發行給用戶的,不僅便於直接運行,同時又使他人難於盜用其中的技術C、C++、Fortran、Visual Foxpro、Pascal、Delphi、Ada都是編譯實現的。

解釋型語言

解釋型語言的實現中,翻譯器並不產生目標機器代碼,而是產生易於執行的中間代碼,這種中間代碼與機器代碼是不同的,中間代碼的解釋是由軟件支持的,不能直接使用硬件,軟件解釋器通常會導致執行效率較低。用解釋型語言編寫的程序是由另一個可以理解中間代碼的解釋程序執行的。與編譯程序不同的是,解釋程序的任務是逐一將源程序的語句解釋成可執行的機器指令,不需要將源程序翻譯成目標代碼後再執行。釋程序的優點是當語句出現語法錯誤時,可以立即引起程序員註意,而程序員在程序開發期間就能進行校正。對於解釋型Basic語言,需要一個專門的解釋器解釋執行 Basic程序,每條語言只有在執行才被翻譯。這種解釋型語言每執行一次就翻譯一次,因而效率低下。一般地,動態語言都是解釋型的,如python、Tcl、Perl、Ruby、VBScript、 JavaScript等。

混合型

Java很特殊,Java程序也需要編譯,但是沒有直接編譯稱為機器語言,而是編譯稱為字節碼,然後在Java虛擬機上用解釋方式執行字節碼。Python 的也采用了類似Java的編譯模式,先將Python程序編譯成Python字節碼,然後由一個專門的Python字節碼解釋器負責解釋執行字節碼。(Java虛擬機對字節碼的執行相當於模擬一個cpu,而ruby1.8–在虛擬機還未出現前–是通過解釋成語法樹執行。)

區別

編譯型語言

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、解釋器也會做很多代碼優化,運行時安全性檢查;這些額外的步驟占用了更多的資源並進一步降低了應用的運行速度。

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