Компиляторы и интерпретаторы – постоянные спутники программистов, хотя некоторыми из этих программ пользуются каждый день обычные пользователи, не подозревая об этом. Речь, конечно, в этом случае идет о скриптовых языках, встроенных в Windows и множество офисных программ. Но «настоящие» компиляторы – инструмент суровых программистов.

Можно знать, а можно и не знать о том, что почти все программы сейчас пишутся на языках высокого уровня. Текст программы при большом желании можно прочитать, а при еще большем – даже понять, так как все команды в ней представлены обычно английскими словами или их словосочетаниями. Так, команда «for» в Паскале, Си или Бейсике позволяет организовать цикл выполнения некоего блока команд – «для i:=1 до 10 делать <блок операторов>». Не сильно наглядно, но ясно, что здесь 10 раз выполнится некий блок операторов. Эта «понятность» нужна только людям. Ну, и еще для того, чтобы была возможность перенести программу в исходном виде в другую операционную систему любого компьютера, где поддерживается данный язык программирования.

К сожалению или нет, но процессор компьютера не понимает таких простых и естественных команд: он оперирует командами более низкого уровня. Скажем, данная конструкция будет выглядеть так:

  1. Поместить в счетчик число 10;
  2. Обнулить регистр;
  3. Прибавить к регистру 1;
  4. Сравнить регистр со счетчиком;
  5. Если оба равны, то перейти к шагу 8;
  6. <Блок операторов>;
  7. Перейти к шагу 3;
  8. Конец программы.

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

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

Работа интерпретатора организована проще: обычно это среда выполнения, где программа читает программу построчно, переводит каждую строку во внутренний формат и выполняет ее. Скорость выполнения программы при этом резко падает, зато при такой модели выполнения очень легко искать ошибки в программе. К примеру, все старые версии Бейсика работали именно таким образом, а некоторые языки программирования могут работать исключительно в интерпретирующем режиме (включая даже серверные языки вроде PHP).

captcha