这只是我在阅读有关解释语言和编译语言时的一个疑问。
Ruby无疑是一种解释语言,因为源代码是由解释器在执行时处理的。
相反,C是一种编译语言,因为我们必须先根据机器编译源代码,然后再执行。这样的结果执行起来要快得多。
现在来看Python:
这表明,每次在新进程中导入python代码以创建.pyc时,都会编译它,而直接执行时则会对其进行解释。
那我应该把它当作哪种语言呢?解释还是编译?与解释和编译语言相比,它的效率如何?
根据维基的口译语言页面,它被列为一种被编译成虚拟机代码的语言,这是什么意思?
发布于 2010-12-08 14:39:48
值得注意的是,语言不是被解释或编译的,而是语言实现要么解释要么编译代码。您注意到Ruby是一种“解释语言”,但是您可以编译Rubyàla MacRuby,所以它并不总是一种解释语言。
几乎每个Python实现都由一个解释器(而不是编译器)组成。您看到的.pyc文件是Python虚拟机的字节代码(类似于.class文件)。它们与C编译器为本机架构生成的机器代码不一样。然而,有些Python实现是由一个即时编译器组成的,它将把Python字节代码编译成本机代码。
(我说“几乎每一个”,因为我不知道有任何用于Python的本机编译器,但我不想宣称任何地方都不存在。)
发布于 2010-12-08 07:52:05
Python将被解释为字节码。.py源代码首先被编译成字节码作为.pyc。可以解释此字节码(正式CPython)或JIT编译(PyPy)。Python源代码(.py)可以编译成不同的字节代码,比如IronPython (.Net)或Jython (JVM)。Python语言有多种实现。正式的一个是字节码解释的一个。还有字节码JIT编译的实现。
要对各种语言的实现进行速度比较,可以尝试使用这里。
发布于 2015-10-23 05:33:38
编译和解释在某些情况下是有帮助的,但在技术意义上应用时,它是一种错误的二分法。
编译器(在最广义的意义上)是一个翻译器。它将程序A翻译为程序B,并在以后使用机器M执行程序。
翻译(广义上说)是执行者。它是一个执行程序A的机器M,尽管我们通常从这个定义中排除物理机器(或者像物理机器一样的非物理机器)。但从理论上看,这种区分有点武断。
例如,以re.compile为例。它将正则表达式“编译”为中间形式,并对该中间形式进行解释/计算/执行。
最后,这取决于您正在谈论的抽象级别,以及您关心的是什么。人们说“编译”或“解释”是对过程中最有趣部分的广泛描述,但实际上大多数程序都是以某种方式编译(翻译)和解释(执行)的。
CPython ( Python最流行的实现)对于执行代码来说非常有趣。因此,通常将CPython描述为解释。虽然这是个松散的标签。
https://softwareengineering.stackexchange.com/questions/24558
复制相似问题