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