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

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

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

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

<h2>概念:</h2>編程

編譯型語言:把作好的源程序所有編譯成二進制代碼的可運行程序。而後,可直接運行這個程序。安全

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

###編譯型語言 編譯是指在應用源程序執行以前,就將程序源代碼「翻譯」成目標代碼(機器語言),所以其目標程序能夠脫離其語言環境獨立執行,使用比較方便、效率 較高。但應用程序一旦須要修改,必須先修改源代碼,再從新編譯生成新的目標文件(* .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–在虛擬機還未出現前–是經過解釋成語法樹執行。)函數

###區別 ####編譯型語言####fetch

一、 編譯型語言最大的優點之一就是其執行速度。用C/C++編寫的程序運行速度要比用Java編寫的相同程序快30%-70%。優化

二、編譯型程序比解釋型程序消耗的內存更少。翻譯

三、不利的一面——編譯器比解釋器要難寫得多。

四、編譯器在調試程序時提供不了多少幫助——有多少次在你的C語言代碼中遇到一個「空指針異常」時,須要花費好幾個小時來明確錯誤到底在代碼中的什麼位置。

五、可執行的編譯型代碼要比相同的解釋型代碼大許多。例如,C/C++的.exe文件要比一樣功能的Java的.class文件大不少。

六、編譯型程序是面向特定平臺的於是是平臺依賴的。

七、編譯型程序不支持代碼中實現安全性——例如,一個編譯型的程序能夠訪問內存的任何區域,而且能夠對你的PC作它想作的任何事情(大部分病毒是使用編譯型語言編寫的)

八、因爲鬆散的安全性和平臺依賴性,編譯型語言不太適合開發因特網或者基於Web的應用。

####解釋型語言 一、解釋型語言提供了極佳的調試支持。一名Java程序員只須要幾分鐘就能夠定位並修復一個「空指針異常」,由於Java運行環境不只指明瞭異常的性質,並且給出了異常發生位置具體的行號和函數調用順序(著名的堆棧跟蹤信息)。這樣的便利是編譯型語言所沒法提供的。

二、另外一個優點是解釋器比編譯器容易實現

三、解釋型語言最大的優點之一是其平臺獨立性

四、解釋型語言也能夠保證高度的安全性——這是互聯網應用迫切須要的

五、中間語言代碼的大小比編譯型可執行代碼小不少

六、平臺獨立性,以及嚴密的安全性是使解釋型語言成爲適合互聯網和Web應用的理想語言的2個最重要的因素。

七、解釋型語言存在一些嚴重的缺點。解釋型應用佔用更多的內存和CPU資源。這是因爲,爲了運行解釋型語言編寫的程序,相關的解釋器必須首先運行。解釋器是複雜的,智能的,大量消耗資源的程序而且它們會佔用不少CPU週期和內存。

八、因爲解釋型應用的decode-fetch-execute(解碼-抓取-執行)的週期,它們比編譯型程序慢不少。

九、解釋器也會作不少代碼優化,運行時安全性檢查;這些額外的步驟佔用了更多的資源並進一步下降了應用的運行速度。

相關文章
相關標籤/搜索