2012-03-23 129 views
6

我明白绑定类型的含义。如果我错了,请纠正我 -静态类型绑定与动态类型绑定

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

类型的结合可以被归类为 -
静态类型的结合
动态类型的结合

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

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. 静态类型绑定有哪些优点和缺点?

通过赋值语句

指定你可以给它的更多信息。是否应仅在赋值语句中指定?

+1

这些幻灯片很糟糕。他们将隐式/显式声明与隐式/显式类型混淆。您可以使用隐式(静态)类型进行显式声明 - 例如大多数类型化的功能语言都具有完整的类型推断。另外,静态类型为表达式分配类型,而不仅仅是变量。 (术语“类型绑定”也非常不标准。) – 2012-03-23 14:43:41

+0

@AndreasRossberg这些幻灯片是Robert Sebesta编写的“编程语言概念”的支持笔记。 – jsp99 2012-03-24 04:36:35

+0

只是添加,碰到[this](https://cseweb.ucsd.edu/classes/sp05/cse130/lecture_notes/types_student.txt)这对我很有帮助! – Kulasangar 2017-09-19 20:14:57

回答

16

我将尽力为您解答:

首先最简单的在其编程语言是它可以作为一个功能?

PHP,Python和Ruby,Perl和JavaScript的...

“什么是动态类型的结合?”

使用此方法绑定变量类型(如PHP,Python,Ruby等)的编程语言通常是解释性语言。所以,他们没有编译器。在这些语言中,你没有指定变量类型,也没有关于这个的隐含规则,所以在运行类型之前发现一个变量类型是“不可能的”。

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

要回答这个问题,我必须谈谈这种方法的一些优点。选择使用动态类型绑定是关于您的语言设计的决定。所以,取决于你想要什么样的语言以及它将被使用的情况。

优势

  • 更容易编写通用代码。

例如:考虑构建一个通用数据结构,例如Stack。你想用它来保存使用不同栈的所有类型的变量,例如,用于int的栈,用于字符串的另一个等等。要在具有静态类型绑定的**编程语言上做到这一点,这更加困难。

在C语言中,例如,你有两个选择:

  • 写一个堆栈要使用不断堆栈
  • 建立一个堆栈,保持(void *的),换句话说,每个类型,指向任何东西

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

您可以争论Java和其他语言,但是您必须记住,动态类型绑定的概念早于面向对象编程,因此当时没有多态性。

缺点

  • 成本高,检查型和解释

执行使用编译生成的二进制文件的程序比解释上述运行相同程序的速度更快更多。第二件事是,当您使用静态类型的结合,“基本上,绑定过程与动态类结合做到了这一次,在执行之前。在另一方面,在语言,结合过程是O每项任务完成。每个变量的操作

其它最小缺点是对一些误差修改一个编译器能找到,但使用动态类结合解释不能

例如:你可以改变你的变量的类型尽可能多的时间,你需要在执行时间,真的可能会造成混乱,如将int的变量更改为字符串,和一些点之后,尝试调用接收int的函数,然后使用现在是字符串的变量调用此函数。

这是一个小问题,因为一个经验丰富的开发人员永远不会这样做,但仍然有可能,并且在的语言中,静态类型绑定不是。

你要记住,我们正在谈论的概念,而这些概念的实现与计算机科学的不断发展起来,所以可能是一些优势/劣势可如今最小的。