編程語言主要由以下幾種分類方法:
1、編譯型和解釋型
2、靜態(tài)語言和動態(tài)語言
3、強(qiáng)類型定義語言和弱類型定義語言
第一種劃分方法是,編譯型和解釋型:
之所以這么劃分,是因為計算機(jī)不能直接理解高級語言,僅僅能直接理解機(jī)器語言(相對來說比較低級),所以必需要把高級語言翻譯成機(jī)器語言,計算機(jī)才能運(yùn)行高級語言編寫的程序。翻譯的方式有兩種,一種叫做編譯,另一種叫做解釋。
編譯型:
編譯型語言和匯編語言是一樣的,也是一個負(fù)責(zé)翻譯的程序來對我們的源碼進(jìn)行轉(zhuǎn)換,生成相應(yīng)的可執(zhí)行代碼,這個過程稱為編譯(compile),負(fù)責(zé)編譯的程序稱為編譯器(compiler)。如果我們寫的程序代碼都包含在一個源文件中,那么編譯之后就會直接生成一個可執(zhí)行的文件,我們就可以直接運(yùn)行了。但是對于一個比較復(fù)雜的項目,為了方便管理,我們通常把代碼分散在各個源文件中,作為不同的模塊來組織。這時編譯各個文件時,就會生成目標(biāo)文件(object files),而不是前面所說的可執(zhí)行文件。一般一個源文件的編譯都會對應(yīng)一個目標(biāo)文件。這些目標(biāo)文件里的內(nèi)容基本上是可執(zhí)行代碼了,但對于整個項目來說,只是一部分,所以還不能直接運(yùn)行。只有等待所有的源文件都編譯完成,我們就可以把這些半成品的目標(biāo)文件打包成一個可執(zhí)行文件,這個工作由另一個程序完成,這個過程是把包含可執(zhí)行代碼的目標(biāo)文件連接裝配起來,所以又稱為鏈接(link),負(fù)責(zé)這個步驟的程序叫做鏈接程序(linker)。鏈接程序除了目標(biāo)文件之外,可能還有各種資源,如圖形文件、聲音文件等,還負(fù)責(zé)去除目標(biāo)文件之間的冗余重復(fù)代碼等,所以也很累。鏈接完成之后,一般就可以得到我們想要的可執(zhí)行文件了。
簡單來說,編譯型語言寫的程序執(zhí)行之前,已經(jīng)把程序編譯好了,比方exe文件,以后要執(zhí)行的話就不用又一次翻譯了。直接使用編譯的結(jié)果即可了(exe文件),由于翻譯僅僅做了一次,執(zhí)行時不須要翻譯,所以編譯型語言的程序執(zhí)行效率高。
解釋型:
編譯型程序,是一次把所有的代碼轉(zhuǎn)換成機(jī)器語言,然后寫成可執(zhí)行文件;而解釋型程序,是每執(zhí)行到源程序的某一條指令,則會有一個稱之為解釋程序的外殼程序?qū)⒃创a轉(zhuǎn)換成二進(jìn)制代碼以供執(zhí)行,總而言之,就是不斷的解釋、執(zhí)行、解釋、執(zhí)行,所以,解釋型代碼是離不開解釋程序的。解釋型程序中,由于程序總是以源代碼的形式出現(xiàn),因此只要有相應(yīng)的解釋器,移植幾乎不成問題。編譯型程序也可以移植,但是針對不同系統(tǒng),必須分別重新編譯,對于復(fù)雜工程來說,非常耗費(fèi)時間。但解釋型程序因為一邊解釋,一邊執(zhí)行,因此速度比編譯型程序要慢上好多,幾百倍也不足為奇。
簡單來說,解釋性語言的程序在執(zhí)行程序的時候才翻譯,邊執(zhí)行邊翻譯。
總結(jié):
編譯型由于速度快,因此對系統(tǒng)要求較低,開發(fā)操作系統(tǒng)、數(shù)據(jù)庫和大型應(yīng)用等都使用它,比如C/C++、Pascal/Delphi、VB等都是編譯語言。而一些網(wǎng)頁腳本、服務(wù)器腳本和輔助開發(fā)接口等對速度要求不高,對不同系統(tǒng)平臺兼容性有要求的一般使用解釋型語言,如Java、JavaScript、VBScript、Perl、Python等。
打個比方,有一本英文書你想看,但是你又不懂英語,于是乎請來一位資深翻譯。這位資深翻譯可以從頭到底給你一口氣全部翻譯完,然后把中文版的書交給你閱讀,這種就是編譯型的方式來處理。而這位資深翻譯可以翻譯一個章節(jié)后,你可以閱讀翻譯完的這個章節(jié),之后這位資深翻譯繼續(xù)翻譯下面的章節(jié),翻譯完畢后,你才能再讀接下去的章節(jié),但是當(dāng)你想回看之前的章節(jié),那么必須由這名翻譯再次翻譯一下這個你想再次看的章節(jié),等待翻譯完畢后,你才能再次閱讀這個章節(jié),這種就是解釋型的方式來處理。
第二種劃分方法是根據(jù)變量是否必須賦值來定義的,分為動態(tài)類型語言和靜態(tài)類型語言:
動態(tài)類型語言:
動態(tài)類型語言是指在運(yùn)行期間采取做數(shù)據(jù)類型檢查的語言。也就是說,在用動態(tài)類型的語言編程時,永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語言會在你第一次賦值給變量時,在內(nèi)部將數(shù)據(jù)類型記錄下來。Python和Ruby就是一種典型的動態(tài)類型語言,其它的各種腳本語言如VBScript也多少屬于動態(tài)類型語言。
靜態(tài)類型語言:
靜態(tài)類型語言剛好和動態(tài)類型語言相反,它的數(shù)據(jù)類型是在編譯期間去檢查的,也就是說在寫程序時,是需要聲明變量的數(shù)據(jù)類型的,如C/C++就是典型的例子,其它的還有C#、Java等。
第三種劃分方法是依據(jù)變量是否需要強(qiáng)制轉(zhuǎn)換來劃分的(這關(guān)系到程序語言的安全性和運(yùn)行速度),分為強(qiáng)類型定義語言和弱類型定義語言:
強(qiáng)類型定義語言:
是指強(qiáng)制數(shù)據(jù)類型定義的語言。也就是說,一旦一個變量被指定了某個數(shù)據(jù)類型,如果不經(jīng)過強(qiáng)制轉(zhuǎn)換,那么它就是永遠(yuǎn)這個數(shù)據(jù)類型了。比如說,如果定義了整型變量a,那么程序就不會把a(bǔ)當(dāng)做字符串類型處理了。強(qiáng)類型定義語言是類型安全的語言。
弱類型定義語言:
數(shù)據(jù)類型可以被忽略的語言。一個變量可以被賦予不同數(shù)據(jù)類型的值。
總結(jié):
強(qiáng)類型語言運(yùn)行速度慢于弱類型語言,但是強(qiáng)類型定義語言更安全,Python是強(qiáng)類型定義語言。另外,一門語言是不是動態(tài)語言和是不是強(qiáng)類型定義語言沒有任何關(guān)系。
由此得出結(jié)論,Python是一門解釋型的動態(tài)強(qiáng)類型定義語言。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。