【发布时间】:2012-03-03 13:57:58
【问题描述】:
我打算将此作为评论添加到我之前关于类型理论的问题中,但我觉得它可能值得自己阐述:
如果你有一个动态类型系统,你给每个对象添加一个“类型”成员,并在对对象执行函数之前验证这个“类型”是一个特定的值,这与静态类型有什么不同? (除了它是运行时而不是编译时的事实)。
【问题讨论】:
我打算将此作为评论添加到我之前关于类型理论的问题中,但我觉得它可能值得自己阐述:
如果你有一个动态类型系统,你给每个对象添加一个“类型”成员,并在对对象执行函数之前验证这个“类型”是一个特定的值,这与静态类型有什么不同? (除了它是运行时而不是编译时的事实)。
【问题讨论】:
静态类型发生在编译时,而不是运行时!而这种差异是必不可少的!
请参阅 B.Pierce 的书 Types and Programming Languages 了解更多信息。
【讨论】:
从技术上讲,实际上是相反的:“动态类型”语言是静态类型语言的一种特殊情况,即只有一种类型(在数学意义上)。这至少是类型系统社区中许多人的观点。
关于静态与动态检查的编辑:只能动态检查本地属性,而需要某种全局知识的属性不能。考虑一些属性,例如某些东西是唯一的、没有别名的东西、没有竞争条件的计算。一个合适的静态类型系统可以验证这些属性,因为它能够在被检查的表达式的上下文中建立某些不变量。
【讨论】: