2010-11-21 37 views
5

爲什麼大多數腳本語言都是鬆散類型的?例如爲什麼大多數腳本語言是鬆散類型的?

javascript,python等?

+0

我認爲如果這是一個社區維基,你會得到更好的答案(但是我認爲你現在不能發佈它;你可以用代表> 100)。這並不是真的有一個正確的答案。 – 2010-11-21 15:48:09

回答

1

我不太明白你的問題。除了PHP,VBScript,COMMAND.COM和Unix外殼,我無法真正想到任何鬆散類型的腳本語言。一些非鬆散類型的腳本語言的例子是Python,Ruby,Mondrian,JavaFXScript,PowerShell,Haskell,Scala,ELisp,Scheme,AutoLisp,Io,Ioke,Seph,Groovy,Fantom,Boo,Cobra,Guile ,Slate,Smalltalk,Perl,…

+0

Ren't Python和Perlo鬆散地鍵入? – nbrogi 2014-11-28 23:54:15

12

首先,您的術語存在一些問題。有沒有這樣的東西,如鬆散類型語言和術語腳本語言也很模糊,最通常指的是所謂的動態編程語言

弱鍵入有關如何嚴格是不同類型之間的分辨強類型(即,如果1 + "2"收率3或錯誤)。

而且有動態靜態類型,大約是類型信息確定 - 同時或之前運行。

那麼現在什麼是動態語言?解釋而不是編譯的語言? 當然不是,因爲語言運行的方式從來不是語言的固有特性,而是純粹的實現細節。事實上,可以有解釋者和編譯器來用於同一種語言。 Haskell有GHC和GHCi,即使C有Ch解釋器。

但是,那麼什麼是動態語言?我想通過如何與他們合作來定義他們。

在動態語言中,您喜歡快速爲您的程序創建原型,並讓它以某種方式工作。你不想做的是正式指定你的程序的行爲,你只是希望它的行爲像打算。

因此,如果你寫

foo = greatFunction(42) 
foo.run() 
腳本語言

,你會簡單地假設有一些greatFunction採取了許多會返回一些對象,你可以run。你不以任何方式證明這是編譯器 - 沒有預定義的類型,沒有IRunnable ...。這會自動讓你在的域名中動態輸入

但也有類型推斷也。類型推斷意味着在一個靜態類型的語言中,編譯器會自動找出你的類型。結果代碼可以非常簡潔,但仍然是靜態類型。以舉例

square list = map (\x -> x * x) list 

在Haskell。 Haskell提前計算出涉及的所有類型。我們有list是一個數字列表,map某些函數將某些其他函數應用於列表中的任何元素,並且square可生成另一個數字列表中的數字列表。

儘管如此,編譯器可以提前證明一切正常 - 任何支持的操作都是正式指定的。因此,我從來不會將Haskell稱爲腳本語言,儘管它可以達到類似的表現水平(如果不是更多!)。


因此,所有的一切,腳本語言動態類型因爲它允許您原型運行的系統,而無需指定,但假設參與每一個操作存在,這是使用什麼腳本語言對於。

相關問題