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

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

Интерпретаторы берут оператор из текста программы, анализируют его структуру и сразу исполняют. Компиляторы полностью обрабатывают весь текст программы

Интерпретаторы функционируют следующим образом: берут очередной оператор языка из текста программы, анализируют его структуру и затем сразу исполняют. После успешного выполнения текущей команды все интерпретаторы переходят к анализу и исполнению следующей команды. Если один и тот же оператор в программе выполняется несколько раз, интерпретаторы всякий раз воспринимают его так, будто встретили впервые. Поэтому программы, в которых требуется произвести большой объем повторяющихся вычислений, будут работать медленно. Для выполнения программы на другом компьютере также необходимо установить интерпретатор, так как без него программа представляет собой набор слов и работать не может.

Компиляторы полностью обрабатывают весь текст программы. Они осуществляют поиск синтаксических ошибок, выполняют семантический анализ и только затем, если текст в точности соответствует правилам языка, его автоматически переводят (транслируют) на машинный язык – объектный код. Нередко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы. Сгенерированный объектный код обрабатывается специальной программой – сборщиком или редактором связей, который производит связывание объектного и машинного кодов. Текст преобразуется в готовый к исполнению ЕХЕ-файл. Его можно перенести на другие компьютеры с процессором, поддерживающим соответствующий машинный код.

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

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

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

Инструменты