Все сводится к встроенным объектам в Python? - PullRequest
0 голосов
/ 02 марта 2019

Существуют такие функции, как print, которые встроены в CPython, а также есть другие функции, такие как os.makedirs, которые записываются во внешние файлы .py (т.е. в os.py).

Насколько я знаю, print() будет вызывать некоторый код C, который уже написан внутри CPython, и этот код C будет скомпилирован в байт-код для понимания компьютером.

Что происходитв случае os.makedirs?Это не встроено в CPython, поэтому CPython ничего не знает о os.makedirs.

Или makedirs использует некоторые объекты, которые можно отследить до встроенных объектов, о которых CPython знает?

Например, os.py импортирует abc.py, который импортирует _weakrefset.py, который в конечном итоге импортирует встроенный _weakref объект?Таким образом, os.py можно проследить до встроенного объекта _weakref, для которого CPython имеет некоторый C-код.

1 Ответ

0 голосов
/ 02 марта 2019

Все сводится к встроенным объектам в Python? Это зависит от того, что вы подразумеваете под вопросом, но если догадаться, что вы говорите о потоке кода, тогда ответ - нет.

Возьмите реализацию Python для C в качестве нашего эталона - помните, что существуют версии Python, написанные на Java, C # и даже Python.Модули могут быть написаны на C или C ++, поскольку для этого есть API.

Возьмите создание каталога (mkdir).В какой-то момент это потребует вызова ядра, которое зависит от операционной системы.Например, будет интерфейс Windows и UNIX или Posix для выполнения вызова ядра, и он почти наверняка будет написан на C. Это потому, что большинство современных операционных систем имеют API ядра C, а не Python.

См., Например, Modules/posixmodule.c в исходном коде Python, где вызывается интерфейс ядра ОС mkdir.Интерфейсу C для создания каталога требуется только текстовая строка (, а не объект python str), восьмеричное целое число C для разрешений и переменная для хранения ее результата.Они должны быть преобразованы между C и Python, но могут быть другие типы, используемые внутренне модулем, которые являются чистым C и не нуждаются в преобразовании обратно в python.

Только потому, что модуль написан на Cне означает, что это встроенный (часть модуля builtin).Вы можете написать свой собственный модуль C и вызывать его из python - пользователю python не нужно знать, на каком языке он написан, который обычно невидим.

...