編譯型語(yǔ)言、解釋型語(yǔ)言與腳本語(yǔ)言總結(jié)

編譯型語(yǔ)言

  • 編譯

    • 指用專(zhuān)用的編譯器,針對(duì)特定的操作平臺(tái)(操作系統(tǒng))將某種高級(jí)語(yǔ)言源代碼一次性翻譯成可被硬件平臺(tái)直接運(yùn)行的二進(jìn)制機(jī)器碼(具有操作數(shù),指令、及相應(yīng)的格式),
    • 編譯好的可執(zhí)行性文件(.exe),可在相對(duì)應(yīng)的平臺(tái)上運(yùn)行(移植性差,但運(yùn)行效率高)。
  • 鏈接
    有些程序編譯后,還需要把其他編譯好的,可能需要組裝兩個(gè)以上的目標(biāo)代碼生成最終的可執(zhí)行性文件,稱(chēng)為鏈接(可實(shí)現(xiàn)對(duì)低層次代碼的復(fù)用)。

  • 典型的編譯型語(yǔ)言有,我們非常熟悉的C語(yǔ)言、C++等。

  • Java語(yǔ)言是一門(mén)很特殊的語(yǔ)言,Java程序需要進(jìn)行編譯步驟,但并不會(huì)生成特定平臺(tái)的二進(jìn)制機(jī)器碼,它編譯后生成的是一種與平臺(tái)無(wú)關(guān)的字節(jié)碼文件(*.class)(移植性好的原因),這種字節(jié)碼自然不能被平臺(tái)直接執(zhí)行,運(yùn)行時(shí)需要由解釋器解釋成相應(yīng)平臺(tái)的二進(jìn)制機(jī)器碼文件;大多數(shù)人認(rèn)為Java是一種編譯型語(yǔ)言,但我們說(shuō)Java即是編譯型語(yǔ)言,也是解釋型語(yǔ)言也并沒(méi)有錯(cuò)。

解釋型語(yǔ)言

  • 指用專(zhuān)門(mén)解釋器對(duì)源程序逐行解釋成特定平臺(tái)的機(jī)器碼并立即執(zhí)行的語(yǔ)言;相當(dāng)于把編譯型語(yǔ)言的編譯鏈接過(guò)程混到一起同時(shí)完成的。

  • 解釋型語(yǔ)言執(zhí)行效率較低,且不能脫離解釋器運(yùn)行,但它的跨平臺(tái)型比較容易,只需提供特定解釋器即可。

  • 常見(jiàn)的解釋型語(yǔ)言有,筆者正在學(xué)習(xí)的Python(同時(shí)是腳本語(yǔ)言)與Ruby等。

腳本語(yǔ)言

  • 為了縮短傳統(tǒng)的編寫(xiě)-編譯-鏈接-運(yùn)行(edit-compile-link-run)過(guò)程而創(chuàng)建的計(jì)算機(jī)編程語(yǔ)言。

  • 特點(diǎn)是:程序代碼即是最終的執(zhí)行文件,只是這個(gè)過(guò)程需要解釋器的參與,所以說(shuō)腳本語(yǔ)言與解釋型語(yǔ)言有很大的聯(lián)系。腳本語(yǔ)言通常是被解釋執(zhí)行的,而且程序是文本文件。

  • 典型的腳本語(yǔ)言有,JavaScript,Python等。

區(qū)別

  1. 抽象的級(jí)別:這是最重要也是最明顯示的不同。腳本語(yǔ)言對(duì)程序員提供了更高級(jí)的抽象。這一點(diǎn)明顯表現(xiàn)在:在這種語(yǔ)言自身中,存在有高級(jí)的數(shù)據(jù)結(jié)構(gòu),如列表和字典結(jié)構(gòu),和對(duì)這種結(jié)構(gòu)簡(jiǎn)單方便的嵌套和操作。這樣可以創(chuàng)建非常成功的程序。

  2. 類(lèi)型定義:系統(tǒng)語(yǔ)言通常是強(qiáng)類(lèi)型和靜態(tài)類(lèi)型定義。這就意味著所有變量的類(lèi)型要在程序中指定,在編譯時(shí)檢查。相反地,腳本語(yǔ)言是最松散的類(lèi)型定義,完全沒(méi)有類(lèi)型聲明,并且在運(yùn)行時(shí)進(jìn)行動(dòng)態(tài)類(lèi)型檢查。

  3. 執(zhí)行:系統(tǒng)語(yǔ)言的特點(diǎn)是編譯的。程序被編譯成可執(zhí)行的二進(jìn)制。另一方面,腳本語(yǔ)言的特點(diǎn)是解釋?zhuān)簿褪?,指令被立即?zhí)行,不存在一個(gè)編譯的中間狀態(tài)。這就意味著腳本語(yǔ)言是交互式的(你可以在提示符下敲入命令,并且看到結(jié)果),這是另一個(gè)巨大的勝利。這樣完全將編譯過(guò)程從編輯-編譯-運(yùn)行循環(huán)中去掉了。

  4. 速度:以上三點(diǎn)是腳本語(yǔ)言一方面在速度與效率, 一方面在易用性與表示式的強(qiáng)大性之間進(jìn)行折衷的典型例子。這就使得腳本語(yǔ)言的執(zhí)行速度比系統(tǒng)語(yǔ)言慢一個(gè)數(shù)量級(jí)。這就是對(duì)腳本語(yǔ)言誹謗最多的方面。性能的降低不是真正的問(wèn)題,因?yàn)樗枷胧怯媚_本語(yǔ)言來(lái)組合組件,這些組件是用象C 這樣的快速系統(tǒng)語(yǔ)言來(lái)編寫(xiě)的。所以所有需要運(yùn)行快速的東西將因?yàn)槭怯每焖俚恼Z(yǔ)言實(shí)現(xiàn)的而運(yùn)行得快速。腳本語(yǔ)言只用于將東西綁在一起,并且這些通常不是性能的瓶頸( 或如果是,你需要重新檢查你的設(shè)計(jì))。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容