編譯語言和解釋語言html
一、編譯語言:緩存
須要經過編譯器(compiler)將源代碼編譯成機器碼,以後才能執行的語言。函數
通常需通過編譯,連接兩個步驟:post
編譯:把原代碼編譯成機器碼性能
連接:把各個模塊和依賴庫串起來生成可執行文件。優化
優勢: 編譯器通常會有預編譯的過程對代碼進行優化。由於編譯只作一次,運行時不須要編譯,因此編譯型語言的程序執行效率高。能夠脫離語言環境獨立運行。url
缺點: 編譯以後若是須要修改就須要整個模塊從新編譯。編譯的時候根據對應的環境生成機器碼,不一樣的操做系統之間移植會有問題,須要根據運行的操做系統環境編譯不一樣的可執行文件。操作系統
表明語言: C 、C++, Pascal、Object-C,Swift.net
二、解釋型語言翻譯
解釋性語言的程序不須要編譯,相比編譯型語言省了道工序,解釋性語言在運行程序的時候纔開始逐行翻譯。
優勢:
有良好的平臺兼容性,在任何環境中均可以運行,前提示安裝瞭解釋器(虛擬機)。
靈活,修改代碼的時候直接修改就能夠,能夠快速部署,不用停機維護。
缺點: 每次運行的時候都要解釋一遍,性能上不如編譯語言
表明語言: JavaScript,Python,Erlang,PHP,Perl,Ruby
三、混合語言
既然編譯型和解釋型各有缺點就會有人想把兩種類型整合起來,取其精華取其糟粕。就出現了半編譯型語言。
好比C#。C#在編譯的時候不是直接編譯成機器碼而是中間碼,.Net平臺提供了中間語言運行庫運行中間碼,中間語言運行庫相似於Java虛擬機。.net在編譯成IL代碼後,保存在dll中,首次運行時,由JIT在編譯成機器碼緩存在內存中,下次直接執行。
Java生成字節碼,再在Java虛擬機中解釋執行。
嚴格來講混合語言屬於解釋性語言。C#更接近編譯型語言。
動態語言和靜態語言
一、動態語言
是一類在運行時能夠改變其結構的語言: 例如新的函數、對象、甚至代碼能夠被引進,已有的函數能夠被刪除或其它結構的變化。通俗點說就是在運行代碼時能夠根據某些條件改變自身結構。
主要的動態語言: Object-C,C#, JavaScript,PHP,Python, Erlang。
二、靜態語言
與動態語言相對應的,運行的時候結構不可改變就是靜態語言。
主要的靜態語言: Java、C、C++
參考: