欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

編譯和解釋的區(qū)別是什么

 更新時(shí)間:2016年12月07日 10:09:56   作者:petercao  
最近發(fā)現(xiàn)有很多網(wǎng)友都提出一個(gè)問(wèn)題:程序的編譯與解釋有什么區(qū)別?這篇文章就為大家介紹了編譯和解釋的區(qū)別,需要的朋友可以參考下

編譯和解釋的區(qū)別是什么?

編譯器是把源程序的每一條語(yǔ)句都編譯成機(jī)器語(yǔ)言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語(yǔ)言來(lái)運(yùn)行此程序,速度很快;

而解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語(yǔ)言給計(jì)算機(jī)來(lái)執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.

這是因?yàn)橛?jì)算機(jī)不能直接認(rèn)識(shí)并執(zhí)行我們寫(xiě)的語(yǔ)句,它只能認(rèn)識(shí)機(jī)器語(yǔ)言(是二進(jìn)制的形式) 

一、低級(jí)語(yǔ)言與高級(jí)語(yǔ)言

最初的計(jì)算機(jī)程序都是用0和1的序列表示的,程序員直接使用的是機(jī)器指令,無(wú)需翻譯,從紙帶打孔輸入即可執(zhí)行得到結(jié)果。后來(lái)為了方便記憶,就將用0、1序列表示的機(jī)器指令都用符號(hào)助記,這些與機(jī)器指令一一對(duì)應(yīng)的助記符就成了匯編指令,從而誕生了匯編語(yǔ)言。無(wú)論是機(jī)器指令還是匯編指令都是面向機(jī)器的,統(tǒng)稱(chēng)為低級(jí)語(yǔ)言。因?yàn)槭轻槍?duì)特定機(jī)器的機(jī)器指令的助記符,所以匯編語(yǔ)言是無(wú)法獨(dú)立于機(jī)器(特定的CPU體系結(jié)構(gòu))的。但匯編語(yǔ)言也是要經(jīng)過(guò)翻譯成機(jī)器指令才能執(zhí)行的,所以也有將運(yùn)行在一種機(jī)器上的匯編語(yǔ)言翻譯成運(yùn)行在另一種機(jī)器上的機(jī)器指令的方法,那就是交叉匯編技術(shù)。

高級(jí)語(yǔ)言是從人類(lèi)的邏輯思維角度出發(fā)的計(jì)算機(jī)語(yǔ)言,抽象程度大大提高,需要經(jīng)過(guò)編譯成特定機(jī)器上的目標(biāo)代碼才能執(zhí)行,一條高級(jí)語(yǔ)言的語(yǔ)句往往需要若干條機(jī)器指令來(lái)完成。高級(jí)語(yǔ)言獨(dú)立于機(jī)器的特性是靠編譯器為不同機(jī)器生成不同的目標(biāo)代碼(或機(jī)器指令)來(lái)實(shí)現(xiàn)的。那具體的說(shuō),要將高級(jí)語(yǔ)言編譯到什么程度呢,這又跟編譯的技術(shù)有關(guān)了,既可以編譯成直接可執(zhí)行的目標(biāo)代碼,也可以編譯成一種中間表示,然后拿到不同的機(jī)器和系統(tǒng)上去執(zhí)行,這種情況通常又需要支撐環(huán)境,比如解釋器或虛擬機(jī)的支持,Java程序編譯成bytecode,再由不同平臺(tái)上的虛擬機(jī)執(zhí)行就是很好的例子。所以,說(shuō)高級(jí)語(yǔ)言不依賴(lài)于機(jī)器,是指在不同的機(jī)器或平臺(tái)上高級(jí)語(yǔ)言的程序本身不變,而通過(guò)編譯器編譯得到的目標(biāo)代碼去適應(yīng)不同的機(jī)器。從這個(gè)意義上來(lái)說(shuō),通過(guò)交叉匯編,一些匯編程序也可以獲得不同機(jī)器之間的可移植性,但這種途徑獲得的移植性遠(yuǎn)遠(yuǎn)不如高級(jí)語(yǔ)言來(lái)的方便和實(shí)用性大。

二、編譯與解釋

編譯是將源程序翻譯成可執(zhí)行的目標(biāo)代碼,翻譯與執(zhí)行是分開(kāi)的;而解釋是對(duì)源程序的翻譯與執(zhí)行一次性完成,不生成可存儲(chǔ)的目標(biāo)代碼。這只是表象,二者背后的最大區(qū)別是:對(duì)解釋執(zhí)行而言,程序運(yùn)行時(shí)的控制權(quán)在解釋器而不在用戶(hù)程序;對(duì)編譯執(zhí)行而言,運(yùn)行時(shí)的控制權(quán)在用戶(hù)程序。

