編譯型語(yǔ)言
使用專門的編譯器(類似于Windows下的Visual Studio)、針對(duì)特定平臺(tái)(操作系統(tǒng))將某種高級(jí)語(yǔ)言源代碼一次性“翻譯”成該平臺(tái)硬件執(zhí)行的機(jī)器碼(包括機(jī)器指令和操作數(shù)),并包裝成該平臺(tái)所能識(shí)別的可執(zhí)行性程序(.exe)的格式,這個(gè)轉(zhuǎn)換過(guò)程稱為編譯。
編譯生成的可執(zhí)行程序可以以脫離開發(fā)環(huán)境,在特定的平臺(tái)上獨(dú)立運(yùn)行。有些程序在編譯結(jié)束之后,還可能需要對(duì)其他編譯好的目標(biāo)代碼進(jìn)行鏈接,即組裝兩個(gè)以上的目標(biāo)代碼模塊生成最終的可執(zhí)行程序,通過(guò)這種方式實(shí)現(xiàn)低層次的代碼復(fù)用。
編譯型語(yǔ)言的代碼是一次編譯,循環(huán)使用。換句話說(shuō)就是前人種樹,后人乘涼。
C、C++、Objective -C 等都屬于編譯型語(yǔ)言。
解釋型語(yǔ)言
在程序運(yùn)行前將源程序預(yù)編譯成中間語(yǔ)言,然后再由解釋器執(zhí)行中間語(yǔ)言。
每次執(zhí)行解釋型語(yǔ)言的程序都需要進(jìn)行一次編譯,因此解釋型語(yǔ)言的程序運(yùn)行效率通常較低,而且它不能脫離解釋器獨(dú)立運(yùn)行。C#、
PHP、Python、Java等都是解釋型語(yǔ)言。
編譯型語(yǔ)言
優(yōu)勢(shì)
1、編譯型語(yǔ)言最大的優(yōu)勢(shì)之一就是其執(zhí)行速度。用C/C++編寫的程序運(yùn)行速度要比用Java編寫的相同程序快30%-70%。
2、編譯型程序比解釋型程序消耗的內(nèi)存更少。
劣勢(shì)
1、不利的一面——編譯器比解釋器要難寫得多
2、編譯器在調(diào)試程序時(shí)提供不了多少幫助——有多少次在你的C語(yǔ)言代碼中遇到一個(gè)“空指針異常”時(shí),需要花費(fèi)好幾個(gè)小時(shí)來(lái)明確錯(cuò)誤到底在代碼中的什么位置。
3、可執(zhí)行的編譯型代碼要比相同的解釋型代碼大許多。例如,C/C++的.exe文件要比同樣功能的Java的.class文件大很多。
4、編譯型程序是面向特定平臺(tái)的因而是平臺(tái)依賴的。
5、編譯型程序不支持代碼中實(shí)現(xiàn)安全性——例如,一個(gè)編譯型的程序可以訪問(wèn)內(nèi)存的任何區(qū)域,并且可以對(duì)你的PC做它想做的任何事情(大部分病毒是使用編譯型語(yǔ)言編寫的)。
6、由于松散的安全性和平臺(tái)依賴性,編譯型語(yǔ)言不太適合開發(fā)因特網(wǎng)或者基于Web的應(yīng)用。
解釋型語(yǔ)言
優(yōu)勢(shì)
1、極佳的調(diào)試支持。一名PHP程序員只需要幾分鐘就可以定位并修復(fù)一個(gè)“空指針異?!?,因?yàn)镻HP運(yùn)行環(huán)境不僅指明了異常的性質(zhì),而且給出了異常發(fā)生位置具體的行號(hào)和函數(shù)調(diào)用順序(著名的堆棧跟蹤信息)。這樣的便利是編譯型語(yǔ)言所無(wú)法提供的。
2、解釋器比編譯器容易實(shí)現(xiàn)
3、極佳的平臺(tái)獨(dú)立性
4、高度的安全性——這是互聯(lián)網(wǎng)應(yīng)用迫切需要的
5、中間語(yǔ)言代碼的大小比編譯型可執(zhí)行代碼小很多
劣勢(shì)
占用