Транслятор: различия между версиями

14 байт добавлено ,  6 лет назад
пунктуация
(стилевые правки)
(пунктуация)
{{main|Интерпретатор}}
 
Другой метод реализации — когда программа исполняется с помощью '''интерпретатора''' вообще без трансляции. Интерпретатор программно моделирует машину, цикл выборки-исполнения которой работает с командами на языках высокого уровня, а не с машинными командами. Такое программное моделирование создаёт [[виртуальная машина|виртуальную машину]], реализующую язык. Этот подход называется '''чистой интерпретацией'''.<ref name="Себеста"/> Чистая интерпретация применяется, как правило, для языков с простой структурой (например, [[АПЛ (язык программирования)|АПЛ]] или [[Лисп]]). [[Интерпретатор командной строки|Интерпретаторы командной строки]] обрабатывают команды в [[скрипт]]ах в [[UNIX]] или в [[пакетный файл|пакетных файлах]] (<tt>.bat</tt>) в [[MS-DOS]] также как правило в режиме чистой интерпретации.
 
Достоинство чистого интерпретатора: отсутствие промежуточных действий для трансляции упрощает реализацию интерпретатора и делает его удобнее в использовании, в том числе в диалоговом режиме. Недостаток — интерпретатор должен быть в наличии на целевой машине, где должна исполняться программа. Также, как правило, имеется более или менее значительный проигрыш в скорости. А свойство чистого интерпретатора, что ошибки в интерпретируемой программе обнаруживаются только при попытке выполнения команды (или строки) с ошибкой, можно признать как недостатком, так и достоинством.
 
== Смешение понятий трансляции и интерпретации ==
Трансляция и интерпретация — разные процессы: трансляция занимается переводом программ с одного языка на другой, а интерпретация отвечает за исполнение программ. Однако, поскольку, целью трансляции, как правило, является подготовка программы к интерпретации, то эти процессы обычно рассматриваются вместе. Например, языки программирования часто характеризуются как «компилируемые» или «интерпретируемые», в зависимости от того, что преобладает при использовании языка: компиляция или интерпретация. Причём, практически все [[низкоуровневый язык программирования|языки программирования низкого уровня]] и [[язык программирования третьего поколения|третьего поколения]], вроде [[язык ассемблера|ассемблера]], [[Си (язык программирования)|Си]] или [[Модула-2|Модулы-2]], являются компилируемыми, а более [[высокоуровневый язык программирования|высокоуровневые языки]], вроде [[Python]] или [[SQL]], — интерпретируемыми.
 
С другой стороны, существует взаимопроникновение процессов трансляции и интерпретации: интерпретаторы могут быть компилирующими (в том числе с динамической компиляцией), а в трансляторах может требоваться интерпретация для конструкций [[метапрограммирование|метапрограммирования]] (например, для [[макрос в языке ассемблера|макросов в языке ассемблера]], [[условная компиляция|условной компиляции]] в Си или [[шаблоны C++|шаблонов в C++]]).