Как выглядит интерпретатор python

Как работает Python: интерпретатор, байт-код, PVM

Python — интерпретируемый язык программирования. Он не конвертирует свой код в машинный, который понимает железо (в отличие от С и С++). Вместо этого, Python-интерпретатор переводит код программы в байт-код, который запускается на виртуальной машине Python (PVM). Давайте рассмотрим подробнее, как это работает на примере самой популярной реализации интерпретатора — CPython.

Интерпретатор — это программа, которая конвертирует ваши инструкции, написанные на Python, в байт-код и выполняет их. По сути интерпретатор — это программный слой между вашим исходным кодом и железом.

Существует 2 типа интерпретаторов:

  • Простой интерпретатор . Он берет одну инструкцию, транслирует и сразу выполняет ее, а затем берет следующую инструкцию.
  • Интерпретатор компилирующего типа . Это система из компилятора и интерпретатора. Компилятор переводит исходный код программы в промежуточное представление (байт-код), а интерпретатор (виртуальная машина) выполняет этот байт-код.
  • Интерпретатор компилирующего типа (благодаря этому достигается большее быстродействие выполнения программ).
  • Считается эталонной реализацией языка Python.
  • Написан на C.
  • Исходный код CPython находится в открытом доступе.
  • Его разработка ведётся группой разработчиков под руководством Гвидо ван Россума — создателя Python.

Кроме этого, у интерпретатора CPython есть особенность — он может работать в режиме диалога (REPL — read-eval-print loop). Интерпретатор считывает законченную конструкцию языка, выполняет её, печатает результаты и переходит к ожиданию ввода пользователем следующей конструкции.

Как CPython выполняет программы

Интерпретатор «Питона» выполняет любую программу поэтапно.

Этап #1. Инициализация

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

Читайте также:  Php рекурсивное удаление папок

Помимо этого, происходит ряд подготовительных процессов:

  • анализ аргументов командной строки;
  • установка флагов программы;
  • чтение переменных среды и т.д.

Этап #2. Компиляция

Интерпретатор транслирует (переводит) исходные инструкции вашей программы в байт-код (низкоуровневое, платформонезависимое представление исходного текста). Такая трансляция необходима в первую очередь для повышения скорости — байт-код выполняется в разы быстрее, чем исходные инструкции.

Если Python-интерпретатор обладает правом записи, он будет сохранять байт-код в виде файла с расширением .pyc . Если исходный текст программы не изменился с момента последней компиляции, при следующем запуске вашей программы, Python сразу загрузит файл .pyc , минуя этап компиляции (тем самым ускорит процесс запуска программы).

Этап #3. Выполнения

Как только байт-код скомпилирован, он отправляется на виртуальную машину Python (PVM). Здесь выполняется байт-код на PVM. Если во время этого выполнения возникает ошибка, то выполнение останавливается с сообщением об ошибке.

PVM является частью Python-интерпретатора. По сути это просто большой цикл, который выполняет перебор инструкций в байт-коде и выполняет соответствующие им операции.

Альтернативы CPython

CPython является стандартной реализацией, но существуют и другие реализации, созданные для специфических целей и задач.

Jython

Основная цель данный реализации — тесная интеграция с языком Java. Работает следующим образом:

  1. Java-классы выполняют компиляцию программного кода на языке Python в байт-код Java.
  2. Полученный байт-код запускается на виртуальной машине Java (JVM).

Jython позволить Python-программам управлять Java-приложениями. Во время выполнения такая программа ведет себя точно так же, как настоящая программа на языке Java.

IronPython

Предназначена для обеспечения интеграции Python-программ с C# приложениями на Microsoft .NET Framework или Mono. Принцип работы такой же, как и у Jython.

PyPy

PyPy — это интерпретатор Python, написанный на Python (если быть точнее, то на RPython).

Особенностью PyPy является использование трассирующего JIT-компилятора (just-in-time), который на лету транслирует некоторые элементы в машинный код. Благодаря этому, при выполнении некоторых операций PyPy обгоняет CPython в несколько раз. Но плата за такую производительность — более высокое потребление памяти.

