靜態(tài)類型語言
如果在編譯時(shí)知道變量的類型,則會(huì)靜態(tài)地輸入語言。對于某些語言,這意味著程序員必須指定每個(gè)變量的類型(例如:Java、C、C+);其他語言提供某種形式的類型推理,類型系統(tǒng)推導(dǎo)變量類型的能力(例如:OCaml、Haskell、Scala、Kotlin)
這里的主要優(yōu)點(diǎn)是編譯器可以完成所有類型的檢查,因此在非常早期階段就捕獲了許多瑣碎的bug。
例子:C,C+,Java,Rust,Go,Scala
動(dòng)態(tài)類型語言
如果類型與運(yùn)行時(shí)值相關(guān)聯(lián),而不是命名變量/字段/等,則該語言是動(dòng)態(tài)類型的。這意味著作為程序員,您可以更快地編寫,因?yàn)槟槐孛看沃付愋?除非使用靜態(tài)類型語言類型推理).
例子:Perl,Ruby,Python,PHP,JavaScript
大多數(shù)腳本語言都有這個(gè)特性,因?yàn)闊o論如何都沒有編譯器可以進(jìn)行靜態(tài)類型檢查,但是您可能會(huì)發(fā)現(xiàn)自己在搜索一個(gè)錯(cuò)誤,這是因?yàn)榻忉屍髡`解了變量的類型。幸運(yùn)的是,腳本往往很小,所以bug沒有那么多地方可以隱藏。
大多數(shù)動(dòng)態(tài)類型語言確實(shí)允許您提供類型信息,但不需要它。目前正在開發(fā)的一種語言,流氓,采用混合方法,允許在函數(shù)中進(jìn)行動(dòng)態(tài)類型,但對函數(shù)簽名強(qiáng)制靜態(tài)類型。