一、動態語言和靜態語言
通常我們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。
1動態類型語言:是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。
Python和Ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬于動態類型語言。
2 靜態類型語言:靜態類型語言的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變量的數據類型。C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。
對于動態語言與靜態語言的區分,套用一句流行的話就是:Static typing when possible, dynamictyping when needed。
二、強類型定義語言和弱類型定義語言
1強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,如果不經過強制轉換,那么它就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變量a,那么程序根本不可能將a當作字符串類型處理。強類型定義語言是類型安全的語言。
2弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反,一個變量可以賦不同數據類型的值。
強類型定義語言在速度上可能略遜色于弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否類型安全”之間是完全沒有聯系的!
例如:Python是動態語言,是強類型定義語言(類型安全的語言);
VBScript是動態語言,是弱類型定義語言(類型不安全的語言);
JAVA是靜態語言,是強類型定義語言(類型安全的語言)。
三、靜態語言的優勢到底在哪?
強類型語言是指需要進行變量/對象類型聲明的語言,一般情況下需要編譯執行。例如C/C++/Java/C#
弱類型語言是指不需要進行變量/對象類型聲明的語言,一般情況下不需要編譯(但也有編譯型的)。例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/UnixShell等等。
像Java或者C#這樣強類型的準靜態語言在實現復雜的業務邏輯、開發大型商業系統、以及那些生命周期很長的應用中也有著非常強的優勢
引用
觀點一:靜態類型語言因為類型強制聲明,所以IDE可以做到很好的代碼感知能力,因為有IDE的撐腰,所以開發大型系統,復雜系統比較有保障。
對于像Java來說,IDEA/Eclipse確實在代碼感知能力上面已經非常強了,這無疑能夠增加對大型系統復雜系統的掌控能力。但是除了Java擁有這么強的IDE武器之外,似乎其他語言從來沒有這么強的IDE。C#的VisualStudio在GUI開發方面和Wizard方面很強,但是代碼感知能力上和Eclipse差的不是一點半點。至于VisualC++根本就是一個編譯器而已,羞于提及Visual這個字眼。更不要說那么多C/C++開發人員都是操起vi吭哧吭哧寫了幾十萬行代碼呢。特別是像LinuxKernel這種幾百萬行代碼,也就是用vi寫出來的阿,夠復雜,夠大型,夠長生命周期的吧。
引用
觀點二:靜態語言相對比較封閉的特點,使得第三方開發包對代碼的侵害性可以降到很低。動態語言在這點上表現的就比較差,我想大家都有過從網上下載某個JS包,然后放到項目代碼里發生沖突的經歷
出處:http://blog.csdn.net/leisure55/article/details/4508315#0-tsina-1-57768-397232819ff9a47a7b7e80a40613cfe1