Найти тему
Clever Python

Плюсы и минусы компиляции и интерпретации. Краткий обзор

Наверно каждый слышал, что питон - это интерпретируемый язык программирования, но не каждый знает что за этим кроется.

Что такое язык программирования. Трансляторы.

Для начала разберёмся что такое «язык программирования». Как можно понять из названия - это, как и любой другой язык (русский, немецкий, английский) набор правил, слов, букв и взаимосвязей на котором человек может изъясняться, тут никаких отличий нет кроме того что на обычном языке мы общаемся друг с другом, а на языках программирования мы объясняемся с машиной.

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

Так как же машины понимают что мы от них хотим?

С этой задачей нам помогают уже написанные программы, которые называются трансляторы и делятся на два вида:

  • компиляторы
  • Интерпретаторы

Отличие между ними лежит на поверхности.

Блок-схема жизни программы от идеи до запуска для компилируемых и интерпретируемых языков.
Блок-схема жизни программы от идеи до запуска для компилируемых и интерпретируемых языков.

Компиляторы

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

Получается компиляторы на выходе дают так сильно любимые нам файлы с расширением .exe .msi и множество других (для каждой операционной системы они кстати свои)

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

С интерпретаторами все сводится к похожей схеме, но с небольшими отклонениями.

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

Что лучше?

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

Зачем тогда нужны интерпретаторы если они работают медленнее?

Все просто, дело в удобстве и комфорте, который мы все так любим. Применение интерпретатором позволяет запускать один и тот же код (в особых случаях с минимальными изменениями) на разных операционных системах. То есть если код скомпилировать, то он компилируется под определённую операционную систему (или версию операционной системы) и может использоваться только на ней. Если вам нужно написать приложение под windows, Linux, Mac OS то придётся писать три отличающихся кода и запускать три разных компилятора. В случае с интерпретатором все проблемы совместимости (ну почти все) он берет на себя. И в итоге один и тот же файл может исполняться на любой версии ос если ее поддерживает интерпретатор

-2

Кстати если язык интерпретируемый это не значит что его нельзя скомпилировать, просто для этого нужно использовать специальные инструменты.

Python, например по умолчанию интерпретируемый, но его возможно скомпилировать с помощью специальных модулей.

На нашей практике был интересный кейс с попыткой ускорения выполнения кода на Python, без изменений в самом коде, исключительно с помощью замены интерпретаторов и компилировании кода, если интересно почитать на эту тематику, либо вы сами можете порекомендовать инструменты для ускорения Python, пишите в комментариях!