解释与编译与后期绑定

13 python java compiled late-binding

Python被编译成中间字节码(pyc),然后执行.所以,有一个汇编,然后是解释.但是,长期使用Python的用户认为Python是一种"后期绑定"语言,它不应该被称为解释语言.

  1. Python与其他解释语言有何不同?

  2. 你能告诉我在Python上下文中"后期绑定"是什么意思吗?

Java是另一种语言,它首先将源代码编译成字节码,然后解释为字节码.

  1. Java是一种解释/编译语言吗?

  2. 在编译/执行方面,它与Python有何不同?

  3. 据说Java没有"后期绑定".这与Java程序比Python快得多吗?

如果你能给我链接到人们已经讨论过的地方,那就太棒了.我想更多地了解这一点.谢谢.

S.L*_*ott 9

Python与其他解释语言有何不同?

这涉及头发分裂.解释语言和"托管代码"语言(如C#和虚拟机语言(如Java))构成了一个奇怪的连续体.有些人会说所有语言都被"解释" - 甚至是机器语言.毕竟,CPU的电子电路"解释"机器语言.

你能做的最好的事情就是说"解释"意味着有一个可见的软件层解释你的应用程序字节码."未解释"表示您的软件(或多或少)直接由底层硬件执行."管理代码"人们可以自由地继续分裂这头发.

你能告诉我在Python上下文中"后期绑定"是什么意思吗?

变量未声明为具有类型.变量尽可能晚地绑定到类型 - 赋值实际对象.

Java是一种解释/编译语言吗?

是.它被编译为字节代码.解释字节代码.我更喜欢称之为解释.

但是,人们会(出于非常模糊的原因)不同意.存在任何类型的"编译"步骤 - 无论多么微小 - 总是让人感到困惑.字节代码的转换几乎与运行时程序的实际行为无关.有些人喜欢说,只有完全没有任何预处理"编译"污染的语言才能被解释.由于许多语言都是从人性化的文本转换为解释器友好的字节代码,因此不再有这么多的例子.甚至Applesoft Basic(早在80年代)就已经在输入代码时完成了这种翻译传递.

一些JVM做JIT.有些人没有.有些是混合物.要说JVM只进行JIT字节码转换是不正确的.有些JVM可以.有些人没有.

在编译/执行方面,它与Python有何不同?

一点也不.Java VM可以执行Python.[对于容易混淆的,在这种情况下,"python"这个词不可能意味着"python源".它必须意味着python字节码.]

据说Java没有"后期绑定".这与Java程序比Python快得多吗?

也许.由于JIT编译器在运行时将Java字节代码转换为机器代码,因此Java程序通常更快.

静态("早期")绑定与Java没有相同的好处,它具有真正编译的语言,如C或C++,几乎没有任何类型的运行时检查.Java仍然会执行数组边界检查等操作,C为了原始速度而省略.

"迟到"绑定实际上没有什么惩罚.使用简单的字典查找解析Python属性和方法.字典是哈希; 表现相当不错.可以将名称的哈希值放入"实习"字符串文字池中,以分摊计算哈希值的成本.

为了真正的乐趣,看看PyPy和RPython.这是一个可以进行JIT编译的Python解释器.你结束了2层翻译.您的代码由PyPy解释.PyPy由RPython解释. http://alexgaynor.net/2010/may/15/pypy-future-python/

  • JVM无法执行Python.它只能JIT编译Java字节码.Jython项目提供了一个编译器,可以将Python的方言转换为Java字节码. (2认同)
  • @Marcelo:HotSpot VM包括解释器和JIT编译器.虽然我们在挑剔,但Jython编译为JVM字节码,而不是Java字节码. (2认同)

Mar*_*tos 7

后期绑定是一种与解释截然不同的概念.

严格地说,解释语言是直接从源执行的.它没有经过字节码编译阶段.之所以产生混淆是因为python程序一个解释器,但是它解释了字节码,因此它是Python的字节码语言,你将其描述为"解释".Python语言本身就是一种编译语言.

相比之下,Java字节码现在被解释和编译.它由JIT编译器编译为本机代码,然后直接在硬件上运行.

后期绑定是类型系统的一个属性,并且在某种程度上存在于大多数语言中,无论它们是否被解释或编译.

  • Java如今被解释得非常多.Hotspot JVM最初通过解释器运行所有代码,JIT只编译最频繁执行的部分. (2认同)