Python与另一种解释型语言有何不同?
这涉及到头发分裂。解释型语言和“托管代码”语言(如 C# 和虚拟机语言(如 Java))形成了一个奇怪的连续体。有些人会说所有语言都是“解释”的--甚至是机器语言。毕竟,CPU的电子电路“解释”了机器语言。
你能做的最好的事情就是说“解释”意味着有一个可见的软件层解释你的应用程序字节码。“未解释”意味着您的软件(或多或少)由底层硬件直接执行。“托管代码”的人可以自由地继续分裂这根头发。
你能告诉我在Python上下文中“后期绑定”是什么意思吗?
变量未声明为具有类型。该变量尽可能晚地绑定到类型 - 具有实际对象的赋值。
Java是解释型/编译型语言吗?
是的。它被编译为字节码。对字节代码进行解释。我更喜欢称之为解释。
然而,人们会(出于非常模糊的原因)不同意。任何类型的“编译”步骤的存在 - 无论多么小 - 总是让人感到困惑。转换为字节代码与程序在运行时的实际行为几乎没有关系。有些人喜欢说,只有完全没有预处理“编译”污点的语言才能被解释。这方面的例子已经不多了,因为许多语言都是从人类友好的文本翻译成解释器友好的字节码。即使是Applesoft Basic(早在80年代)在你输入代码时也完成了这种翻译。
一些JVM做JIT。有些则不然。有些是混合的。说 JVM 只执行 JIT 字节码转换是不正确的。有些JVM是有的。有些则不然。
它在编译/执行方面与Python有何不同?
一点也不。Java VM 可以执行 Python。[对于容易混淆的人来说,“python”这个词在这个上下文中不可能意味着“python source”。它必须意味着python字节码。
Java据说没有“后期绑定”。这与Java程序比Python快一点有什么关系吗?
也许。Java 程序通常更快,因为 JIT 编译器在运行时将 Java 字节代码转换为机器代码。
静态(“早期”)绑定对于Java来说没有与C或C++等真正编译的语言相同的好处,在这些语言中几乎没有任何类型的运行时检查。Java仍然做数组边界检查之类的事情,C为了原始速度而省略了这些检查。
实际上,“延迟”绑定几乎没有惩罚。Python 属性和方法使用简单的字典查找进行解析。字典是一个哈希;性能相当不错。可以将名称的哈希放入“滞留”字符串文本池中,以分摊计算哈希的成本。
为了真正的乐趣,看看PyPy和RPython。这是一个可以进行JIT编译的Python解释器。你最终会得到一个2层口译员。您的代码由 PyPy 解释。PyPy由RPython解释。http://alexgaynor.net/2010/may/15/pypy-future-python/