編譯型語(yǔ)言:
首先將源代碼編譯生成機(jī)器語(yǔ)言,再由機(jī)器運(yùn)行機(jī)器碼(二進(jìn)制)。像C/C++等都是編譯型語(yǔ)言。
程序在執(zhí)行之前需要一個(gè)專門的編譯過程,把程序編譯成 為機(jī)器語(yǔ)言的文件,運(yùn)行時(shí)不需要重新翻譯,直接使用編譯的結(jié)果就行了。程序執(zhí)行效率高,依賴編譯器,跨平臺(tái)性差些。如C、C++、Delphi等.
解釋型語(yǔ)言:
解釋性語(yǔ)言編寫的程序不進(jìn)行預(yù)先編譯,以文本方式存儲(chǔ)程序代碼。在發(fā)布程序時(shí),看起來省了道編譯工序。但是,在運(yùn)行程序的時(shí)候,解釋性語(yǔ)言必須先解釋再運(yùn)行。
編譯程序:
編譯型語(yǔ)言寫的程序執(zhí)行之前,需要一個(gè)專門的編譯過程,把程序編譯成為機(jī)器語(yǔ)言的文件,比如exe文件,以后要運(yùn)行的話就不用重新翻譯了,直接使用編譯的結(jié)果就行了(exe文件),因?yàn)榉g只做了一次,運(yùn)行時(shí)不需要翻譯,所以編譯型語(yǔ)言的程序執(zhí)行效率高。
編譯語(yǔ)言和解釋型語(yǔ)言的區(qū)別:
解釋性語(yǔ)言在運(yùn)行程序的時(shí)候才翻譯,比如解釋性basic語(yǔ)言,專門有一個(gè)解釋器能夠直接執(zhí)行basic程序,每個(gè)語(yǔ)句都是執(zhí)行的時(shí)候才翻譯。這樣解釋性語(yǔ)言每執(zhí)行一次就要翻譯一次,效率比較低。
編譯型語(yǔ)言和解釋型語(yǔ)言的利弊:
前者由于程序執(zhí)行速度快,同等條件下對(duì)系統(tǒng)要求較低,因此像開發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫(kù)系統(tǒng)等時(shí)都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是編譯語(yǔ)言,而一些網(wǎng)頁(yè)腳本、服務(wù)器腳本及輔助開發(fā)接口這樣的對(duì)速度要求不高、對(duì)不同系統(tǒng)平臺(tái)間的兼容性有一定要求的程序則通常使用解釋性語(yǔ)言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
編譯型語(yǔ)言不如解釋型語(yǔ)言跨平臺(tái)好:
編譯性語(yǔ)言例如c語(yǔ)言:用c語(yǔ)言開發(fā)了程序后,需要通過編譯器把程序編譯成機(jī)器語(yǔ)言(即計(jì)算機(jī)識(shí)別的二進(jìn)制文件,因?yàn)椴煌牟僮飨到y(tǒng)計(jì)算機(jī)識(shí)別的二進(jìn)制文件是不同的),所以c語(yǔ)言程序進(jìn)行移植后,要重新編譯。(如windows編譯成ext文件,linux編譯成erp文件)。 [3]
解釋性語(yǔ)言,例如java語(yǔ)言,java程序首先通過編譯器編譯成class文件,如果在windows平臺(tái)上運(yùn)行,則通過windows平臺(tái)上的java虛擬機(jī)(VM)進(jìn)行解釋。如果運(yùn)行在linux平臺(tái)上,則通過linux平臺(tái)上的java虛擬機(jī)進(jìn)行解釋執(zhí)行。所以說能跨平臺(tái),前提是平臺(tái)上必須要有相匹配的java虛擬機(jī)。如果沒有java虛擬機(jī),則不能進(jìn)行跨平臺(tái)。[3]
解釋型語(yǔ)言
解釋性語(yǔ)言編寫的程序不進(jìn)行預(yù)先編譯,以文本方式存儲(chǔ)程序代碼。在發(fā)布程序時(shí),看起來省了道編譯工序。但是,在運(yùn)行程序的時(shí)候,解釋性語(yǔ)言必須先解釋再運(yùn)行。比如解釋性Basic語(yǔ)言,其專用的解釋器在執(zhí)行Basic程序時(shí),會(huì)逐條讀取解釋每個(gè)語(yǔ)句,這個(gè)其實(shí)就是一個(gè)編譯過程,然后再執(zhí)行。一般來說,現(xiàn)有的解釋性語(yǔ)言都是采用的逐行解釋一句,執(zhí)行一句這樣的方式來構(gòu)建的。這樣解釋性語(yǔ)言每執(zhí)行一次就要翻譯一次,效率比較低。