Источник

Sysadminium

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

Компилируемые и интерпретируемые языки программирования

Любые языки программирования высокого уровня ближе к человеческому, чем к машинному языку. И код, написанный на таких языках программирования нужно перевести в понятный для компьютера язык (машинный язык). Такими переводчиками с человеческого языка на машинный язык стали компиляторы и интерпретаторы. Поэтому все высокоуровневые языки программирования делятся на компилируемые и интерпретируемые.

Если язык программирования компилируемый, например С. То написав код программы, вы должны вначале этот код скомпилировать, то есть целиком перевести на машинный язык. Далее, полученный бинарный файл можно будет выполнять. Такие, бинарные файлы, платформа-зависимы, то есть для разных операционных систем или типов процессоров нужно отдельно компилировать высокоуровневый код. Зато бинарные файлы очень быстрые, ведь в них записан машинный код, который выполняется напрямую процессором.

А если язык программирования интерпретируемый, например Python. То написанный код может выполняться на любой операционной системе, главное чтобы там был установлен Интерпретатор этого языка. Это называется — платформонезависимость. Интерпретатор построчно выполняет высокоуровневый код. При этом, построчно переводит инструкции с высокоуровневого языка на машинный язык. Такое выполнение намного медленнее, чем выполнение скомпилированной программы.

Интерпретатор Python

Как вы уже поняли, язык Python — интерпретируемый. Это означает, чтобы в вашей операционной системе работал код, написанный на Python, вам нужно установить Интерпретатор Python.

Выполняет написанный высокоуровневый код, не процессор, а именно Интерпретатор. Например, чтобы выполнить код на языке Python, вы обычно выполняете подобную команду:

То есть вы просите интерпретатор (python3) выполнить код, написанный в файле (program.py). Интерпретатор читает и выполняет файл и выдаёт нам результат.

Но давайте поближе познакомимся с Интерпретатором Python, ведь он не так прост как кажется. Он написан на языке С, и что более интересно, он содержит в себе компилятор. Этот встроенный компилятор переводит написанный на языке Python код в байт-код.

Байт-код это не машинный код, то-есть он не выполняется напрямую на процессоре. Зато он выполняется быстрее, чем выполнялся бы высокоуровневый код на Python. А ещё байт-код остаётся платформонезависимым, то есть не зависит от операционной системы и типа процессора. Байт-код выполняется на специальной виртуальной машине, которая тоже встроена в Интерпретатор Python (Python VM — PVM).

Теперь схема становится более интересной, ведь мы знаем что внутри интерпретатора работает компилятор и виртуальная машина:

  1. Мы просим интерпретатор (python3) выполнить написанную программу (program.py).
  2. Интерпретатор забирает файл программы и отдаёт её компилятору.
  3. Компилятор создаёт байт-код (program.pyc) и выполняет его на виртуальной машине (PVM).
  4. И в конце мы получаем результат.

При этом, когда компилятор создавал байт-код, то он положил его в каталог _pycache_ (файл program.pyc). При следующем запуске этой же программы повторная компиляция не потребуется, что ускорит выполнение.

Такая схема ускоряет выполнение написанного на Python кода. А такой интерпретатор называется CPython — ведь он написан на C.

Некоторые, умные люди, посмотрели на эту схему и сделали другие реализации интерпретаторов для Python:

  • Jython — компилятор компилирует исходный код в байт-код Java, а затем выполняет его на JVM.
  • IronPython — подобная реализация для .NET.
  • Есть и другие реализации Интерпретаторов Python.

Итог

Думаю стало понятнее, почему в каталоге с вашей программой может появляться каталог _pycache_ с файлами с расширением .pyc. И почему повторное выполнение программ происходит быстрее.

По этой же теме можете посмотреть интересное видео.

Возможно Вам также понравиться следующая статья — Python 3. Вывод текста на консоль. Функция print().

Источник

Оцените статью