我正在阅读pypy's document,其中有一节名为翻译PyPy Python解释器。但我不明白翻译这个词是什么意思。它与 compile 相同吗?
该文件说:
首先为您的架构下载一个预先构建的PyPy,您将用它来翻译您的Python解释器。
这里的预先构建的PyPy 是否参考了源代码?因为我下载的二进制文件中没有pypy / goal目录。如果是这样,该文档有问题。这是误导。
翻译中创建的pypy-c与二进制文件中的bin / pypy相同吗?
答案 0 :(得分:3)
我不明白翻译这个词是什么意思。它和compile一样吗?
The RPython Toolchain中详细描述了“翻译”的含义。 Coding Guide和FAQ中还有一些更高级别的介绍性信息。
总结他们的总结:
因此,第1步使用普通的Python编译器,第7步使用普通的C编译器(和链接器),第3步和第4步与优化编译器通常使用的类似。但是将整个过程称为“汇编”将会产生误导。 (此外,人们可能会将其解释为类似于Shedskin所做的事情,这绝对不是正确的。)
翻译中创建的pypy-c与二进制文件中的bin / pypy相同吗?
二进制分发中的最终结果与在转换目标上运行安装过程基本相同。所以,是的,goal/pypy-c
和bin/pypy
实际上是相同的。
这里预先构建的PyPy是否引用了源代码?
没有。它指的是二进制分布中的bin/pypy
。正如文档所说,你实际上可以使用任何 Python 2.6+,包括CPython,或者从之前版本中遗留下来的goal/pypy-c
等等。但是,翻译者可能会在标准的PyPy二进制分布,除非你有充分的理由否则应该使用它。
答案 1 :(得分:2)
让我告诉你我能做什么--PyPy有几件事:
当文档谈到翻译解释器时,他们正在谈论从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编译器。)