解釋具有良好的動(dòng)態(tài)特性和可移植性,比如在解釋執(zhí)行時(shí)可以動(dòng)態(tài)改變變量的類(lèi)型、對(duì)程序進(jìn)行修改以及在程序中插入良好的調(diào)試診斷信息等,而將解釋器移植到不同的系統(tǒng)上,則程序不用改動(dòng)就可以在移植了解釋器的系統(tǒng)上運(yùn)行。同時(shí)解釋器也有很大的缺點(diǎn),比如執(zhí)行效率低,占用空間大,因?yàn)椴粌H要給用戶(hù)程序分配空間,解釋器本身也占用了寶貴的系統(tǒng)資源。

編譯器是把源程序的每一條語(yǔ)句都編譯成機(jī)器語(yǔ)言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語(yǔ)言來(lái)運(yùn)行此程序,速度很快;
而解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語(yǔ)言給計(jì)算機(jī)來(lái)執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.

  • 編輯:用編輯軟件(EDIT.EXE或記事本)形成源程序(.ASM),如:LX.ASM;
  • 匯編:用匯編程序(MASM.EXE)對(duì)源程序進(jìn)行匯編,形成目標(biāo)文件(.OBJ),格式如下:MASM LX.ASM;
  • 連接:用連接程序(LINK.EXE)對(duì)目標(biāo)程序進(jìn)行連接,形成可執(zhí)行文件(.EXE),格式如下:LINK LX.OBJ;
  • 執(zhí)行:如果結(jié)果在屏幕在顯示,則直接執(zhí)行可執(zhí)行文件。
  • 調(diào)試:用調(diào)試程序(DEBUG.EXE)對(duì)可執(zhí)行文件進(jìn)行調(diào)試,格式如下:DEBUG LX.EXE

1. 在具體計(jì)算機(jī)上實(shí)現(xiàn)一種語(yǔ)言,首先要確定的是表示該語(yǔ)言語(yǔ)義解釋的虛擬計(jì)算機(jī),一個(gè)關(guān)鍵的問(wèn)題是程序執(zhí)行時(shí)的基本表示是實(shí)際計(jì)算機(jī)上的機(jī)器語(yǔ)言還是虛擬機(jī)的機(jī)器語(yǔ)言。這個(gè)問(wèn)題決定了語(yǔ)言的實(shí)現(xiàn)。根據(jù)這個(gè)問(wèn)題的回答,可以將程序設(shè)計(jì)語(yǔ)言劃分為兩大類(lèi):編譯型語(yǔ)言和解釋型語(yǔ)言。

2. 由編譯型語(yǔ)言編寫(xiě)的源程序需要經(jīng)過(guò)編譯、匯編和鏈接才能輸出目標(biāo)代碼,然后機(jī)器執(zhí)行目標(biāo)代碼,得出運(yùn)行結(jié)果,目標(biāo)代碼由機(jī)器指令組成,一般不能獨(dú)立運(yùn)行,因?yàn)樵闯绦蛑锌赡苁褂昧四承﹨R編程序不能解釋引用的庫(kù)函數(shù),而庫(kù)函數(shù)代碼又不在源程序中,此時(shí)還需要鏈接程序完成外部引用和目標(biāo)模塊調(diào)用的鏈接任務(wù),最后輸出可執(zhí)行代碼。C、C++、Fortran、Pascal、Ada都是編譯實(shí)現(xiàn)的。

3. 解釋型語(yǔ)言的實(shí)現(xiàn)中,翻譯器并不產(chǎn)生目標(biāo)機(jī)器代碼,而是產(chǎn)生易于執(zhí)行的中間代碼,這種中間代碼與機(jī)器代碼是不同的,中間代碼的解釋是由軟件支持的,不能直接使用硬件,軟件解釋器通常會(huì)導(dǎo)致執(zhí)行效率較低。用解釋型語(yǔ)言編寫(xiě)的程序是由另一個(gè)可以理解中間代碼的解釋程序執(zhí)行的。與編譯程序不同的是,解釋程序的任務(wù)是逐一將源程序的語(yǔ)句解釋成可執(zhí)行的機(jī)器指令,不需要將源程序翻譯成目標(biāo)代碼后再執(zhí)行。對(duì)于解釋型Basic語(yǔ)言,需要一個(gè)專(zhuān)門(mén)的解釋器解釋執(zhí)行 Basic程序,每條語(yǔ)言只有在執(zhí)行才被翻譯。這種解釋型語(yǔ)言每執(zhí)行一次就翻譯一次,因而效率低下。

