-1

因此,目前正在阅读有关绑定的内容...根据我能想到的示例以及在网络上找到的示例,动态绑定似乎主要发生在解释语言中,而不是发生在编译语言中。在 Java 中也会出现一些情况,但 java 不是一种“纯粹的”编译语言。我读过 - http://en.wikipedia.org/wiki/Dynamic_binding_(computing)

那么我的问题是——对于类、方法和对象,动态绑定是否首先发生在对象级别,然后追溯到方法、类等?此外,是否存在动态绑定发生在编译语言中的对象级别的实例?

4

3 回答 3

1

您的问题有一系列定义问题。对于动态绑定,您可能会想到:

  • 函数重载 (C++)
  • vtable 调度 (C++)
  • 动态名称查找和类分派(Smalltalk、ruby、python 等)
  • 动态名称查找和对象分派 (Javascript)
  • 后期绑定 (VB6 COM)
  • 动态调度 (Lisp, Dylan)

对于编译与解释,您可能会想到:

  • 编译为机器码 (C/C++)
  • 编译为字节码,然后 JIT 编译(C#、Java)
  • 使用 VM(Java、Python)编译为字节码
  • 解析和标记化(?)

一般来说,很少有语言被编译成机器码,而且大多数没有动态名称查找或对象继承。许多语言被编译(但不是机器代码)并且其中许多具有动态名称查找,具有类或对象继承。

所以答案是,这取决于。

于 2014-03-20T10:33:25.727 回答
1

不,动态绑定可以发生在编译语言中,比如 C++:

https://en.wikipedia.org/wiki/Dynamic_binding_%28computing%29

请注意,Java 也被编译成字节码,然后由 JVM 解释。有时解释语言和编译语言之间的区别会变得模糊(例如使用动态调度的 C++)。

于 2014-03-18T01:12:18.037 回答
1

编译语言和解释语言是一种错误的二分法,在编程语言社区中引起了很多混乱。许多现代语言实现平台都包括解释器和编译器。即使该语言最初且长期存在的实现是编译器,但这并不意味着以后不能为它编写解释器。那里有不止一个 C 解释器以及几十个 Lisp 编译器。

于 2014-03-24T23:24:23.857 回答