Интерпретатор и компилятор – это инструменты позволяющие преобразовать исходный код программы в код понятный машине.
Схема работы компилятора:
- берёт исходный код программы и анализирует его;
- преобразует программный код в машинный код;
- создаёт файл с байт кодом (зачастую это exe файл);
- передаёт запускной файл ОС.
Схема работы интерпретатора:
- берёт исходный код программы и анализирует его;
- интерпретирует программный код в машинный код и сразу его выполняет.
Основная разница между ними состоит в следующем:
- Компилятор обрабатывает сразу весь программный код после чего выдаёт результат, интерпретатор же берет одну инструкцию, преобразует и выполняет ее, а затем берет следующую инструкцию.
- Компилятор генерирует отчет об ошибках после преобразования, а интерпретатор при нахождении ошибки прекращает свою работу.
- Компилятор по сравнению с интерпретатором требует больше времени для анализа и обработки программного кода.
- Созданный компилятор запускной файл программы будет работать быстрее чем запуск той же программы через интерпретатор.
У интерпретаторов и компиляторов есть свои преимущества (+) и недостатки (-).
Для компилятора это:
+ откомпилированные компилятором программы работают быстрее, поскольку ненужно заново проходить этап анализа и преобразования исходного кода в машинный код.
+ отсутствие надобности компилятора на компьютере пользователя;
+ генерируется отчёт об ошибках;
- программа имеет зависимость от ОС (если программа откомпилирована под одну ОС, то в другой она работать не будет);
- после запуска скомпилированной программы ОС практически теряет контроль над ней. ОС
получает управление лишь по инициативе выполняющейся программы в те моменты, когда необходимо выполнить системную функцию (записать данные в файл, прочитать значение таймера и т.д.). Если скомпилированная программа самостоятельно (без помощи ОС) обратится к ресурсам компьютера, никто не в силах ей помешать
Для интерпретатора:
- для запуска программы требуется наличие интерпретатора;
- скорость работы программы ниже в сравнении со скомпилированной программой;
+ кроссплатформенность.
+ имеют более совершенные и наглядные средства диагностики ошибок в исходных кодах.
+ меньшие размеры кода по сравнению с машинным кодом, полученным после компиляторов.