国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

解釋型語言和編譯型語言的區(qū)別

2019-11-09 17:19:24
字體:
供稿:網(wǎng)友
http://blog.csdn.net/zhu_xun/article/details/16921413解釋型語言和編譯型語言的區(qū)別首先,我們編程都是用的高級語言(寫匯編和機(jī)器語言的大牛們除外),計(jì)算機(jī)不能直接理解高級語言,只能理解和運(yùn)行機(jī)器語言,所以必須要把高級語言翻譯成機(jī)器語言,計(jì)算機(jī)才能運(yùn)行高級語言所編寫的程序。     說到翻譯,其實(shí)翻譯的方式有兩種,一個(gè)是編譯,一個(gè)是解釋。兩種方式只是翻譯的時(shí)間不同。     用編譯型語言寫的程序執(zhí)行之前,需要一個(gè)專門的編譯過程,通過編譯系統(tǒng)(不僅僅只是通過編譯器,編譯器只是編譯系統(tǒng)的一部分)把高級語言翻譯成機(jī)器語言(具體翻譯過程可以參看下圖),把源高級程序編譯成為機(jī)器語言文件,比如windows下的exe文件。以后就可以直接運(yùn)行而不需要編譯了,因?yàn)榉g只做了一次,運(yùn)行時(shí)不需要翻譯,所以編譯型語言的程序執(zhí)行效率高,但也不能一概而論,部分解釋型語言的解釋器通過在運(yùn)行時(shí)動(dòng)態(tài)優(yōu)化代碼,甚至能夠使解釋型語言的性能超過編譯型語言。       一個(gè)完整的編譯系統(tǒng)與 一個(gè)用C編寫的程序hello.c的編譯過程       解釋則不同,解釋型語言編寫的程序不需要編譯。解釋型語言在運(yùn)行的時(shí)候才翻譯,比如VB語言,在執(zhí)行的時(shí)候,專門有一個(gè)解釋器能夠?qū)B語言翻譯成機(jī)器語言,每個(gè)語句都是執(zhí)行的時(shí)候才翻譯。這樣解釋型語言每執(zhí)行一次就要翻譯一次,效率比較低。     編譯型與解釋型,兩者各有利弊。前者由于程序執(zhí)行速度快,同等條件下對系統(tǒng)要求較低,因此像開發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫系統(tǒng)等時(shí)都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是編譯語言,而一些網(wǎng)頁腳本、服務(wù)器腳本及輔助開發(fā)接口這樣的對速度要求不高、對不同系統(tǒng)平臺間的兼容性有一定要求的程序則通常使用解釋性語言,如javaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。     但隨著硬件的升級和設(shè)計(jì)思想的變革,編譯型和解釋型語言越來越笼統(tǒng),主要體現(xiàn)在一些新興的高級語言上,而解釋型語言的自身特點(diǎn)也使得編譯器廠商愿意花費(fèi)更多成本來優(yōu)化解釋器,解釋型語言性能超過編譯型語言也是必然的。      說到這里,我們有必要說一下java與C#。解釋型語言和編譯型語言的區(qū)別      JAVA語言是一種編譯型-解釋型語言,同時(shí)具備編譯特性和解釋特性(其實(shí),確切的說java就是解釋型語言,其所謂的編譯過程只是將.java文件編程成平臺無關(guān)的字節(jié)碼.class文件,并不是向C一樣編譯成可執(zhí)行的機(jī)器語言,在此請讀者注意Java中所謂的“編譯”和傳統(tǒng)的“編譯”的區(qū)別)。作為編譯型語言,JAVA程序要被統(tǒng)一編譯成字節(jié)碼文件——文件后綴是class。此種文件在java中又稱為類文件。java類文件不能再計(jì)算機(jī)上直接執(zhí)行,它需要被java虛擬機(jī)翻譯成本地的機(jī)器碼后才能執(zhí)行,而java虛擬機(jī)的翻譯過程則是解釋性的。java字節(jié)碼文件首先被加載到計(jì)算機(jī)內(nèi)存中,然后讀出一條指令,翻譯一條指令,執(zhí)行一條指令,該過程被稱為java語言的解釋執(zhí)行,是由java虛擬機(jī)完成的。而在現(xiàn)實(shí)中,java開發(fā)工具JDK提供了兩個(gè)很重要的命令來完成上面的編譯和解釋(翻譯)過程。兩個(gè)命令分別是javac.exe和java.exe,前者加載java類文件,并逐步對字節(jié)碼文件進(jìn)行編譯,而另一個(gè)命令則對應(yīng)了java語言的解釋(javac.exe)過程。在次序上,java語言是要先進(jìn)行編譯的過程,接著解釋執(zhí)行。   C#語言是編譯型語言,但其“編譯”過程比較特殊,具體說明如下:   C#程序在第一次運(yùn)行的時(shí)候,會(huì)依賴其.NET Frameworker平臺,編譯成IL中間碼),然后由JIT compiler翻譯成本地的機(jī)器碼執(zhí)行。從第二次在運(yùn)行相同的程序,則不需要再執(zhí)行以上編譯和翻譯過程,而是直接運(yùn)行第一次翻譯成的機(jī)器碼。所以對于C#來說,通常第一次運(yùn)行時(shí)間會(huì)很長,但從第二次開始,程序的執(zhí)行時(shí)間會(huì)快很多。   那么,C#為什么要進(jìn)行兩次“編譯”呢?其實(shí),微軟想通過動(dòng)態(tài)編譯(由JIT compiler工具實(shí)現(xiàn))來實(shí)現(xiàn)其程序運(yùn)行的最優(yōu)化。如果代碼在運(yùn)行前進(jìn)行動(dòng)態(tài)編譯運(yùn)行,那么JIT compiler可以很智能的根據(jù)你本地機(jī)器的硬件條件來進(jìn)行優(yōu)化,比如使用更好的register,機(jī)器指令等等,而不是像原來那樣,build一份程序針對所有硬件的機(jī)器跑,沒有充分利用各個(gè)機(jī)器的條件。   另外,還有我們經(jīng)常用到的腳本語言,比如Javascript、Shell等語言都是腳本語言,本質(zhì)上來說,腳本語言就是解釋型語言。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 六盘水市| 射洪县| 洛浦县| 廉江市| 宁国市| 武定县| 鄂尔多斯市| 克拉玛依市| 长宁区| 东阿县| 铜山县| 长海县| 大同县| 镇安县| 桐柏县| 江山市| 湟中县| 吴川市| 和田市| 涿州市| 丹阳市| 恩平市| 崇州市| 文化| 金寨县| 全州县| 静海县| 宜丰县| 石渠县| 望城县| 崇仁县| 察哈| 沾益县| 德保县| 云龙县| 黎城县| 灯塔市| 鄱阳县| 上思县| 开封县| 彭州市|