資源描述:
《動態(tài)語言和靜態(tài)語言比較》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、動態(tài)語言和靜態(tài)語言有三個名詞容易混淆:1.DynamicProgrammingLanguage(動態(tài)語言或動態(tài)編程語言)2.DynamicallyTypedLanguage(動態(tài)類型語言)3.StaticallyTypedLanguage(靜態(tài)類型語言)FantasySoft在他文章中所提到的動態(tài)語言與靜態(tài)語言實際上指的就是動態(tài)類型語言與靜態(tài)類型語言。動態(tài)語言,準確地說,是指程序在運行時可以改變其結構:新的函數(shù)可以被引進,已有的函數(shù)可以被刪除等在結構上的變化。比如眾所周知的ECMAScript(JavaScript)便是一個動態(tài)語言。除
2、此之外如Ruby、Python等也都屬于動態(tài)語言,而C、C++等語言則不屬于動態(tài)語言。所謂的動態(tài)類型語言,意思就是類型的檢查是在運行時做的,比如如下代碼是不是合法的要到運行時才判斷(注意是運行時的類型判斷):defsum(a,b):returna+b而靜態(tài)類型語言的類型判斷是在運行前判斷(如編譯階段),比如C#就是一個靜態(tài)類型語言,靜態(tài)類型語言為了達到多態(tài)會采取一些類型鑒別手段,如繼承、接口,而動態(tài)類型語言卻不需要,所以一般動態(tài)語言都會采用dynamictyping,常出現(xiàn)于腳本語言中。(idior不知道這能不能回答你對動態(tài)語言多態(tài)的疑
3、問^_^)這里我需要明確說明一點,那就是,是不是動態(tài)類型語言與這門語言是不是類型安全的完全不相干的,不要將它們聯(lián)系在一起!靜態(tài)類型語言的主要優(yōu)點在于其結構非常規(guī)范,便于調試,方便類型安全;缺點是為此需要寫更多的類型相關代碼,導致不便于閱讀、不清晰明了。動態(tài)類型語言的優(yōu)點在于方便閱讀,不需要寫非常多的類型相關的代碼;缺點自然就是不方便調試,命名不規(guī)范時會造成讀不懂,不利于理解等。順便說一下,現(xiàn)在有這樣一種趨勢,那就是合并動態(tài)類型與靜態(tài)類型在一種語言中,這樣可以在必要的時候取長補短,Boo就是一個很好的試驗性例子。^_^最后說一下Boo,B
4、oo是一個靜態(tài)類型語言,雖然用ducktyping可以模擬dynamictyping,但是duck并不支持所有類型的操作替代,所以即使完全使用ducktyping也不能達到dynamictyping。就像FantasySoft所述,TypeInference不是動態(tài)類型語言的特性,所以支持TypeInference不代表這門語言就是dynamicallytyped。再特地為Ninputer這個VB的fans說一下VB.NET^_^,VB.NET是dynamicallytyped語言。1.動態(tài)語言DynamicallyTypedLangu
5、age例如:ECMAScript(JavaScript)、Ruby、Python、VBScript、php也叫動態(tài)類型定義語言與靜態(tài)類型定義相反,一種在執(zhí)行期間才去發(fā)現(xiàn)數(shù)據(jù)類型的語言,動態(tài)語言是指程序在運行時可以改變其結構:新的函數(shù)可以被引進,已有的函數(shù)可以被刪除等在結構上的變化。動態(tài)語言的類型檢查是在運行時做的。它的優(yōu)點是方便閱讀,不需要寫非常多的類型相關的代碼;缺點是不方便調試,命名不規(guī)范時會造成讀不懂,不利于理解等。目前java平臺下的動態(tài)語言有Groovy、nice、BeanShell、Jython、JRuby、Rhino(Ja
6、vaScript)、Jacl(TCL)、Bistro(SmallTalk)、Kawa(Lisp/Schema),真是越來越多了。java下這么多的動態(tài)語言建議選擇Groovy,感覺血統(tǒng)較為正宗,兼容Java的語法,java程序員學習起來較為容易,上手較快。2.靜態(tài)語言StaticallyTypedLanguage例如:C、C++、Java也叫靜態(tài)類型定義語言。即一種在編譯時,數(shù)據(jù)類型是固定的語言。大多數(shù)靜態(tài)類型定義語言強制這一點,它要求你在使用所有變量之前要聲明它們的數(shù)據(jù)類型。在使用數(shù)據(jù)之前,我們必須首先定義數(shù)據(jù)類型,這些數(shù)據(jù)類型包括i
7、nt,float,double等等。就相當于在使用它們之前,首先要為它們分配好內存空間。靜態(tài)類型語言的主要優(yōu)點在于其結構非常規(guī)范,便于調試,方便類型安全;缺點是為此需要寫更多的類型相關代碼,導致不便于閱讀、不清晰明了。3.強類型定義語言一種總是強制類型定義的語言。Java和Python是強制類型定義的。如果你有一個整數(shù),如果不顯示地進行轉換,你不能將其視為一個字符串4.弱類型定義語言一種類型可以被忽略的語言,與強類型定義相反。VBScript是弱類型定義的。在VBScript中,可以將字符串'12'和整數(shù)3進行連接得到字符串'123',
8、然后可以把它看成整數(shù)123,而不需要顯示轉換。5.腳本語言腳本語言代表一套與系統(tǒng)程序設計語言不同的協(xié)定。它們犧牲執(zhí)行速度和與系統(tǒng)程序設計語言相關的類型長度而提供更高的編程創(chuàng)作力和軟件重用。腳本語言更適合在聯(lián)