为什么Smalltalk有时被称为“动态类型”?

时间:2012-07-17 09:19:18

标签: types smalltalk pharo

我试着理解为什么Smalltalk有时被称为“动态类型”而不是“无类型”,我也阅读了很多,这似乎很有道理。

Smalltalk中没有变量,参数和方法返回的类型注释 - 那么你要比较一个对象的类型(如果你说对象的类型是它的类)?

<击>

动态类型也与动态类型检查不一样?因此,如果Smalltalk是动态类型的,那么内部Smalltalk会在运行时为变量,参数和方法返回提供类型吗?是吗?

4 个答案:

答案 0 :(得分:4)

“动态类型”在某些编程语言社区中被广泛用于表示“动态检查”。同样,在更多以理论为导向的圈子中,人们普遍认为它在技术上具有误导性,因为被检查的东西不是任何形式意义上的类型。但是,如果有任何机会纠正它,这种使用现象太常见了。

另请参阅我对the inverse question的回答,了解更多背景信息。

答案 1 :(得分:3)

一种惯例是沿两个维度比较编程语言:

  • 从动态打字到静态打字的连续统一体
  • 从强打字到弱打字的连续统一体

动态打字通常意味着在编译时不会检查类型,而是用于静态打字。

强类型通常意味着运行时类型的类型永远不会改变,而弱类型意味着可以根据上下文更改基础类型。

据说Smalltalk有强劲的动态打字。

答案 2 :(得分:3)

有关静态/动态类型和隐式/显式类型的详细讨论,您可能需要检查:http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html

答案 3 :(得分:2)

在Smalltalk中,每个对象都有它的类 - 定义可以在其实例上传递的操作(以及如何)。因此,当您向某个对象发送一条消息时,其类会检查该消息是否可以处理以及如何处理。

另一方面,与静态类型语言相比,变量可以在程序的生命周期中包含不同类型的不同对象,因此没有基于变量(或参数)的类型检查。

正如Damien所指出的优秀文章所指出的那样 - 静态和动态类型语言中的类型概念是完全不同的。如果尝试直接比较,这种差异可能导致很多混乱。