翻译在pypy中意味着什么?

时间:2013-06-04 00:50:14

标签: python pypy

我正在阅读pypy's document,其中有一节名为翻译PyPy Python解释器。但我不明白翻译这个词是什么意思。它与 compile 相同吗?

该文件说:

  

首先为您的架构下载一个预先构建的PyPy,您将用它来翻译您的Python解释器。

这里的预先构建的PyPy 是否参考了源代码?因为我下载的二进制文件中没有pypy / goal目录。如果是这样,该文档有问题。这是误导。

翻译中创建的pypy-c与二进制文件中的bin / pypy相同吗?

2 个答案:

答案 0 :(得分:3)

  

我不明白翻译这个词是什么意思。它和compile一样吗?

The RPython Toolchain中详细描述了“翻译”的含义。 Coding GuideFAQ中还有一些更高级别的介绍性信息。

总结他们的总结:

  1. 编译并导入完整的RPython程序。
  2. 动态分析程序并使用流程图对其进行注释。
  3. 将流程图编译为较低级别的流程图。
  4. 优化已编译的流程图。
  5. 分析已编译和优化的流程图。
  6. 从流程图和分析中生成C源。
  7. 编译C源并将其链接到本机可执行文件。
  8. 因此,第1步使用普通的Python编译器,第7步使用普通的C编译器(和链接器),第3步和第4步与优化编译器通常使用的类似。但是将整个过程称为“汇编”将会产生误导。 (此外,人们可能会将其解释为类似于Shedskin所做的事情,这绝对不是正确的。)

      

    翻译中创建的pypy-c与二进制文件中的bin / pypy相同吗?

    二进制分发中的最终结果与在转换目标上运行安装过程基本相同。所以,是的,goal/pypy-cbin/pypy实际上是相同的。

      

    这里预先构建的PyPy是否引用了源代码?

    没有。它指的是二进制分布中的bin/pypy。正如文档所说,你实际上可以使用任何 Python 2.6+,包括CPython,或者从之前版本中遗留下来的goal/pypy-c等等。但是,翻译者可能会在标准的PyPy二进制分布,除非你有充分的理由否则应该使用它。

答案 1 :(得分:2)

让我告诉你我能做什么--PyPy有几件事:

  1. 使用Just-In-Time编译器(用RPython编写)快速实现Python
  2. RPython JIT编译器编译器
  3. 当文档谈到翻译解释器时,他们正在谈论从Python编译器的RPython实现中为Python生成JIT编译器。

    Python Compiler (Written in RPython)
        |--[RPython to JIT compiler compiler]--> 
            PyPy (JIT'ed Python Interpreter)
    

    需要注意的关键是“编译器编译器”不是拼写错误。 RPython是用于生成JIT编译器的工具链的一部分。而不是为您的语言编写编译器,然后为您的编译器编写JIT层(这可能既困难又耗时),而是在RPython中实现您的语言,而RPython翻译工具链写一个JIT编译器你的语言

    最简单的思考方法是想象PyPy团队没有编写自己的JIT编译器编译器。想象一下,Topaz (JIT Ruby)首先出现,并且团队已经在Ruby中编写了一个JIT编译器编译器(我们称之为RRuby)。然后PyPy团队会在RRuby中编写PyPy编译器(相反,由于PyPy首先出现,Topaz团队正在RPython中实现他们的JIT Ruby编译器。)