Работа Python изнутри

Работа Python изнутри

@Pycoders
Для успешного программирование этого всего знать не обязательно, но иногда полезно понимать, что и как работает.

Различие компиляторов и интерпретаторов

Сейчас не будем вникать в особенности разных языков, просто поймем основную разницу между ними.

Компиляторы принимают на вход код на каком-либо языке программирования и выдают уже машинный код, который уже можно непосредственно запускать.

Интерпретаторы в свою очередь выполняют программный код сразу на ходу, поочередено.

Байт-код и машинный код

Для начала стоит знать, что реализаций пайтона огромное количество, но мы разберем эталонную - CPython. Скорее всего, именно она у вас и установлена.

CPython является интерпретатором байт-кода на C (Си - язык программирования).

Допустим, мы запсукаем обычную программу. В это время CPython прверащает код в так называемый байт-код, который он сам же потом исполняет, давая команды процессору.

Важно понимать, машинный код и байт-код - разные понятия. Машинный код исполняет сам компьютер, а байт-код виртуальная машина. ВМ работает как процессор компьютера, но понимает только свой язык. По факту, виртуальная машина - посредник между байт-кодом и процессором вашего компьютера.

Машинный код работает быстрее за счет того, что нет посредника в виде абстракции процессора. Плюсом байт-кода является кроссплатформенность.

В принципе, это всё, что следует знать о работе пайтона. Дальше - дебри.

Суть работы CPython

При выполнении программы запускается бинарник Пайтона, инициализируется стандартная библиотека C (это происходит при запуске практически любого процесса), вызывается main-функция (смотрите исходники ./Modules/python.c: main, из которой вызывается ./Modules/main.c: Py_Main). После некоторых подготовительных шагов (разбор аргументов, учёт переменных окружения, оценка ситуации со стандартными потоками и т.д.), вызывается ./Python/pythonrun.c: Py_Initialize.

По большому счёту, в этой функции «создаются» и собираются части, необходимые для запуска CPython-машины, и просто «процесс» превращается в «процесс с интерпретатором Питона внутри». Помимо этого, создаются две очень важные структуры: состояния интерпретатора и состояния потока. Также, инициализируется встроенный модуль sys и модуль, в котором содержатся все встроенные функции и переменные.


Не вижу смысла подробно всё описывать здесь, поэтому оставлю ссылки на статьи, где всё описывается макимально подробно:

https://habr.com/company/buruki/blog/189972/

https://habr.com/company/buruki/blog/189986/

https://habr.com/company/buruki/blog/190336/

https://habr.com/company/buruki/blog/191032/


Report Page