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

时间:2010-12-17 11:25:55

标签: programming-languages dynamic binding static typed

每个人这4个术语有什么区别,你能举个例子吗?

2 个答案:

答案 0 :(得分:14)

静态动态是行话词,指的是某个编程元素被解析的时间点。 静态表示在构建程序时进行解析。 动态表示在程序运行时进行解析。

静态和动态类型

键入是指由于数据值之间的差异导致的程序结构更改:整数,字符,浮点数,字符串,对象等。这些差异可能会产生很多影响,例如:

  • 内存布局(例如,int为4个字节,double为8个字节,对象为更多)
  • 执行的指令(例如,添加小整数的基本操作,添加大整数的库调用)
  • 程序流程(简单子程序调用约定与多方法的散列分配)

静态类型表示在构建时生成的程序的可执行形式将根据程序中找到的数据值类型而有所不同。 动态类型意味着生成的代码将始终相同,无论类型如何 - 执行时的任何差异都将在运行时确定。

请注意,很少有真正的系统是纯粹的一个或另一个,这只是一个优先策略的问题。

静态和动态绑定

绑定是指程序文本中的名称与它们所引用的存储位置的关联。在静态绑定中,此关联在构建时预先确定。使用动态绑定时,直到运行时才会确定此关联。

真正的静态绑定几乎绝迹。例如,早期的汇编程序和FORTRAN将完全预先计算所有变量和子程序位置的确切内存位置。这种情况并没有持续很长时间,引入了变量的堆栈和堆分配以及子程序的动态加载库。

因此,必须对定义采取一些自由。这里概念的精神是:静态绑定程序尽可能地预先计算存储布局,这在现代虚拟内存,垃圾收集,单独编译的应用程序中是实用的。动态绑定程序会尽可能晚地等待。

一个例子可能有所帮助。如果我尝试调用方法MyClass.foo(),静态绑定系统将在构建时验证是否存在名为MyClass的类,并且该类具有名为foo的方法。动态绑定系统将等到运行时才能查看是否存在。

对比

静态策略的主要优点是程序翻译者更加了解程序员的意图。这样可以更容易:

  • 在构建阶段早期发现许多常见错误

  • 构建重构工具

  • 在构建时仅产生一次确定程序可执行形式所需的大量计算成本

动态策略的主要优势在于它们更容易实现,这意味着:

  • 可以创建一个工作动态环境,其成本只是静态环境的一小部分

  • 更容易添加静态检查可能非常具有挑战性的语言功能

  • 处理需要自行修改代码的情况更容易

答案 1 :(得分:0)

键入 - 指变量tyes以及是否允许变量在程序执行期间更改类型

http://en.wikipedia.org/wiki/Type_system#Type_checking

绑定 - 如下所示,这可以参考变量绑定或库绑定

http://en.wikipedia.org/wiki/Binding_%28computer_science%29#Language_or_Name_binding