2012-03-30 5 views
7

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

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

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

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

+0

Как правило, примитивные операции и типы на языке высокого уровня должны быть «испечены» в реализации языка, потому что, если они не были волшебным образом предоставлены, каким-то образом не было бы возможности реализовать их на высоком уровне язык. например Попробуйте внедрить 'int' в Python без использования встроенной поддержки. – Ben

ответ

4

PyPy - это две части - интерпретатор Python и инструментарий перевода.

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

Итак, хотя PyPy написан на языке, который является подмножеством Python, это не Python, когда вы его используете.

Вы должны прочитать compiler section of the PyPy Parser docs и this blog post, которые описывают, что функции AST в PyPy зеркально отражают объекты в CPython.

+0

Это помогает ответить на второй вопрос, спасибо! – mvanveen

+2

@mvanveen Каков ваш первый вопрос в точности - все встроенные функции и типы CPython реализованы в C (да) или все стандартные модули библиотеки, включенные в CPython, реализованные в C (нет, многие из них реализованы на Python)? Потому что я не уверен, что вы подразумеваете под «встроенным модулем». – agf

+0

Первый. Спасибо за ответ! – mvanveen