計(jì)算機(jī)程序語(yǔ)言按程序的執(zhí)行方式可分為編譯型語(yǔ)言和解釋性語(yǔ)言球散。
編譯型語(yǔ)言是指使用專(zhuān)用的編譯器七芭,針對(duì)某操作系統(tǒng)將高級(jí)語(yǔ)言源代碼一次性地翻譯成可被該系統(tǒng)硬件執(zhí)行的機(jī)器碼(包括機(jī)器指令和操作數(shù))略荡,并包裝成該系統(tǒng)所能識(shí)別的可執(zhí)行程序的格式掷伙。 可執(zhí)行程序可脫離開(kāi)發(fā)環(huán)境企蹭,在該系統(tǒng)上獨(dú)立運(yùn)行亦渗。
解釋型語(yǔ)言是指使用專(zhuān)門(mén)的解釋器直接對(duì)源程序逐行解釋成特定系統(tǒng)的機(jī)器碼并可立即執(zhí)行的語(yǔ)言挖诸。
C/C++是編譯型語(yǔ)言。編譯過(guò)程如下:
在windows上最終生成PE文件(.exe)央碟,在Linux上生成ELF文件税灌。
可分別在各自系統(tǒng)直接執(zhí)行均函,但不能跨系統(tǒng)執(zhí)行。
而且同一份代碼由于操作系統(tǒng)的不同菱涤,以及一些類(lèi)庫(kù)和規(guī)范不同苞也,有可能無(wú)法跨平臺(tái)編譯。
Java是半編譯型粘秆,半解釋性語(yǔ)言如迟。編譯執(zhí)行過(guò)程如下:
Java 編譯器(javac)先將java源程序編譯成Java字節(jié)碼(.class), JVM負(fù)責(zé)解釋執(zhí)行字節(jié)碼文件攻走。
字節(jié)碼文件具有平臺(tái)無(wú)關(guān)性殷勘,只面向JVM。
JVM是Java程序跨平臺(tái)的關(guān)鍵部分昔搂。 不同系統(tǒng)有不同的JVM, 相同的Java字節(jié)碼通過(guò)不同的JVM解釋成不同系統(tǒng)上可執(zhí)行的指令玲销,并執(zhí)行。