静态和动态类型语言之间的区别

时间:2019-06-01 16:22:09

标签: static-typing dynamic-typing

在编写一门计算机科学课程时,学生将对Python和OCaml都有介绍,我几乎是在说Python是动态类型的,而OCaml是静态类型的。我想我们都同意这是事实,即使似乎没有人对动态类型的语言确切地达成一致。我遇到了几个不适合我的定义:

  • 其中有些人谈论在编译时和运行时检测类型错误。由于C可以被编译但也可以被解释(嗯,这很不寻常,但是可以),我不喜欢这个定义,因为它更多地依赖语言的实现而不是语义。

  • 有人问类型应该附加到变量上,而不是附加到静态类型系统的值上。例如,在C语言中,可以将int赋给给定的变量:int n = 1。但是,以后无法将double分配给该变量。这将使C语言成为静态类型(确实如此,但出于其他原因)。我不喜欢这个定义,因为将任何静态类型的语言变成动态语言似乎并不难。

  • 许多其他定义被证明是错误的

我现在认为静态/动态类型的语言没有正确定义,因为大多数严肃的书籍似乎都不愿定义它。在B. Pierce的“类型和编程语言”中,作者似乎暗示一种可以写的语言:

如果cond则为1,否则为“ 1”

应动态输入。我也看到了定义:“静态类型语言是表达式具有类型的语言,而动态类型语言是值具有类型的语言”。我不太确定要理解什么意思。但是我的感受是:静态语言是一种我们可以从其所有函数的类型及其值推断出表达式类型的语言。那是一种语言,其中只允许从其输入类型知道其输出类型的函数。朱莉娅人称其为“类型稳定函数”。

所以我的问题是:是静态类型的语言,那些只允许“类型稳定的函数”的语言?

0 个答案:

没有答案