Всегда ли встроенные в Python расширения C (даже в PyPy)?

Я работаю над API документации для Python. Я звоню в Python Docs и заметил, что почти все встроенные мой пакет статического анализа не может получить к ним доступ, потому что это почти исключительно модули C. Насколько я помню, я не могу придумать ни одного исключения из этого правила.

Первая часть моего вопроса заключается в том, что наличие встроенного модуля предполагает наличие C-расширения в CPython?

Предполагая, что это может быть так, я скомпилировал новую среду выполнения pypy и попытался использовать свой проект со встроенными модулями из pypy. Я был удивлен, обнаружив, что это тоже не работает.

Почему модули PyPy недоступны для объектов AST, если они представляют собой чистый Python? Является ли это побочным эффектом размещения PyPy на JIT?


person mvanveen    schedule 30.03.2012    source источник
comment
Как правило, примитивные операции и типы в языке высокого уровня должны быть встроены в языковую реализацию, потому что, если бы они не были обеспечены каким-то волшебным образом, не было бы способа реализовать их в языке высокого уровня. например Попробуйте реализовать int на Python, не используя встроенную поддержку.   -  person Ben    schedule 03.04.2012


Ответы (1)


PyPy состоит из двух частей — интерпретатора Python и набора инструментов для перевода.

Инструментарий перевода переводит/«компилирует» интерпретатор из RPython в машинный код.

Таким образом, хотя PyPy написан на языке, являющемся подмножеством Python, при его использовании это не Python.

Вам следует прочитать раздел о компиляторе документации PyPy Parser и этот пост в блоге, в котором описывается, что функции AST в PyPy отражают функции в CPython.

person agf    schedule 30.03.2012
comment
@mvanveen Каков именно ваш первый вопрос - все ли встроенные функции и типы CPython реализованы в C (да) или все стандартные библиотечные модули, включенные в CPython, реализованы в C (нет, многие реализованы в Python)? Потому что я не уверен, что вы подразумеваете под встроенным модулем. - person agf; 30.03.2012
comment
Бывший. Спасибо за ответ! - person mvanveen; 30.03.2012