編譯執行與解釋執行的區別


 


解釋執行
      由解釋器根據輸入的數據當場執行而不生成任何目標程序。
      解釋執行程序是高級語言翻譯程序的一種,它將源語言(如VASIC)書寫的源程序作為輸入,解釋一句后就提交給計算機執行一句,並不生成目標程序。這種工作方式非常適合於人通過終端設備與計算機會話,如在終端上打一條命令或者語句,
    解釋程序就立即將此語句解釋成一條或幾條指令並提交硬件立即執行且將執行結果反映到終端,從終端把命令打入后,就能立即得到計算結果。這的確很方便,很適合於一些小型機的計算問題,但解釋執行速度很慢,例如源程序中出現循環,
則解釋程序也重復地解釋並提交這一組語句,這就造成很大浪費。 編譯執行 先將源代碼編譯成目標語言(如:計算機語言)之后通過連接程序生成目標程序進行執行。 這是一類很重要的語言處理程序,它把高級語言(如Pascal、C等)源程序作為輸入,進行翻譯轉換,產生出機器語言的目標程序,然后再讓計算機去執行這個目標程序,得到計算結果。 編譯程序工作時,先分析,后綜合,從而得到目標程序。所謂分析,是指詞法分析和語法分析;所謂綜合是指代碼優化,存儲分配和代碼生成。為了完成這些分析綜合任務,編譯程序采用對源程序進行多次掃描的方法,
   每次掃描集中完成一項或幾項任務,也有一項任務分散到幾次掃描去完成的。下面舉一個四遍掃描的例子:第一遍掃描做詞法分析;第二遍掃描做語法分析;第三遍掃描做代碼優化和存儲分配;第四遍掃描做代碼生成。 值得一提的是,大多數的編譯程序直接產生機器語言的目標代碼,形成可執行的目標文件,但也有的編譯程序則先產生匯編語言一級的符號代碼文件,然后再調用匯編程序進行翻譯加工處理,最后產生可執行的機器語言目標文件。 實際應用中,對於需要經常使用的有大量計算的大型題目,采用招待速度較快的編譯型的高級語言較好,雖然編譯過程本身較為復雜,但一旦形成目標文件,以后可多次使用。相反,對於小型題目或計算簡單不太費機時的題目,
  則多選用解釋型的會話式高級語言,如BASIC,這樣可以大大縮短編程及調試的時間。
1、運行效率 編譯語言需要編譯一次,運行直接執行、不需要翻譯,所以編譯型語言的程序執行效率高。而解釋語言則不同,解釋型語言的程序不需要編譯,省了道工序,解釋性語言在運行程序的時候才翻譯,比如解釋型basic語言,
專門有一個解釋器能夠直接執行basic程序,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就要翻譯一次,效率比較低。 解釋執行的語言因為解釋器不需要直接同機器碼打交道所以實現起來較為簡單、
而且便於在不同的平台上面移植,這一點從現在的編程語言解釋執行的居多就能看出來,如 Visual Basic、Visual Foxpro、Power Builder、Java...等。編譯執行的語言因為要直接同CPU 的指令集打交道,
具有很強的指令依賴性和系統依賴性,但編譯后的程序執行效率要比解釋語言要高的多,象現在的 Visual C
/C++、Delphi 等都是很好的編譯語言。 2、代碼安全性 對於解釋語言與編譯語言所編制出來的代碼安全性上而言,可以說是各有優缺點。曾經在 Windows 下跟蹤調式過 VB 程序的朋友一般都知道,程序代碼 99% 的時間里都是在 VBRUNxx 里轉來轉去,根本看不出一個所以然來。
這是因為你跟蹤的是 VB 的解釋器,要從解釋器中看出代碼的目的是什么是相當困難的。但解釋語言有一個致命的弱點,那就是解釋語言的程序代碼都是以偽碼的方式存放的,一旦被人找到了偽碼與源碼之間的對應關系,
就很容易做出一個反編譯器出來,你的源程序等於被公開了一樣。而編譯語言因為直接把用戶程序 編譯成機器碼,再經過優化程序的優化,很難從程序返回到你的源程序的狀態, 但對於熟悉匯編語言的解密者來說,也很容易通過跟蹤你的代碼來確定某些代碼的用途。 解釋執行的優點 不依賴於平台,因為每次都會根據不同的平台對語句進行解析,像JS就是一種邊解釋邊執行的語言,不管是在windows還是unix都可以直接用 解釋執行的缺點,解析是需要時間的,每次都解析在很多情況下都是相當於每次都在做重復功,這樣運行的效率比較低。盡可能的減少重復功,這也是現在為什么很流行的緩存的原因,但是解析執行這種方式就沒無法做到了 編譯執行的優點 所謂的編譯執行就是先對編程進行編譯,生成一個obj文件,然后再拿來運行,它的優點恰巧就是解釋執行的缺點的反義,去除了每次都解析的問題 編譯執行的缺點,也是恰巧是解釋執行優點的反義。就像C語言,你在windows下編譯的程序,拿到unix下運行,當然如果只是簡單的scanf,printf是可以的,但是像指針,內存分配,文件操作,多線程等,
在一些相對復雜的系統問題就嚴重了。 更可怕的是拿源碼到unix環境下編譯通過了,但是運行卻出問題,這種問題最要人命。 所以一般的做法都是這個程序會用在什么系統,就到什么系統環境去開發

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM