我正在阅读pypy 的文档,其中有一个名为Translating the PyPy Python interpreter的部分。但是我不明白翻译这个词是什么意思。和编译一样吗?
文件说:
首先为您的架构下载一个预构建的 PyPy,您将使用它来翻译您的 Python 解释器。
这里预建的PyPy是指源码吗?因为我下载的二进制文件中没有 pypy/goal 目录。如果是这样,则文档有问题。这是误导。
翻译中创建的 pypy-c 是否与二进制文件中的 bin/pypy 相同?
我不明白翻译这个词是什么意思。和编译一样吗?
The RPython Toolchain中详细描述了“翻译”的含义。编码指南和常见问题解答中还有一些更高级的介绍信息。
总结他们的总结:
因此,第 1 步使用普通的 Python 编译器,第 7 步使用普通的 C 编译器(和链接器),第 3 步和第 4 步类似于优化编译器通常所做的事情。但是将整个过程称为“编译”会产生误导。(此外,人们可能会将其解释为类似于 Shedskin 所做的事情,这绝对是不对的。)
翻译中创建的 pypy-c 是否与二进制文件中的 bin/pypy 相同?
二进制分发的结果与在翻译目标上运行安装过程基本相同。所以,是的,goal/pypy-c
并且bin/pypy
实际上是同一件事。
这里预建的PyPy是指源码吗?
不,它指的是bin/pypy
来自二进制发行版的 a。正如文档所说,您实际上可以使用任何Python 2.6+,包括 CPython,或goal/pypy-c
以前构建的剩余版本等。但是,翻译器可能会在标准 PyPy 二进制发行版上运行得最快,所以这就是您应该使用的,除非你有充分的理由不这样做。
让我尽我所能 - 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 编译器)。