我正在阅读一个幻灯片,上面写着“JavaScript 是无类型的”。这与我的想法相矛盾,所以我开始挖掘并尝试了解更多信息。
每个答案JavaScript 是一种无类型语言吗? https://stackoverflow.com/questions/964910/is-javascript-an-untyped-language说 JavaScript 是not非类型化并提供了我熟悉且满意的各种形式的静态、动态、强类型和弱类型的示例..所以这不是正确的选择。
所以我问了 JavaScript 的创始人 Brendan Eich,他说:
学术类型使用“无类型”来表示“无静态类型”。他们足够聪明,能够看到值有类型(废话!)。背景很重要。
以学术为中心的计算机科学人士是否使用“无类型”作为“动态类型”的同义词(这是有效的吗?)还是我遗漏了更深层次的东西?我同意布伦丹的观点,即背景很重要,但任何解释的引用都会很棒,因为我目前的“推荐”书籍并没有在这个主题上发挥作用。
我想确定这一点,这样我就可以提高我的理解,因为即使维基百科也没有提到这种替代用法(无论如何,我可以找到)。如果我错了,我不想搞乱使用这个术语,也不想在将来质疑这个术语的使用:-)
(我还看到一位顶级 Smalltalker 说 Smalltalk 也是“无类型的”,所以它不是一次性的,这就是我开始这个任务的原因!:-))
是的,这是学术文献中的标准做法。要理解它,需要知道“类型”的概念是在 20 世纪 30 年代在 lambda 演算的背景下发明的(事实上,甚至更早,在集合论的背景下)。从那时起,计算逻辑的一个完整分支出现了,被称为“类型理论”。编程语言理论就是建立在这些基础之上的。在所有这些数学背景中,“类型”具有特定的、既定的含义。
术语“动态类型”是很晚才发明的——与“类型”一词的常见数学用法相比,这是一个术语上的矛盾。
例如,这是本杰明·皮尔斯在他的标准教科书中使用的“类型系统”的定义类型和编程语言 http://www.cis.upenn.edu/~bcpierce/tapl/index.html:
类型系统是一种易于处理的语法方法,用于证明不存在
通过根据以下方式对短语进行分类来控制某些程序行为
他们计算的各种值。
他还评论道:
有时会明确地添加“静态”一词——我们说的是
例如,“静态类型编程语言”——以区分
我们在这里考虑的各种编译时分析
在诸如Scheme(Sussman)等语言中发现的动态或潜在类型
和斯蒂尔,1975;凯尔西、克林格和里斯,1998;戴布维格,1996),
其中运行时类型标签用于区分不同类型的
堆中的结构。像“动态类型”这样的术语可以说是
用词不当,可能应该用“动态检查”来代替,
但用法是标准的。
大多数在该领域工作的人似乎都同意这一观点。
请注意,这确实not意味着“无类型”和“动态类型”是同义词。相反,后者是前者特定情况的一个(技术上误导性的)名称。
PS:FWIW,我碰巧既是类型系统的学术研究员,又是 JavaScript 的非学术实现者,所以我必须忍受这种分裂。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)