为什么大多数脚本语言都是松散输入的?

时间:2010-11-21 15:39:34

标签: programming-languages scripting-language

为什么大多数脚本语言都是松散类型的?例如

javascript,python等?

2 个答案:

答案 0 :(得分:13)

首先,您的术语存在一些问题。没有松散类型的语言,术语脚本语言也很模糊,最常见的是所谓的动态编程语言

弱打字强打字关于如何在不同类型之间进行严格区分(例如,如果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生成另一个数字列表中的数字列表。< / p>

尽管如此,编译器可以提前证明一切正常 - 任何支持的操作都是正式指定的。因此,我永远不会将Haskell称为脚本语言,尽管它可以达到相似的表达水平(如果不是更多!)。


总而言之,脚本语言动态类型,因为它允许您在不指定的情况下对正在运行的系统进行原型设计,但假设每一个涉及的操作存在,这是脚本语言的用途。

答案 1 :(得分:1)

我不太明白你的问题。除了PHP,VBScript,COMMAND.COM和Unix shell之外,我真的不能想到任何松散类型的脚本语言。

非松散类型的脚本语言的一些示例是Python,Ruby,Mondrian,JavaFXScript,PowerShell,Haskell,Scala,ELisp,Scheme,AutoLisp,Io,Ioke,Seph,Groovy,Fantom,Boo,Cobra,Guile, Slate,Smalltalk,Perl,...