Python被编译成一个中间字节码(pyc)然后被执行。因此,有一个编译,然后是解释。然而,长期使用 Python 的用户说 Python 是一种“后期绑定(bind)”语言,不应将其称为解释型语言。
Python 与其他解释型语言有何不同?
您能告诉我“后期绑定(bind)”在 Python 上下文中是什么意思吗?
Java是另一种先将源代码编译成字节码,再解释成字节码的语言。
Java 是解释型/编译型语言吗?
它在编译/执行方面与 Python 有何不同?
据说 Java 没有“后期绑定(bind)”。这与 Java 程序比 Python 快一点有什么关系吗?
如果您也可以给我链接到人们已经讨论过的地方,那就太好了;我很想阅读更多关于这个的内容。谢谢。
最佳答案
How would Python be different from another interpreted language?
这涉及头发 split 。解释型语言和“托管代码”语言(如 C#)和虚拟机语言(如 Java)形成了一个奇怪的连续体。有些人会说所有 语言都是“可解释的”——甚至是机器语言。毕竟,CPU 的电子电路“解释”机器语言。
您最多只能说“已解释”意味着有一个可见的软件层在解释您的应用程序字节码。 “未解释”意味着您的软件(或多或少)直接由底层硬件执行。 “托管代码”的人可以自由地继续 split 这个头发。
Could you tell me what "late-binding" means, in the Python context?
变量没有被声明为具有类型。变量尽可能晚地绑定(bind)到一个类型——分配一个实际的对象。
Is Java an interpreted/compiled language?
是的。它被编译成字节码。字节码被解释。我更愿意称它为解释。
然而,人们会(出于非常晦涩的原因)不同意。任何类型的“编译”步骤的存在——无论多么微小——总是让人感到困惑。字节码的转换几乎与程序在运行时的实际行为无关。有些人喜欢说,只有完全没有任何预处理“编译”污染的语言才能被解释。这方面的例子已经不多了,因为许多语言都是从人类友好的文本翻译成解释器友好的字节码。即使是 Applesoft Basic(早在 80 年代)也有在您输入代码时完成这种翻译过程。
一些 JVM 执行 JIT。有些人没有。有些是混合物。说 JVM 只做 JIT 字节码翻译是不正确的。一些 JVM 可以。有些没有。
How is it different from Python in terms of compilation/execution?
完全没有。 Java VM 可以执行 Python。 [对于容易混淆的人来说,在这种情况下,“python”这个词不可能意味着“python 源代码”。一定是python字节码的意思。]
Java is said to not have, "late-binding". Does this have anything to do with Java programs being slighly faster than Python?
也许吧。由于 JIT 编译器在运行时将 Java 字节码转换为机器码,因此 Java 程序通常更快。
静态(“早期”)绑定(bind)对 Java 没有像 C 或 C++ 这样的真正编译语言那样的好处,后者几乎没有任何类型的运行时检查。 Java 仍然会做数组边界检查之类的事情,C 为了原始速度而忽略了这些事情。
“延迟”绑定(bind)实际上没有什么惩罚。 Python 属性和方法使用简单的字典查找来解析。字典是一个散列;性能相当不错。名称的哈希值可以放入“内部”字符串文字池中,以分摊计算哈希值的成本。
要获得真正的乐趣,请查看 PyPy 和 RPython。这是一个可以进行 JIT 编译的 Python 解释器。您最终得到了一个 2 层解释器。您的代码由 PyPy 解释。 PyPy 由 RPython 解释。 http://alexgaynor.net/2010/may/15/pypy-future-python/
关于java - 解释 vs. 编译 vs. 后期绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2881526/