Компиляторы и интерпретаторы

Компилятор и интерпретатор помогают выполнить программу. Компилятор заранее переводит код в форму, которую устройство сможет запустить. Интерпретатор читает программу и выполняет ее по ходу работы.
Зачем это нужно
Когда ученик пишет программу для робота, он видит текст или блоки. Но контроллеру нужны не красивые строки, а выполняемые команды. Между кодом и движением робота есть важный шаг: программу нужно подготовить или выполнить через специальную среду.
Если этот шаг не понимать, ошибки выглядят странно. Код написан, но робот не реагирует. Программа не загружается на плату. На компьютере скрипт запускается, а на микроконтроллере нет. Среда разработки сообщает об ошибке еще до запуска. Все это связано с тем, как программа превращается в выполнение.
Главная идея
Есть два основных подхода.
компилятор: код -> подготовленная программа -> запуск
интерпретатор: код -> выполнение по ходу чтения

Компиляция похожа на подготовку инструкции заранее: сначала проверили и собрали программу, потом загрузили и запустили. Интерпретация похожа на чтение инструкции во время работы: среда читает команды и сразу выполняет их.
Исходный код - это программа в виде, удобном для человека: строки на языке программирования или блоки в визуальной среде.
Компилятор
Компилятор переводит исходный код в другую форму до запуска. В робототехнике это часто встречается при работе с микроконтроллерами. Например, программа для Arduino проходит проверку, сборку и загрузку на плату.
Компилятор может найти ошибки заранее:
- пропущена скобка;
- команда написана неправильно;
- переменная не объявлена;
- тип данных не подходит;
- библиотека не подключена.
Если компиляция не прошла, программа не будет загружена или запущена. Это не поломка робота, а сигнал: код нужно исправить.
Интерпретатор
Интерпретатор выполняет программу во время запуска. Такой подход часто встречается в Python. Ученик может запустить скрипт, быстро изменить строку и снова проверить результат.
Интерпретатор удобен для экспериментов. Например, можно быстро прочитать данные датчика, вывести значение, поменять порог и сразу посмотреть, как изменилось поведение. Но некоторые ошибки проявятся только тогда, когда интерпретатор дойдет до нужной строки.
Один язык может иметь разные реализации. А один проект может использовать и компилируемые, и интерпретируемые части. Для новичка главное - понять саму идею: программа либо заранее готовится к запуску, либо выполняется через среду по ходу работы.
Сравнение
| Вопрос | Компилятор | Интерпретатор |
|---|---|---|
| Когда идет перевод | до запуска | во время выполнения |
| Где часто встречается | C/C++, Arduino-проекты | Python-скрипты, учебные эксперименты |
| Когда видно часть ошибок | до загрузки или запуска | часто во время выполнения |
| Что удобно | готовить программу для платы | быстро проверять идеи |
| Что может мешать новичку | сообщения компилятора выглядят сложными | ошибка может появиться не сразу |
Оба подхода полезны. Компилятор не "лучше" интерпретатора, а интерпретатор не "проще всегда". Выбор зависит от платы, языка, среды и задачи.
Как это выглядит в робототехнике
Рассмотрим два сценария.
Первый сценарий: робот на микроконтроллере.
написали код -> среда собрала программу -> загрузили на плату -> робот выполняет цикл
Второй сценарий: робот или макет управляется с компьютера.
запустили скрипт -> интерпретатор выполняет команды -> робот получает команды
В обоих случаях робот может ехать, читать датчики и включать моторы. Разница в том, где и как программа подготавливается к выполнению.
Пример: загрузка программы в плату

Представим робота на микроконтроллере. У него есть датчик расстояния и два мотора. Программа написана на компьютере.
Путь может быть таким:
- Ученик пишет код в среде разработки.
- Среда проверяет код.
- Компилятор собирает программу.
- Программа загружается в память платы.
- После запуска микроконтроллер выполняет ее без постоянного подключения к компьютеру.
Если во время проверки появилась ошибка, робот еще не виноват. Нужно прочитать сообщение, найти строку и исправить код.
Ошибки компиляции и ошибки выполнения
Ошибки бывают разными.
| Тип ошибки | Когда проявляется | Пример |
|---|---|---|
| Ошибка компиляции | до запуска | забыта скобка или неверно написана команда |
| Ошибка загрузки | при передаче на плату | выбран не тот порт или плата не подключена |
| Ошибка выполнения | во время работы | деление на ноль, неверное значение датчика |
| Ошибка логики | программа запускается, но делает не то | робот поворачивает вправо вместо влево |
Для робототехники особенно важна ошибка логики. Компилятор может сказать, что код записан правильно, но робот все равно поведет себя неверно. Значит, нужно проверять алгоритм, подключение и механическую часть.
Что запомнить про компиляторы и интерпретаторы
| Идея | Как понимать |
|---|---|
| Исходный код удобен человеку | плате нужна выполняемая форма |
| Компилятор готовит программу заранее | ошибки часто видны до запуска |
| Интерпретатор выполняет по ходу | удобно быстро проверять идеи |
| Среда разработки скрывает часть деталей | кнопка "загрузить" может запускать несколько шагов |
| Робот может ошибаться даже при правильном синтаксисе | логика и железо тоже требуют проверки |
Практика
Задание 1
Разделите ошибки по типам.
| Ситуация | Какой тип ошибки? |
|---|---|
| Программа не собирается из-за пропущенной скобки | |
| Среда не видит плату | |
| Робот запускается, но едет назад | |
| Скрипт падает только после нажатия кнопки |
Задание 2
Опишите путь программы для робота на микроконтроллере:
код -> ... -> ... -> робот выполняет
Задание 3
Представьте, что компилятор не нашел ошибок, но робот не останавливается перед препятствием. Запишите три проверки: программу, датчик и подключение моторов.
Проверьте себя
- Что делает компилятор?
- Что делает интерпретатор?
- Почему ошибка компиляции появляется до запуска?
- Почему интерпретируемая программа удобна для экспериментов?
- Чем ошибка логики отличается от ошибки синтаксиса?
- Почему в робототехнике нужно проверять не только код, но и железо?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Исходный код - программа в виде, удобном для человека.
- Компилятор - программа, которая заранее переводит исходный код в выполняемую форму.
- Интерпретатор - программа, которая выполняет исходный код по ходу работы.
- Сборка - процесс подготовки программы к запуску.
- Загрузка на плату - передача программы в микроконтроллер.
- Ошибка компиляции - ошибка, найденная до запуска программы.
- Ошибка выполнения - ошибка, возникающая во время работы программы.
- Ошибка логики - ситуация, когда программа запускается, но делает не то, что нужно.
Связанные темы
- Языки программирования - на каких языках пишут программы для роботов.
- Микроконтроллеры для роботов - куда загружается программа.
- Микроконтроллеры и компьютеры - где может выполняться код.
- Монитор порта Serial - как наблюдать значения и искать ошибки в поведении программы.
Источники
- GCC Online Documentation: https://gcc.gnu.org/onlinedocs/
- Clang Documentation: https://clang.llvm.org/docs/
- Python Documentation. Glossary: https://docs.python.org/3/glossary.html
- Arduino Docs. Getting Started with Arduino: https://docs.arduino.cc/learn/starting-guide/getting-started-arduino/