4. Java很特殊,Java程序也需要編譯,但是沒(méi)有直接編譯稱(chēng)為機(jī)器語(yǔ)言,而是編譯稱(chēng)為字節(jié)碼,然后在Java虛擬機(jī)上用解釋方式執(zhí)行字節(jié)碼。Python 的也采用了類(lèi)似Java的編譯模式,先將Python程序編譯成Python字節(jié)碼,然后由一個(gè)專(zhuān)門(mén)的Python字節(jié)碼解釋器負(fù)責(zé)解釋執(zhí)行字節(jié)碼。

   (Java虛擬機(jī)對(duì)字節(jié)碼的執(zhí)行相當(dāng)于模擬一個(gè)cpu,而ruby1.8--在虛擬機(jī)還未出現(xiàn)前--是通過(guò)解釋成語(yǔ)法樹(shù)執(zhí)行。)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vscode添加GIT和SVN的方法示例

    vscode添加GIT和SVN的方法示例

    這篇文章主要介紹了vscode添加GIT和SVN的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 編程界主流腳本編程語(yǔ)言的比較和選擇

    編程界主流腳本編程語(yǔ)言的比較和選擇

    這篇文章主要介紹了編程界主流腳本編程語(yǔ)言的比較和選擇,本文分析了Unix/Linux Shell、Python/Jython、Ruby/JRuby、Perl、Groovy等腳本語(yǔ)言的優(yōu)缺點(diǎn),幫助您快速了解各大語(yǔ)言,需要的朋友可以參考下
    2015-05-05
  • 使用git命令上傳代碼

    使用git命令上傳代碼

    這篇文章介紹了使用git命令上傳代碼的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • 字符集和字符編碼(Charset & Encoding)

    字符集和字符編碼(Charset & Encoding)

    相信大家一定碰到過(guò),打開(kāi)某個(gè)網(wǎng)頁(yè),卻顯示一堆像亂碼,如"бЇЯАзЪСЯ"、"�????????"?還記得HTTP中的Accept-Charset、Accept-Encoding、Accept-Language、Content-Encoding、Content-Language等消息頭字段?這些就是接下來(lái)我們要探討的
    2012-04-04
  • 關(guān)于Interlij 無(wú)法使用中文輸入法的解決方法(適用于Interlij全家桶 Linux環(huán)境)

    關(guān)于Interlij 無(wú)法使用中文輸入法的解決方法(適用于Interlij全家桶 Linux環(huán)境)

    這篇文章主要介紹了關(guān)于Interlij 無(wú)法使用中文輸入法的解決方法(適用于Interlij全家桶 Linux環(huán)境),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • resty更新header控制api版本數(shù)據(jù)源讀寫(xiě)分離

    resty更新header控制api版本數(shù)據(jù)源讀寫(xiě)分離

    這篇文章主要介紹了resty的1.2.0-SNAPSHOT版本更新,可以通過(guò)header控制api的版本實(shí)現(xiàn)數(shù)據(jù)源讀寫(xiě)分離,有需要的朋友可以借鑒參考下,希望能夠有所幫助<BR>,
    2022-03-03
  • 使用selenium自動(dòng)控制瀏覽器找不到Chromedriver問(wèn)題

    使用selenium自動(dòng)控制瀏覽器找不到Chromedriver問(wèn)題

    這篇文章主要介紹了ChromeDriver安裝與配置問(wèn)題的解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 詳解HBase表的數(shù)據(jù)模型

    詳解HBase表的數(shù)據(jù)模型

    HBase 是一種列存儲(chǔ)模式與鍵值對(duì)存儲(chǔ)模式結(jié)合的 NoSQL 數(shù)據(jù)庫(kù),它具有靈活的數(shù)據(jù)模型,不僅可以基于鍵進(jìn)行快速查詢(xún),還可以實(shí)現(xiàn)基于值、列名等的全文遍歷和檢索,下面給大家介紹HBase表的數(shù)據(jù)模型,感興趣的朋友一起看看吧
    2022-05-05
  • Emscripten在Windows10下的安裝和配置

    Emscripten在Windows10下的安裝和配置

    這篇文章主要介紹了Emscripten在Windows10下的安裝和配置,Emscripten 是一個(gè)完整的 WebAssembly開(kāi)源編譯器工具鏈,使用Emscripten可以參考平臺(tái)說(shuō)明,感興趣的朋友一起看看吧
    2022-05-05
  • Webstorm開(kāi)發(fā)工具使用教程詳解

    Webstorm開(kāi)發(fā)工具使用教程詳解

    這篇文章主要為大家詳細(xì)介紹了Webstorm使用教程的使用教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09

最新評(píng)論