是Python解释(如Javascript还是PHP)?

Geu*_*uis 35 python

Python是否在运行时严格解释,还是可以用于开发作为后台应用程序运行的程序(如Java应用程序或C程序)?

Bri*_*ian 83

正如各种各样的回答告诉你的那样,解释和编译之间的界限不再像创造这些术语时那样清晰.实际上,将语言视为解释或编译也是错误的,因为不同的语言实现可能会做不同的事情.这些天你可以找到C解释器Javascript编译器.

即使在查看实施时,事情仍然不明确.有各种解释.以下是解释和编译之间的一些渐变:

  1. 纯粹的解释.几乎就是它在锡上所说的.阅读一系列来源并立即按照说明进行操作.这实际上并不是由许多生产语言完成的 - 几乎就像shell脚本一样.

  2. 标记化 +解释.以上是一个微不足道的优化.它不是从头开始解释每一行,而是首先进行标记(即,不是看到像"print 52 + x"这样的字符串,而是将其转换为标记流(例如.[PRINT_STATEMENT, INTEGER(52), PLUS_SIGN, IDENTIFIER('x')])以避免重复执行该解释状态.许多版本基本的工作方式.

  3. 字节码编译.这是Java和C#等语言采用的方法(尽管见下文).代码转换为"虚拟机"的指令.然后解释这些指令.这也是python采用的方法(或者至少是cpython,最常见的实现.)JythonIronpython实现也采用这种方法,但分别编译为Java和C#虚拟机的字节码.

  4. Bytecode + Just in Time编译.如上所述,而不是解释字节码,将执行的代码从执行点的字节码编译,然后运行.在某些情况下,这实际上可以胜过本机编译,因为它可以自由地对代码执行运行时分析,并且可以使用当前处理器的特定功能(而静态编译可能需要针对最小公分母CPU进行编译).Java的更高版本和C#使用这种方法. Psyco为python执行此操作.

  5. 本机机器代码编译.代码被编译为目标系统的机器代码.你可能认为我们现在完全取消了解释,但即使在这里也有微妙之处.一些机器代码指令实际上并不直接在硬件中实现,但实际上是通过微代码实现的- 甚至机器代码有时也会被解释!


Joh*_*kin 50

这里有多个问题:

  1. 不,Python没有被解释.标准实现编译为字节码,然后在虚拟机中执行.许多现代JavaScript引擎也这样做.
  2. 无论实现(解释器,VM,机器代码),您想要的任何东西都可以在后台运行.如果需要,可以在后台运行shell脚本.

  • "不解释"是一种夸大其词.它不是解释为来源.Python VM清楚地解释字节码.它没有编译成特定于机器的二进制文件,所以它在某种程度上被解释. (25认同)
  • "不,Python不会被解释." 有人最好告诉python.org上的人改变他们的元描述!"Python的主页,一种解释性的,交互式的,面向对象的,可扩展的编程语言." (11认同)
  • 我认为不同之处在于解释是由硬件(CPU)还是软件(Python VM)完成的.我认为Python是被解释的. (6认同)
  • kigurai:那么如何区分使用VM的实现和使用解释器的实现呢?对于两者来说,已经有一个非常好的和准确的词("字节编译","解释") - 让我们使用它们,而不是添加新的含义. (2认同)

Dav*_*d Z 24

从技术上讲,Python被编译为字节码,然后在虚拟机中进行解释.如果Python编译器能够将字节码写入.pyc文件,它(通常)会这样做.

另一方面,Python中没有明确的编译步骤,就像Java或C一样.从开发人员的角度来看,Python看起来只是直接解释.py文件.此外,Python提供了一个交互式提示,您可以在其中键入Python语句并立即执行它们.因此,Python中的工作流程与解释语言的工作流程比编译语言的工作流程更相似.对我(以及许多其他开发人员,我想),工作流的区别比是否存在中间字节码步骤更重要.