是否强力或轻柔地键入球拍(和打字球拍)?

no_*_*e44 5 racket

我意识到"强类型"和"轻柔类型"的定义是松散的,可以解释,但我还没有找到与无类型的Racket(我的理解意味着动态类型)和Typed Racket相关的明确定义.

再说一遍,我确定它不那么干燥,但至少我想了解更多关于哪个方向倾斜.我对此做的研究越多,我就越困惑,所以谢谢你们提前帮忙!

Joh*_*nts 8

回答这样的问题的一个问题是,人们对几乎所有这些术语的含义都持不同意见.所以...接下来是我的意见(虽然这是一个相当明智的,如果我自己这么说的话).

所有语言都在某些值上运行,并具有一些运行时行为.尝试向函数添加数字几乎在所有语言中都失败了.你可以称之为"类型系统",但它可能不是正确的术语.

什么是类型系统?这些天,我声称该术语通常指的是一个检查程序的系统,并静态地[*]推断该程序的属性.通常,如果它被称为类型系统,这意味着将"类型"附加到每个表达式,该表达式约束表达式可以计算的值的集合/类.请注意,此定义基本上使术语"动态类型"无意义.

注意巨大的漏洞:有一个"琐碎的类型系统",它只是将包含所有程序值的"类型"分配给每个表达式.所以,如果你愿意,你可以考虑任何静态类型的语言.或者,如果你愿意,"统一"(注意那里的"我").

好吧,直到黄铜钉.

球拍不是打字的.或者,如果您愿意,"动态键入"或"统一",甚至"无类型".

键入球拍类型.它有一个静态类型系统,可以为每个表达式分配一个类型.它的类型系统是"声音",这意味着程序的评估将符合类型系统的声明:如果Typed Racket(以下称TR)类型检查您的程序并将类型'Natural'分配给表达式,那么它肯定会评估为自然数(假设TR类型检查器或Racket运行时系统中没有错误).

Typed Racket具有许多不同寻常的特性,允许用TR编写的代码与Racket编写的代码互操作.其中最知名的是"发现打字",它允许一个TR程序处理类型,如(U Number String)(也就是,这是一个值,无论是数字或字符串)没有爆炸,如前面相似类型的系统一样.

然而,这有点与此无关:你的问题是关于Racket和TR,简单的答案是基本的Racket语言没有静态类型系统,TR也有.

定义术语"静态"的[*]超出了本文的范围:).