Из статьи вы узнаете, из каких элементов состоит Интерпретатор Python, как он работает и на каком языке он написан.
Компилируемые и интерпретируемые языки программирования
Любые языки программирования высокого уровня ближе к человеческому, чем к машинному языку. И код, написанный на таких языках программирования нужно перевести в понятный для компьютера язык (машинный язык). Такими переводчиками с человеческого языка на машинный язык стали компиляторы и интерпретаторы. Поэтому все высокоуровневые языки программирования делятся на компилируемые и интерпретируемые.
Если язык программирования компилируемый, например С. То написав код программы, вы должны вначале этот код скомпилировать, то есть целиком перевести на машинный язык. Далее, полученный бинарный файл можно будет выполнять. Такие, бинарные файлы, платформа-зависимы, то есть для разных операционных систем или типов процессоров нужно отдельно компилировать высокоуровневый код. Зато бинарные файлы очень быстрые, ведь в них записан машинный код, который выполняется напрямую процессором.
А если язык программирования интерпретируемый, например Python. То написанный код может выполняться на любой операционной системе, главное чтобы там был установлен Интерпретатор этого языка. Это называется — платформонезависимость. Интерпретатор построчно выполняет высокоуровневый код. При этом, построчно переводит инструкции с высокоуровневого языка на машинный язык. Такое выполнение намного медленнее, чем выполнение скомпилированной программы.
Интерпретатор Python
Как вы уже поняли, язык Python — интерпретируемый. Это означает, чтобы в вашей операционной системе работал код, написанный на Python, вам нужно установить Интерпретатор Python.
Выполняет написанный высокоуровневый код, не процессор, а именно Интерпретатор. Например, чтобы выполнить код на языке Python, вы обычно выполняете подобную команду:
# python3 program.py
То есть вы просите интерпретатор (python3) выполнить код, написанный в файле (program.py). Интерпретатор читает и выполняет файл и выдаёт нам результат.
Но давайте поближе познакомимся с Интерпретатором Python, ведь он не так прост как кажется. Он написан на языке С, и что более интересно, он содержит в себе компилятор. Этот встроенный компилятор переводит написанный на языке Python код в байт-код.
Байт-код это не машинный код, то-есть он не выполняется напрямую на процессоре. Зато он выполняется быстрее, чем выполнялся бы высокоуровневый код на Python. А ещё байт-код остаётся платформонезависимым, то есть не зависит от операционной системы и типа процессора. Байт-код выполняется на специальной виртуальной машине, которая тоже встроена в Интерпретатор Python (Python VM — PVM).
Теперь схема становится более интересной, ведь мы знаем что внутри интерпретатора работает компилятор и виртуальная машина:
- Мы просим интерпретатор (python3) выполнить написанную программу (program.py).
- Интерпретатор забирает файл программы и отдаёт её компилятору.
- Компилятор создаёт байт-код (program.pyc) и выполняет его на виртуальной машине (PVM).
- И в конце мы получаем результат.
При этом, когда компилятор создавал байт-код, то он положил его в каталог _pycache_ (файл program.pyc). При следующем запуске этой же программы повторная компиляция не потребуется, что ускорит выполнение.
Такая схема ускоряет выполнение написанного на Python кода. А такой интерпретатор называется CPython — ведь он написан на C.
Некоторые, умные люди, посмотрели на эту схему и сделали другие реализации интерпретаторов для Python:
- Jython — компилятор компилирует исходный код в байт-код Java, а затем выполняет его на JVM.
- IronPython — подобная реализация для .NET.
- Есть и другие реализации Интерпретаторов Python.
Итог
Думаю стало понятнее, почему в каталоге с вашей программой может появляться каталог _pycache_ с файлами с расширением .pyc. И почему повторное выполнение программ происходит быстрее.
По этой же теме можете посмотреть интересное видео.
Возможно Вам также понравиться следующая статья — Python 3. Вывод текста на консоль. Функция print().