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

jsp*_*p99 8 binding types dynamic

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

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

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

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

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

通过赋值语句指定

你能提供更多的信息吗?是否应仅使用赋值语句指定?

Bru*_*eus 17

我会尽力回答你的问题:

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

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

"什么是动态类型绑定?"

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

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

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

好处

  • 编写通用代码更容易.

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

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

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

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

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

缺点

  • 高成本检查类型和解释

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

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

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

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

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