13 python java compiled late-binding
Python被编译成中间字节码(pyc),然后执行.所以,有一个汇编,然后是解释.但是,长期使用Python的用户认为Python是一种"后期绑定"语言,它不应该被称为解释语言.
Python与其他解释语言有何不同?
你能告诉我在Python上下文中"后期绑定"是什么意思吗?
Java是另一种语言,它首先将源代码编译成字节码,然后解释为字节码.
Java是一种解释/编译语言吗?
在编译/执行方面,它与Python有何不同?
据说Java没有"后期绑定".这与Java程序比Python快得多吗?
如果你能给我链接到人们已经讨论过的地方,那就太棒了.我想更多地了解这一点.谢谢.
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/
后期绑定是一种与解释截然不同的概念.
严格地说,解释语言是直接从源执行的.它没有经过字节码编译阶段.之所以产生混淆是因为python程序是一个解释器,但是它解释了字节码,因此它是Python的字节码语言,你将其描述为"解释".Python语言本身就是一种编译语言.
相比之下,Java字节码现在被解释和编译.它由JIT编译器编译为本机代码,然后直接在硬件上运行.
后期绑定是类型系统的一个属性,并且在某种程度上存在于大多数语言中,无论它们是否被解释或编译.
| 归档时间: |
|
| 查看次数: |
1665 次 |
| 最近记录: |