編譯器解釋器優劣
1. 練習1.1.2:編譯器相對於解釋器的優點是什麼解釋器相對於編譯器的優點是什麼
一個編譯器產生的機器語言目標程序通常比一個解釋器快很多,解釋器的錯誤診斷效果通常比編譯器更好。
2. 編譯程序和解釋程序的區別
編譯程序和解釋程序的區別是:
1、編譯是將源程序翻譯成可執行的目標代碼;解釋程序不產生目標代碼。
2、解釋程序可跨平台使用;編譯程序跨平台性不好。
3、解釋程序可以隨時修改,立刻生效;編譯程序不行。
4、解釋程序運行效率低;編譯程序執行速度快。
編譯是將源程序翻譯成可執行的目標代碼,翻譯與執行是分開的;而解釋是對源程序的翻譯與執行一次性完成,不生成可存儲的目標代碼。這只是表象,二者背後的最大區別是:對解釋執行而言,程序運行時的控制權在解釋器而不在用戶程序;對編譯執行而言,運行時的控制權在用戶程序。
解釋具有良好的動態特性和可移植性,比如在解釋執行時可以動態改變變數的類型、對程序進行修改以及在程序中插入良好的調試診斷信息等,而將解釋器移植到不同的系統上,則程序不用改動就可以在移植了解釋器的系統上運行。
同時解釋器也有很大的缺點,比如執行效率低,佔用空間大,因為不僅要給用戶程序分配空間,解釋器本身也佔用了寶貴的系統資源。
編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快。
而解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的。
3. 解釋和編譯有什麼區別
一、與計算機的交流方式不同
1、解釋程序不產生目標代碼,它逐條地取出源程序中的語句,邊解釋,邊執行;解釋器把源代碼文件邊解釋成機器語言邊交給CPU執行。
三、開發便捷性
1、解釋程序可以隨時修改,立刻生效,改完源代碼後,直接運行看效果
2、編譯程序每次修改源代碼,都要重新編譯,生成機器碼文件
四、運行速度
1、解釋程序運行效率低,所有的代碼均需經過解釋器邊解釋變執行,速度比編譯型慢很多
2、編譯程序執行速度快,因為你的程序代碼已經翻譯成了是計算機可以理解的機器語言。
4. 編譯和解釋的區別是什麼
1.定義區別
①編譯原理旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。
②匯編語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。
2.處理方式區別
①編譯過程與解釋挺像,區別就在於編譯是將所有的源代碼指令一次性成翻目標代碼並執行。
②匯編過程就是把匯編指令一對一地翻譯成01機器碼的過程。而採用這種處理方式的語言只有一類:匯編語言。
3.特點區別
①編譯語言的特點就是不需要解釋器的參與,所以運行比較快,但是編譯好的程序只能在當前平台運行,是個局限性。
②匯編語言是當今世界上歷史最早,應用最廣,功能最強大,運行速度最快的編程語言。但是匯編語言開發工期長,可讀性差,並且不能跨平台編程。
5. 編譯型語言和解釋型語言的區別
編譯型語言在程序執行之前,有一個單獨的編譯過程,將程序翻譯成機器語言就不用再進行翻譯了。
解釋型語言,是在運行的時候將程序翻譯成機器語言,所以運行速度相對於編C/C++ 等都是編譯型語言,而java,C#等都是解釋型語言。
雖然Java程序在運行之前也有一個編譯過程,但是並不是將程序編譯成機器語言,而是將它編譯成位元組碼(可以理解為一個中間語言)。
在運行的時候,由JVM將位元組碼再翻譯成機器語言。
註:腳本語言一般都有相應的腳本引擎來解釋執行。 他們一般需要解釋器才能運行。JAVASCRIPT,ASP,php,PERL,Nuva都是腳本語言。C/C++編譯、鏈接後,可形成獨立執行的exe文件。
編譯型語言:
編譯型語言最大的優勢之一就是其執行速度。用C/C++編寫的程序運行速度要比用Java編寫的相同程序快30%-70%。
編譯型程序比解釋型程序消耗的內存更少。
不利的一面——編譯器比解釋器要難寫得多。
編譯器在調試程序時提供不了多少幫助——有多少次在你的C語言代碼中遇到一個「空指針異常」時,需要花費好幾個小時來明確錯誤到底在代碼中的什麼位置。
可執行的編譯型代碼要比相同的解釋型代碼大許多。例如,C/C++的.exe文件要比同樣功能的Java的.class文件大很多。
編譯型程序是面向特定平台的因而是平台依賴的。
編譯型程序不支持代碼中實現安全性——例如,一個編譯型的程序可以訪問內存的任何區域,並且可以對你的PC做它想做的任何事情(大部分病毒是使用編譯型語言編寫的)
由於鬆散的安全性和平台依賴性,編譯型語言不太適合開發網際網路或者基於Web的應用。
解釋型語言提供了極佳的調試支持。一名Java程序員只需要幾分鍾就可以定位並修復一個「空指針異常」,因為Java運行環境不僅指明了異常的性質,而且給出了異常發生位置具體的行號和函數調用順序(著名的堆棧跟蹤信息)。這樣的便利是編譯型語言所無法提供的。
另一個優勢是解釋器比編譯器容易實現
解釋型語言最大的優勢之一是其平台獨立性
解釋型語言也可以保證高度的安全性——這是互聯網應用迫切需要的
中間語言代碼的大小比編譯型可執行代碼小很多
平台獨立性,以及嚴密的安全性是使解釋型語言成為適合互聯網和Web應用的理想語言的2個最重要的因素。
解釋型語言存在一些嚴重的缺點。解釋型應用佔用更多的內存和CPU資源。這是由於,為了運行解釋型語言編寫的程序,相關的解釋器必須首先運行。解釋器是復雜的,智能的,大量消耗資源的程序並且它們會佔用很多CPU周期和內存。
由於解釋型應用的decode-fetch-execute(解碼-抓取-執行)的周期,它們比編譯型程序慢很多。
解釋器也會做很多代碼優化,運行時安全性檢查;這些額外的步驟佔用了更多的資源並進一步降低了應用的運行速度。
解釋型語言:
6. 編譯器和解釋器的主要區別是什麼他們相對於對方各自的優點
解釋器
是
解釋執行
的源代碼,
編譯器
是將源代碼編譯成
目標代碼
他們最大的區別是程序運行時需要解釋器邊解釋邊執行,而編譯器則在運行時是完全不需要的
解釋器的優點是比較容易讓用戶實現自己跨平台的代碼,比如java,php等,同一套代碼可以在
幾乎所有的
操作系統上執行,而無需根據操作系統做修改;
編譯器的目的就是生成目標代碼再由連接器生成可執行的
機器碼
,這樣的話需要根據不同的操作系統編制代碼,雖然有像Qt這樣的源代碼級跨平台的編程工具庫,但在不同的平台上仍然需要重新編譯連接成可執行文件,但其執行效率要遠遠高於解釋運行的程序。
編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;
而解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的.
這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式)