gpt4 book ai didi

programming-languages - 为什么大多数脚本语言都是松散类型的?

转载 作者:行者123 更新时间:2023-12-04 16:49:25 24 4
gpt4 key购买 nike

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

javascript、python等?

最佳答案

首先,您的术语存在一些问题。没有松散类型语言这样的东西,脚本语言这个术语也很模糊,通常指的是所谓的动态编程语言。

弱类型 强类型 关于区分不同类型的严格程度(即如果 1 + "2" 产生 3 或错误)。

还有动态静态类型 ,这与确定类型信息的时间有关 - 在运行时或运行之前。

那么现在,什么是动态语言?一种解释而不是编译的语言? 肯定不是 ,因为语言的运行方式从来都不是该语言的固有特征,而是纯粹的实现细节。事实上,对于同一种语言,可以有解释器和编译器。 Haskell 有 GHC 和 GHCi,甚至 C 也有 Ch 解释器。

但是,什么是动态语言?我想通过一个人如何与他们合作来定义他们。

在动态语言中,您喜欢快速制作程序原型(prototype)并以某种方式使其工作。你不想做的是正式指定 您的程序的行为,您只希望它的行为符合预期。

因此,如果你写

foo = greatFunction(42)
foo.run()

在脚本语言中,您将简单地假设有一些 greatFunction取一个返回某个对象的数字,您可以 run .您不会以任何方式为编译器证明这一点 - 没有预先确定的类型,没有 IRunnable ... .这会自动让您进入动态类型的领域。

但是有 类型推断 也。类型推断意味着在 静态类型 语言,编译器会自动为您找出类型。生成的代码可以非常简洁,但仍然是静态类型的。举个例子
square list = map (\x -> x * x) list

在 haskell 。 Haskell 会提前计算出这里涉及的所有类型。我们有 list作为数字列表, map将某些其他功能应用于列表的任何元素的某些功能和 square从另一个数字列表中生成一个数字列表。

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

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

关于programming-languages - 为什么大多数脚本语言都是松散类型的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4238682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com