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

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

Существует два различных способа трансляции исходного кода программы в программу на машинном языке – интерпретация и компиляция.

При интерпретации проводится пооператорная трансляция: рассматривается очередной оператор из текста исходной программы, проводится его анализ и сразу исполняется (рисунок 6.12а).

Рисунок 6.12 – Принципиальная схема работы: а – интерпретатор; б – компилятор

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

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

При компиляции транслятор просматривает весь текст исходной программы до ее конца (иногда несколько раз – такие компиляторы называют многопроходными) и создает последовательность данных, которая называется объектным кодом (см. рисунок 6.12б). Объектный код еще не является полным аналогом программы. Необходим дополнительный этап, который называется редактированием связей (или компоновкой). На этом этапе происходит объединение объектного кода программы (объектного модуля) и объектного кода подпрограмм, взятых из внешних библиотек. Операцию компоновки кода выполняет отдельная программа, которая называется редактором связей или компоновщиком. Результатом этого этапа является так называемый загрузочный модуль. Он представляет собой набор машинных команд, реализующих соответствующий алгоритм, записанный в программе на языке высокого уровня.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: