高級(jí)編程語(yǔ)言可以分為兩大類,如下:
1. 編譯型:C、C++、Pascal等;
2. 解釋型:Basic、JavaScript、Python等。
1. 編譯型語(yǔ)言
編譯型語(yǔ)言在程序執(zhí)行之前有一個(gè)專門(mén)的編譯過(guò)程,編譯器會(huì)把程序編譯成針對(duì)不同CPU類型的可執(zhí)行文件,之后再由機(jī)器運(yùn)行這個(gè)可執(zhí)行文件。運(yùn)行時(shí)不再需要重新翻譯,直接使用編譯的結(jié)果就行。編譯型語(yǔ)言的工作原理類似于“翻譯書(shū)籍”。
在同一平臺(tái)(操作系統(tǒng))上,編譯型語(yǔ)言可以一次編譯,無(wú)限次運(yùn)行。只要在首次執(zhí)行前編譯生成相應(yīng)的可執(zhí)行文件,以后每次運(yùn)行時(shí)直接運(yùn)行這個(gè)可執(zhí)行文件即可,因此其運(yùn)行效率高于解釋型語(yǔ)言。
但針對(duì)不同平臺(tái)(操作系統(tǒng)),要生成的可執(zhí)行文件卻并不相同,因?yàn)椴煌脚_(tái)支持的函數(shù)、類型、變量等可能都不同。所以編譯型語(yǔ)言寫(xiě)出來(lái)的代碼,要想在不同類型的操作系統(tǒng)上運(yùn)行,必須經(jīng)歷多次不同的編譯,故難以實(shí)現(xiàn)在不同操作系統(tǒng)間隨意地切換,可移植性較差。
2. 解釋型語(yǔ)言
解釋型語(yǔ)言則是一邊轉(zhuǎn)換一邊執(zhí)行,不會(huì)把源代碼生成可執(zhí)行的文件。而是會(huì)把源碼翻譯成中間代碼,再由解釋器對(duì)中間代碼進(jìn)行解釋運(yùn)行,每執(zhí)行一次都要翻譯一次。解釋型語(yǔ)言的工作原理類似于“同聲傳譯”。
解釋型語(yǔ)言寫(xiě)出的代碼,每次運(yùn)行時(shí)都要重新轉(zhuǎn)換源代碼。會(huì)有一個(gè)解釋器根據(jù)操作系統(tǒng)的不同,將源代碼轉(zhuǎn)換成不同的機(jī)器碼。所以相同的源代碼,可以實(shí)現(xiàn)在不同的平臺(tái)上運(yùn)行,即“一次編寫(xiě),到處運(yùn)行”。但解釋型語(yǔ)言每次執(zhí)行時(shí)都要重新轉(zhuǎn)換源代碼,在效率上天生低于編譯型語(yǔ)言。
總之,編譯型和解釋型語(yǔ)言各有其優(yōu)缺點(diǎn)!
3. Java編程語(yǔ)言特點(diǎn)
而我們的java編程語(yǔ)言,確切地來(lái)說(shuō),既不是編譯型語(yǔ)言,也不是解釋型語(yǔ)言,而是結(jié)合了以上兩種語(yǔ)言類型的優(yōu)點(diǎn)。Java會(huì)先對(duì)源代碼進(jìn)行編譯,再將編譯后的字節(jié)碼文件解釋執(zhí)行!