静态类型绑定与动态类型绑定

时间:2012-03-23 10:53:47

标签: dynamic binding types

我理解类型绑定的含义。如果我错了,请纠正我 -

类型绑定是将声明的变量“关联”到特定类型的过程 (由编译器完成。)

类型绑定可分为 -
静态类型绑定
动态类型绑定

静态类型绑定可以通过两种类型的声明来实现 -

http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/bound.2.gif

直到这里才明白。
但现在,什么是动态类型绑定? (不是定义)我知道这意味着变量在运行时与“类型”相关联,

http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/bound.3.gif

有关它的更多信息,例如 -

  1. 为什么动态类型绑定?
  2. 哪种编程语言可用作功能?
  3. 与静态类型绑定有什么优缺点?
  4.   

    通过作业声明指定

    您能否提供更多相关信息。是否应仅使用赋值语句指定?

1 个答案:

答案 0 :(得分:17)

我会尽力回答你的问题:

首先是最简单的哪种编程语言可用作功能?

Php,Python,Ruby,Perl,JavaScript ......

“什么是动态类型绑定?”

使用这种方法绑定变量类型的编程语言,如PHP,Python,Ruby等,一般都是解释语言。所以,他们没有编译器。在这些语言中,您没有指定变量类型,也没有针对此的隐含规则,因此在运行类型之前发现变量类型是“不可能的”。

为什么要使用动态类型绑定?

要回答这个问题,我不得不谈谈这种方法的一些优点。选择使用动态类型绑定是关于语言设计的决定。因此,取决于您对语言的要求以及将使用的情况。

<强>优点

  • 编写通用代码更容易。

Ex:考虑构建一个通用数据结构,例如Stack。您希望使用它来使用不同的堆栈来保存所有类型的变量,例如,堆栈用于int,另一个用于字符串,依此类推。要在**编程语言中使用静态类型绑定**这样做会更难。

例如,在C中,您有两个选择:

  • 为要使用的每种类型写一个堆栈保持堆栈
  • 构建一个保持(void *)的堆栈,换句话说,保留一个点

如果您尝试在Python中执行此操作,则只能立即编写代码。这种语言为你付出了艰苦的努力。

你可以争论Java和其他语言,但你必须记住,动态类型绑定是比Oriented Object Programming更早的概念,所以在那个时候,没有多态性。

<强>缺点

  • 检查类型和解释的高成本

使用编译生成的二进制文件执行程序比在解释器上运行的同一程序快得多。第二件事是,当你使用静态类型绑定时,“基本上,绑定过程只在执行前完成一次。另一方面,在动态类型绑定,绑定过程在每个变量的每个赋值操作中完成。

其他最小的缺点是关于编译器可以找到的一些错误,但使用动态类型绑定解释器不能。

例如:由于您可以在执行时间内根据需要更改变量的类型,实际上可能会产生混淆,例如将int的变量更改为string,以及之后的某些点,尝试调用a接收int的函数,并使用现在为string的变量调用此函数。

这是一个小问题,因为有经验的开发人员永远不会这样做,但仍然可以使用静态类型绑定的语言。

你必须记住,我们正在谈论概念,这些概念的实现正在与计算机科学一起发展,所以现在可能会减少一些优点/缺点。