Programming languages 解释语言与编译语言中的动态绑定

Programming languages 解释语言与编译语言中的动态绑定,programming-languages,language-design,dynamic-binding,interpreted-language,static-binding,Programming Languages,Language Design,Dynamic Binding,Interpreted Language,Static Binding,所以目前正在阅读关于绑定的。。。根据我能想到的例子以及在web上找到的例子,动态绑定似乎主要发生在解释语言中,而不是发生在编译语言中。Java中也会出现一些问题,但Java不是一种“纯粹”的编译语言。我读过- 我的问题是——对于类、方法和对象,动态绑定是否首先发生在对象级别,然后跟踪到方法、类等等?另外,在编译语言中是否存在在对象级别发生动态绑定的实例?否,动态绑定可以在编译语言中发生,如C++: 注意,Java也被编译成字节码,然后由JVM解释。有时,解释和编译语言之间的差异会变得模糊,例如C

所以目前正在阅读关于绑定的。。。根据我能想到的例子以及在web上找到的例子,动态绑定似乎主要发生在解释语言中,而不是发生在编译语言中。Java中也会出现一些问题,但Java不是一种“纯粹”的编译语言。我读过-


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

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


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

< P>你的问题有一系列定义问题。对于动态绑定,您可以考虑:

函数重载C++ VC++调度C++ 动态名称查找和类分派Smalltalk、ruby、python等 动态名称查找和对象分派Javascript 后期绑定VB6 COM 动态分派Lisp,Dylan 对于编译与解释,您可能会想到:

编译为机器代码C/C++ 编译成字节码,然后JIT编译成C,Java 编译成字节码,使用VM Java、Python 解析和标记化 一般来说,很少有语言被编译成机器代码,而且大多数语言没有动态名称查找或对象继承。许多语言是编译的,但不是机器代码,其中许多语言具有动态名称查找,具有类继承或对象继承


所以答案是,这要看情况而定。

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

我在想java——但java更像是一种混合语言……它不是一种纯粹的编译或解释语言。谢谢你的回复。@minimalizer:Java已经编译好了。VM可以做机器代码做不到的事情。如果你的意思是“编译成机器代码的语言”,也许你应该这么说。@david.pfx如果错了,请纠正我。我认为解释器的优点之一是平台无关性,java的字节码允许您这样做。因为这一步被解释为“最小最大化者”:在某个地方有一个逻辑谬误。Java是编译的,而不是解释的。它通常被编译成Java字节码,但并不总是这样。平台独立性是多因素的。并非所有口译员都与平台无关。从哪里开始呢?解释语言和编译语言的整个概念相当混乱,而且荒谬的语言是;它们的实现是解释器或编译器,所有语言都可以以任何一种方式实现。根据我的经验,它对理解的伤害大于它对理解的帮助,最好不要再做这种区分,除非它是历史的必然结果。你可能想修复标题中的拼写错误,以便通过搜索找到它