python内置函数是否总是C扩展(即使在PyPy上)?

mva*_*een 7 python pypy cpython abstract-syntax-tree built-in

我正在研究Python的文档API我正在调用Python Docs,我注意到我的静态分析套件几乎无法访问所有内置函数,因为它们几乎都是C模块.据我所知,我不能想到这条规则有任何例外.

我的问题的第一部分很简单,是否内置模块预先假定是CPython中的C扩展?

假设可能是这种情况,我编译了一个新的pypy运行时,并尝试使用我的项目来反对pypy的内置函数.我惊讶地发现这也不起作用.

为什么PyPy模块不是AST对象,如果它们是纯Python?这是PyPy在JIT上托管的副作用吗?

agf*_*agf 4

PyPy 由两部分组成——Python 解释器和翻译工具链。

翻译工具链将解释器从 RPython 翻译/“编译”为机器代码。

因此,尽管 PyPy 是用 Python 子集的语言编写的,但当您使用它时,它并不是 Python。

您应该阅读PyPy Parser 文档的编译器部分以及这篇博客文章,其中描述了 PyPy 中的 AST 功能镜像了 CPython 中的功能。

  • @mvanveen 你的第一个问题到底是什么——所有 CPython 内置函数和类型都是用 C 实现的(是),还是 CPython 中包含的所有标准库模块都是用 C 实现的(不,许多都是用 Python 实现的)?因为我不确定你所说的“内置模块”是什么意思。 (2认同)