計算機程式語言的種類
程式語言主要由以下幾種分類方法:
1、編譯型和解釋型
2、靜態語言和動態語言
3、強型別定義語言和弱型別定義語言
第一種劃分方法是,編譯型和解釋型:
之所以這麼劃分,是因為計算機不能直接理解高階語言,僅僅能直接理解機器語言(相對來說比較低階),所以必需要把高階語言翻譯成機器語言,計算機才能執行高階語言編寫的程式。翻譯的方式有兩種,一種叫做編譯,另一種叫做解釋。
編譯型:
編譯型語言和組合語言是一樣的,也是一個負責翻譯的程式來對我們的原始碼進行轉換,生成相應的可執行程式碼,這個過程稱為編譯(compile),負責編譯的程式稱為編譯器(compiler)。如果我們寫的程式程式碼都包含在一個原始檔中,那麼編譯之後就會直接生成一個可執行的檔案,我們就可以直接運行了。但是對於一個比較複雜的專案,為了方便管理,我們通常把程式碼分散在各個原始檔中,作為不同的模組來組織。這時編譯各個檔案時,就會生成目標檔案(object files),而不是前面所說的可執行檔案。一般一個原始檔的編譯都會對應一個目標檔案。這些目標檔案裡的內容基本上是可執行程式碼了,但對於整個專案來說,只是一部分,所以還不能直接執行。只有等待所有的原始檔都編譯完成,我們就可以把這些半成品的目標檔案打包成一個可執行檔案,這個工作由另一個程式完成,這個過程是把包含可執行程式碼的目標檔案連線裝配起來,所以又稱為連結(link),負責這個步驟的程式叫做連結程式(linker)。連結程式除了目標檔案之外,可能還有各種資源,如圖形檔案、聲音檔案等,還負責去除目標檔案之間的冗餘重複程式碼等,所以也很累。連結完成之後,一般就可以得到我們想要的可執行檔案了。
簡單來說,編譯型語言寫的程式執行之前,已經把程式編譯好了,比方exe檔案,以後要執行的話就不用又一次翻譯了。直接使用編譯的結果即可了(exe檔案),由於翻譯僅僅做了一次,執行時不須要翻譯,所以編譯型語言的程式執行效率高。
解釋型:
編譯型程式,是一次把所有的程式碼轉換成機器語言,然後寫成可執行檔案;而解釋型程式,是每執行到源程式的某一條指令,則會有一個稱之為解釋程式的外殼程式將原始碼轉換成二進位制程式碼以供執行,總而言之,就是不斷的解釋、執行、解釋、執行,所以,解釋型程式碼是離不開解釋程式的。解釋型程式中,由於程式總是以原始碼的形式出現,因此只要有相應的直譯器,移植幾乎不成問題。編譯型程式也可以移植,但是針對不同系統,必須分別重新編譯,對於複雜工程來說,非常耗費時間。但解釋型程式因為一邊解釋,一邊執行,因此速度比編譯型程式要慢上好多,幾百倍也不足為奇。
簡單來說,解釋性語言的程式在執行程式的時候才翻譯,邊執行邊翻譯。
總結:
編譯型由於速度快,因此對系統要求較低,開發作業系統、資料庫和大型應用等都使用它,比如C/C++、Pascal/Delphi、VB等都是編譯語言。而一些網頁尾本、伺服器指令碼和輔助開發介面等對速度要求不高,對不同系統平臺相容性有要求的一般使用解釋型語言,如Java、JavaScript、VBScript、Perl、Python等。
打個比方,有一本英文書你想看,但是你又不懂英語,於是乎請來一位資深翻譯。這位資深翻譯可以從頭到底給你一口氣全部翻譯完,然後把中文版的書交給你閱讀,這種就是編譯型的方式來處理。而這位資深翻譯可以翻譯一個章節後,你可以閱讀翻譯完的這個章節,之後這位資深翻譯繼續翻譯下面的章節,翻譯完畢後,你才能再讀接下去的章節,但是當你想回看之前的章節,那麼必須由這名翻譯再次翻譯一下這個你想再次看的章節,等待翻譯完畢後,你才能再次閱讀這個章節,這種就是解釋型的方式來處理。
第二種劃分方法是根據變數是否必須賦值來定義的,分為動態型別語言和靜態型別語言:
動態型別語言:
動態型別語言是指在執行期間採取做資料型別檢查的語言。也就是說,在用動態型別的語言程式設計時,永遠也不用給任何變數指定資料型別,該語言會在你第一次賦值給變數時,在內部將資料型別記錄下來。Python和Ruby就是一種典型的動態型別語言,其它的各種指令碼語言如VBScript也多少屬於動態型別語言。
靜態型別語言:
靜態型別語言剛好和動態型別語言相反,它的資料型別是在編譯期間去檢查的,也就是說在寫程式時,是需要宣告變數的資料型別的,如C/C++就是典型的例子,其它的還有C#、Java等。
第三種劃分方法是依據變數是否需要強制轉換來劃分的(這關係到程式語言的安全性和執行速度),分為強型別定義語言和弱型別定義語言:
強型別定義語言:
是指強制資料型別定義的語言。也就是說,一旦一個變數被指定了某個資料型別,如果不經過強制轉換,那麼它就是永遠這個資料型別了。比如說,如果定義了整型變數a,那麼程式就不會把a當做字串型別處理了。強型別定義語言是型別安全的語言。
弱型別定義語言:
資料型別可以被忽略的語言。一個變數可以被賦予不同資料型別的值。
總結:
強型別語言執行速度慢於弱型別語言,但是強型別定義語言更安全,Python是強型別定義語言。另外,一門語言是不是動態語言和是不是強型別定義語言沒有任何關係。
由此得出結論,Python是一門解釋型的動態強型別定義語言。