Когда разработчики пишут код, они сразу понимают — это у них скрипт или классическая программа, которая потом превращается в команды для компьютера. Но начинающим часто сложно быстро разобраться, в чём различие, ведь и то и другое — код. Чтобы показать разницу между языками программирования, объясним всё на простых картинках.
Допустим, у нас есть два исходных кода, которые делают что-то полезное:
С точки зрения человека, всё это — программный код, который понятен компьютеру и который сделает то, что нам нужно. Но компьютер смотрит на это иначе: первый код для него — это скрипт, а второй — код, который ещё нужно будет перевести в машинные команды:
Чтобы компьютер мог выполнить код на любом языке программирования, ему нужно перевести команды, понятные человеку, в команды, понятные компьютеру. Есть два способа это сделать: использовать интерпретатор или компилятор.
Теперь копнём глубже.
Интерпретатор
Интерпретатор — это программа, которая берёт строки кода по очереди и выполняет их шаг за шагом. Выполняет — это значит она:
- Берёт текущую команду
- Смотрит, что нужно сделать с этой командой.
- Формирует на машинном языке мини-программу, которая делает то, что указано в команде.
- Отдаёт её компьютеру на выполнение.
- Переходит к следующей команде.
Чаще всего интерпретируемые языки называют скриптовыми языками.
Получается, что для интерпретатора неважно, что написано после текущей команды, — он работает только с той, до которой дошёл на очередном шаге.
Если в тексте программы будет ошибка, то интерпретатор не среагирует на неё до тех пор, пока не дойдёт до строки с ошибкой. Он выполнит все команды до этой, а потом остановится и выдаст сообщение об ошибке:
Из-за этого иногда сложнее искать ошибки в коде — мы про них не узнаем, пока не дойдём до неправильной команды. Сейчас многие интерпретаторы проверяют быстро базовый синтаксис и смотрят, правильно ли вообще написаны команды. Но если ошибка в логике или в неправильном использовании переменной — об этом мы узнаем, только когда дойдём до них.
Компилятор
Компилятор — это программа, которая берёт код целиком и перед запуском сразу переводит весь код в машинный язык.
Компилятор анализирует всё, что происходит в коде на каждом этапе, и, если есть ошибки в синтаксисе, неправильном использовании команд, объектов или их свойств, компиляция останавливается и выводятся сообщения обо всех найденных ошибках. Компиляция — это как раз перевод команд языка программирования в машинный язык. Интерпретатор это делает для каждой строки кода, а компилятор — для программы в целом.
Главное различие компилируемого и интерпретируемого кода
Для работы скрипта (интерпретируемого кода) нужен интерпретатор — без него компьютер не сможет перевести скриптовые команды в понятный для себя язык. Сколько раз нам нужно запустить программу, столько раз нам понадобится интерпретатор.
А вот для работы классического (компилируемого) кода достаточно один раз его скомпилировать и перевести в машинный язык — после этого мы получим исполняемый файл, который можно запустить на любом компьютере с такой же архитектурой и операционной системой. Один раз скомпилировали — и запускаем сколько угодно раз.
При чём тут Python и C++?
Python и JavaScript — скриптовые языки, поэтому для запуска их программ нужен интерпретатор. В случае с JavaScript интерпретатором выступает браузер, а с Python — одноимённая программа. Они берут скрипты и шаг за шагом выполняют, что в них написано. Не будет браузера или другого интерпретатора — не получится запустить JavaScript. На компьютере не установлен Python — не получится запустить .py-скрипт.
C++ и Swift — компилируемые языки. Это значит, что после успешной компиляции можно взять получившийся файл и запустить его на том компьютере, где нет никакой среды разработки. Этот файл уже не зависит ни от чего и может работать где угодно.