1. 程式人生 > 其它 >編譯型語言和解釋型語言解釋說明

編譯型語言和解釋型語言解釋說明

編譯型語言和解釋型語言的定義
很多資料上都會說:“python是解釋型語言,因為python通常是解釋執行的”,“C是編譯型語言,因為C是編譯執行的”,“Java是解釋型語言,因為Java是有JVM解釋執行的”以上這些說法其實都是都是偽命題

舉例說明:
如果第一次聽到“解釋”和”編譯“這兩個概念,就來舉個形象點的例子:

解釋型語言
(1)把讓計算機執行一段程式碼,比喻成讓外國廚師做一道菜,用解釋的方式執行一段程式碼,就好比是讓國外的廚師做一道水煮魚就需要吧中文菜譜裡的第一個步驟念給翻譯, 然後翻譯再把這一步驟翻譯成英文給廚師聽,


等英國廚師吧第一個步驟做完,你再把第二個步驟念給翻譯,翻譯再把第二個步驟翻譯成英文念給廚師聽,廚師再開始做第二個步驟。


這裡的翻譯者就是指:
計算機執行程式碼的直譯器

編譯型語言
(2)把讓國外廚師做的中國菜整個菜譜預先交給翻譯,讓翻譯寫出完整的一
份英文水煮魚菜譜,


這樣以後再讓英國廚師做水煮魚時就可以直接把翻譯好的英文菜譜交給英國廚師,就可以照著英文菜譜很快的把水煮魚做出來。


這裡的翻譯者就是指:
編譯器

總結
描述完以上舉例說明後,會發現同樣一個菜譜(也就是一段程式碼),既可以解釋執行也可以編譯執行所以再在哪裡看到說某個語言是編譯型還是解釋型這完全是很荒謬的說法,就如同有人告訴你水煮魚是一道“編譯型的菜”,宮保雞丁是一道“解釋型的菜”

靜態語言和動態語言的區別

基本概念
動態型別語言:在執行期進行型別檢查的語言,也就是在編寫程式碼的時候可以不指定變數的資料型別,比如Python和Ruby
靜態型別語言:它的資料型別是在編譯期進行檢查的,也就是說變數在使用前要宣告變數的資料型別,這樣的好處是把型別檢查放在編譯期,提前檢查可能出現的型別錯誤,典型代表C/C++和Java
強型別語言,一個變數不經過強制轉換,它永遠是這個資料型別,不允許隱式的型別轉換。舉個例子:如果你定義了一個double型別變數a,不經過強制型別轉換那麼程式int b = a無法通過編譯。典型代表是Java。
弱型別語言:它與強型別語言定義相反,允許編譯器進行隱式的型別轉換,典型代表C/C++。

總結

上一個圖就很清晰了