静态类型是动态类型的子集吗?

时间:2012-02-11 08:50:33

标签: dynamic types static

我打算将此作为对我之前关于类型理论的问题的评论,但我觉得它应该得到自己的论述:

如果您有一个动态类型系统,并且在每个对象上添加一个“type”成员,并在对象上执行函数之前验证此“type”是否为特定值,那么这与静态类型有何不同? (除了它是运行时而不是编译时)。

2 个答案:

答案 0 :(得分:9)

从技术上讲,它实际上是相反的:“动态类型”语言是静态类型语言的特例,即只有一种类型的语言(在数学意义上)。这至少是类型系统社区中许多人的观点。

关于静态与动态检查的编辑:只能动态检查本地属性,而需要某种全局知识的属性不能。想象一些属性,例如某些东西是独特的,没有别名的东西,一个没有竞争条件的计算。一个合适的静态类型系统可以验证这些属性,因为它能够在被检查的表达式的上下文中建立某些不变量。

答案 1 :(得分:-2)

静态类型在编译时发生,而不是在运行时!而这种差异至关重要!!

有关详情,请参阅B.Pierce的书Types and Programming Languages