(动态,静态)(解释,编译)(强类型,弱类型)
生活随笔
收集整理的這篇文章主要介紹了
(动态,静态)(解释,编译)(强类型,弱类型)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 動(dòng)態(tài)語言和靜態(tài)語言通常我們所說的動(dòng)態(tài)語言、靜態(tài)語言是指動(dòng)態(tài)類型語言和靜態(tài)類型語言。1 動(dòng)態(tài)類型語言:動(dòng)態(tài)類型語言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言,也就是說,在用動(dòng)態(tài)類型的語言編程時(shí),永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語言會(huì)在你第一次賦值給變量時(shí),在內(nèi)部將數(shù)據(jù)類型記錄下來。Python和Ruby就是一種典型的動(dòng)態(tài)類型語言,其他的各種腳本語言如VBScript也多少屬于動(dòng)態(tài)類型語言。2 靜態(tài)類型語言:靜態(tài)類型語言與動(dòng)態(tài)類型語言剛好相反,它的數(shù)據(jù)類型是在編譯其間檢查的,也就是說在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型,C/C++是靜態(tài)類型語言的典型代表,其他的靜態(tài)類型語言還有C#、JAVA等。
對(duì)于動(dòng)態(tài)語言與靜態(tài)語言的區(qū)分,套用一句流行的話就是:Static typing when possible, dynamic typing when needed。2 強(qiáng)類型定義語言和弱類型定義語言1 強(qiáng)類型定義語言:強(qiáng)制數(shù)據(jù)類型定義的語言。也就是說,一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型,如果不經(jīng)過強(qiáng)制轉(zhuǎn)換,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類型了。舉個(gè)例子:如果你定義了一個(gè)整型變量a,那么程序根本不可能將a當(dāng)作字符串類型處理。強(qiáng)類型定義語言是類型安全的語言。2 弱類型定義語言:數(shù)據(jù)類型可以被忽略的語言。它與強(qiáng)類型定義語言相反, 一個(gè)變量可以賦不同數(shù)據(jù)類型的值。
強(qiáng)類型定義語言在速度上可能略遜色于弱類型定義語言,但是強(qiáng)類型定義語言帶來的嚴(yán)謹(jǐn)性能夠有效的避免許多錯(cuò)誤。另外,“這門語言是不是動(dòng)態(tài)語言”與“這門語言是否類型安全”之間是完全沒有聯(lián)系的!例如:Python是動(dòng)態(tài)語言,是強(qiáng)類型定義語言(類型安全的語言); VBScript是動(dòng)態(tài)語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態(tài)語言,是強(qiáng)類型定義語言(類型安全的語言)。 解釋性語言和編譯性語言的區(qū)別??
計(jì)算機(jī)不能直接理解高級(jí)語言,只能直接理解機(jī)器語言,所以必須要把高級(jí)語言翻譯成機(jī)器語言,計(jì)算機(jī)才能執(zhí)行高級(jí)語言編寫的程序。?
翻譯的方式有兩種,一個(gè)是編譯,一個(gè)是解釋。兩種方式只是翻譯的時(shí)間不同。?編譯性語言?
編譯型語言寫的程序執(zhí)行之前,需要一個(gè)專門的編譯過程,把程序編譯成為機(jī)器語言的文件,比如exe文件,以后要運(yùn)行的話就不用重新翻譯了,直接使用編譯的結(jié)果就行了(exe文件),因?yàn)榉g只做了一次,運(yùn)行時(shí)不需要翻譯,所以編譯型語言的程序執(zhí)行效率高。??
解釋性語言?解釋則不同,解釋性語言的程序不需要編譯,省了道工序,解釋性語言在運(yùn)行程序的時(shí)候才翻譯,比如解釋性java語言,專門有一個(gè)解釋器能夠直接執(zhí)行java程序,每個(gè)語句都是執(zhí)行的時(shí)候才翻譯。這樣解釋性語言每執(zhí)行一次就要翻譯一次,效率比較低。?
腳本語言?腳本語言是解釋性語言。腳本語言一般都有相應(yīng)的腳本引擎來解釋執(zhí)行。它們一般需要解釋器才能運(yùn)行。所以只要系統(tǒng)上有相應(yīng)語言的解釋程序就可以做到跨平臺(tái)。腳本語言是一種解釋性的語言,例如
vbscript,javascript,installshield?script等等,它不象c\c++等可以編譯成二進(jìn)制代碼,以可執(zhí)行文件的形式存在。?JAVA語言?java語言是解釋性語言。java很特殊,java程序也需要編譯,但是沒有直接編譯稱為機(jī)器語言,而是編譯稱為字節(jié)碼,然后用解釋方式執(zhí)行字節(jié)碼。Java既可以被編譯,也可以被解釋。通過編譯器,可以把Java程序翻譯成一種中間代碼?-?稱為字節(jié)碼?-?可以被Java解釋器解釋的獨(dú)立于平臺(tái)的代碼。通過解釋器,每條Java字節(jié)指令被分析,然后在計(jì)算機(jī)上運(yùn)行。只需編譯一次,程序運(yùn)行時(shí)解釋執(zhí)行。?Java字節(jié)碼使“寫一次,到處運(yùn)行”成為可能。可以在任何有Java編譯器的平臺(tái)上把Java程序編譯成字節(jié)碼。這個(gè)字節(jié)碼可以運(yùn)行在任何Java?VM上。例如,同一個(gè)Java程序可以運(yùn)行在WindowsNT、Solaris和Macintosh上。?編譯器與解釋器的區(qū)別?編譯型與解釋型,兩者各有利弊。前者由于程序執(zhí)行速度快,同等條件下對(duì)系統(tǒng)要求較低,因此像開發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫系統(tǒng)等時(shí)都采用它,像C/C++、Pascal/Object?Pascal(Delphi)等都是編譯語言,而一些網(wǎng)頁腳本、服務(wù)器腳本及輔助開發(fā)接口這樣的對(duì)速度要求不高、對(duì)不同系統(tǒng)平臺(tái)間的兼容性有一定要求的程序則通常使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB?等等。??編譯性語言?不如解釋性語言跨平臺(tái)性好??編譯性語言例如c語言:用c語言開發(fā)了程序后,需要通過編譯器把程序編譯成機(jī)器語言(即計(jì)算機(jī)識(shí)別的二進(jìn)制文件,因?yàn)椴煌牟僮飨到y(tǒng)計(jì)算機(jī)識(shí)別的二進(jìn)制文件是不同的),所以c語言程序進(jìn)行移植后,要重新編譯。(如windows編譯成ext文件,linux編譯成erp文件)。?解釋性語言,例如java語言,java程序首先通過編譯器編譯成class文件,如果在windows平臺(tái)上運(yùn)行,則通過windows平臺(tái)上的java虛擬機(jī)(VM)進(jìn)行解釋。如果運(yùn)行在linux平臺(tái)上,則通過linux平臺(tái)上的java虛擬機(jī)進(jìn)行解釋執(zhí)行。所以說能跨平臺(tái),前提是平臺(tái)上必須要有相匹配的java虛擬機(jī)。如果沒有java虛擬機(jī),則不能進(jìn)行跨平臺(tái)
?
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的(动态,静态)(解释,编译)(强类型,弱类型)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: The Code Commandment
- 下一篇: IPv4地址编码