【问题标题】:Is Python byte-code, interpreter independent?Python字节码,解释器独立吗?
【发布时间】:2018-10-10 18:25:34
【问题描述】:

这是一个显而易见的问题,我无法找到具体的答案。

Python Byte-Code 和 Python Code 本身是否独立于解释器,

意思是,如果我使用 CPython、PyPy、Jython、IronPython、Skulpt 等解释器并尝试运行 python 或字节码中的同一段代码,它会正确运行吗? (前提是它们实现相同的语言版本,并使用严格用 Python 编写的模块或标准模块)

如果是这样,是否有一个基准,或者我可以比较许多解释器的性能比较的地方?

我已经玩了一段时间的 CPython,现在我想探索新的解释器。

还有一个附带问题,python 的其他实现有什么用途? Skulpt 我明白了,浏览器,但其余的呢?是否有特定的行业或应用需要不同的解释器(哪个)?

【问题讨论】:

  • 你说的python字节码是什么意思?你是说 pyc 文件还是 dis.dis 输出?我很确定 pyc 文件大致可互换......(可能不是 skulpt......但也许)只要您只使用兼容的功能......我假设实际的字节码(即dis.dis) 是不同的......但这一切都只是假设......你的用例是什么?
  • 在执行dis-assembly 一段代码时得到的类似汇编的代码,pyc 文件的人类可读版本。
  • 但在任何一种情况下,它都易于测试......而且几乎可以肯定不同版本之间存在差异(即 2.6 与 2.7 或 3.1 与 3.4)
  • 如果你使用不同版本的python运行相同的python文件,pycache文件夹将有多个pyc文件,文件名附加不同的python版本。

标签: python pypy pythoninterpreter


【解决方案1】:

来自https://docs.python.org/3/library/dis.html#module-dis

字节码是 CPython 解释器的一个实现细节。不 保证不会添加、删除或添加字节码 在 Python 版本之间发生了变化。不应使用此模块 考虑跨 Python VM 或 Python 版本工作。

另一方面,Jython“由一个编译器组成,用于将 Python 源代码编译为可直接在 JVM 上运行的 Java 字节码”,而 IronPython 编译为 CIL 以在 .NET VM 上运行。

目的是为了更好地集成到您的编程环境中。 CPython 允许您编写 C 扩展,但其他实现不一定如此。 Jython allows you to interact with Java code。我敢肯定 IronPython 也是如此。

【讨论】:

    【解决方案2】:

    如果有,是否有基准,或者我可以比较的地方 许多口译员的性能比较?

    speed.pypy.org 将 pypy 与 cpython 进行比较

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      相关资源
      最近更新 更多