概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】

昭昭明月無比發表於2020-09-24

概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】

一、編譯型語言與解釋型語言

計算機只能夠直接理解機器語言,不能夠理解高階語言,所以若想執行高階語言編寫的程式,都必須轉換成計算機語言才可以被執行,計算機語言就是機器語言,將高階語言轉換成機器語言的方式有兩種,一種是編譯,另外一種是解釋,所以高階語言也被分為編譯型語言和解釋型語言。

這兩者的主要區別在於編譯和執行的順序不同。

編譯型語言是指將源程式進行編譯後再執行,執行速度較快,會直接生成一個可以直接執行的機器語言的檔案,例如在原始檔下會生成一個exe檔案,這樣在下次執行的時候就不用編譯可以直接使用編譯結果,因為只需編譯一次,以後執行時不需要編譯,所以編譯型語言執行效率高,但其只能在特定平臺進行程式執行,一般無法移植到特定平臺。

解釋型語言是在執行期間編譯,不需要進行事先編譯,可以直接通過平臺提供的相應直譯器將原始碼解釋成機器碼並立即執行,即可執行該程式,解釋型語言每次執行都要編譯一次,因而效率較低,但是其跨平臺效能較好,程式移植較為方便,可以在不同的平臺執行。

現有的C、C++、Objective等都屬於編譯型語言,Python等屬於解釋型語言。

參考:什麼是編譯型語言和解釋型語言

二、動態型別語言與靜態型別語言

動態型別語言和靜態型別語言主要是針對於資料型別的檢查,兩者對於資料型別的定義順序不同。

動態型別語言是指在執行期間進行資料型別檢查,這意味著在使用動態型別語言進行編譯的時候,不需要給變數提前指定資料型別,動態型別語言會變數第一次賦值時,自動記錄資料型別,這種語言對於資料的使用較為方便,可以在需要的時候再進行定義,較為自由。

靜態型別語言是指在編譯期間進行資料檢查,然後再進行執行,這意味著使用靜態型別語言進行編寫程式的時候,就需要宣告所有的資料型別,否則就會出錯,這種資料型別執行速度較快,較為穩定,在大型專案時,為了可控,更多選用靜態型別語言。

現有的C、C++、Java、Delphi、C#等都屬於靜態型別語言,Python、Ruby、Perl等都屬於動態型別語言。

參考:動態型別語言語言與靜態型別語言

三、強型別語言與弱型別語言

強型別語言和弱型別語言是針對於型別定義來說的,兩者關於變數的型別定義的強制性不同。

強型別語言指的是強制型別定義的語言,要求變數的使用要嚴格符合定義,所有變數都必須先定義後使用,如果一個變數被指定了某個資料型別,如果不經過強制轉換,它的資料型別則不會被改變。java、.NET、C++等都屬於強型別語言。例如被定義為int的型別資料,只有經過轉換,才可以視為其他型別。

弱型別語言指的是不強制型別定義的語言,資料型別可以被忽略,一個變數可以賦給不同的資料型別的值。vb,php等就屬於弱型別語言。
參考:強型別和弱型別語言有什麼不同

總結

編譯型語言和解釋性語言主要區別在於編譯順序的不同,動態型別語言和靜態型別語言主要區別在於對於資料型別的定義順序的不同,強型別語言和弱型別語言主要區別在於對於變數的資料型別的定義的不同。

相關文章