Главная страница / 27. Трансляция, компиляция и интерпретац...: 27.1. Трансляция, компиля...
27.1. Трансляция, компиляция и интерпретация
← 26.4. Контрольные вопросы и задания | 27.2. Контрольные вопросы и задания → |
Язык программирования задается описанием и реализуется в виде специальной программы – транслятора. Существует два вида трансляторов – компиляторы и интерпретаторы. Соответственно и языки программирования делятся на два класса – компилируемые и интерпретируемые.
Текст программы, записанный на каком-либо компилируемом языке, при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполняемый файл, который может быть запущен на выполнение как отдельная программа. То есть компилятор переводит программу с языка высокого уровня на низкоуровневый язык, понятный процессору.
Если же программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) ее текст без предварительного перевода. То есть компилятор переводит программу на машинный язык сразу и целиком, создавая при этом отдельную программу, а интерпретатор переводит на машинный язык прямо во время исполнения программы. Можно сказать, что процессор компьютера — это аппаратный интерпретатор машинного кода.
Разделение на компилируемые и интерпретируемые языки является достаточно условным. Так, для любого традиционно компилируемого языка (например, Паскаль) можно написать интерпретатор, как и для интерпретируемого языка можно создать компилятор. Например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы машинный код может так же динамически компилироваться во время исполнения.
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных средств, так как уже переведены на машинный язык. Вместе с тем при каждом изменении текста программы требуется ее перекомпиляция, что создает трудности для разработчиков. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которые был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа требуется новая компиляция.
Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями, кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке нередко может быть запущена на разных типах машин и операционных систем без дополнительных усилий. Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, и они не могут выполняться без дополнительной программы-интерпретатора.
Некоторые языки (например Java и C#) относятся как к компилируемым, так и к интерпретируемым. Текст программы компилируется не в машинный язык, а в машинно-независимый код низкого уровня – байт-код. Далее байт-код выполняется с помощью специальной программы – виртуальной машины. Для языка Java байт-код исполняется виртуальной машиной Java Virtual Machine, JVM, для C# – Common Language Runtime (CLR).
Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть оттранслированы в машинный код непосредственно во время выполнения программы. Подобный подход в некотором смысле позволяет использовать плюсы и интерпретаторов, и компиляторов.
← 26.4. Контрольные вопросы и задания | 27.2. Контрольные вопросы и задания → |