Транслятор: различия между версиями
imported>YurikBot м добавлена ссылка на лексему d:Lexeme:L171006 |
imported>Vbif-routine м убрана избыточная викификация, викификация дат (via JWB) |
||
| Строка 1: | Строка 1: | ||
{{ | {{эта статья|о языках программирования|Перевод|о естественных языках}} | ||
= {{- | {{другой термин|Трансляция|Трансляция}} | ||
{{ | '''Трансля́тор''' — [[компьютерная программа|программа]] или техническое средство, выполняющее ''трансляцию программы''<ref name="Терминология ВТ">{{s|ГОСТ 19781—83}} // {{книга | ||
| заглавие = Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 | |||
| ответственный = Рецензент канд. техн. наук Ю. П. Селиванов | |||
| место = М. | |||
| издательство = Издательство стандартов | |||
| год = 1989 | |||
| страниц = 168 | |||
| isbn = 5-7050-0155-X | |||
| тираж = {{formatnum:55000}} | |||
}}</ref><ref name="ГОСТ 19781-90">{{ГОСТ|19781-90}}</ref><ref name="Першиков">{{книга | |||
| автор = Першиков В. И., Савинков В. М. | |||
| заглавие = Толковый словарь по информатике | |||
| ссылка = https://archive.org/details/tolkovyislovarpo0000pers | |||
| ответственный = Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин | |||
| место = М. | |||
| издательство = Финансы и статистика | |||
| год = 1991 | |||
| страниц = 543 | |||
| isbn = 5-279-00367-0 | |||
| тираж = {{formatnum:50000}} | |||
}}</ref>. | |||
=== | '''Трансля́ция програ́ммы''' — преобразование программы, представленной на одном из [[язык программирования|языков программирования]], в программу, написанную на другом языке. Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати текст программы и т. д.<ref name="Терминология ВТ"/><ref name="ГОСТ 19781-90"/> | ||
{{ | |||
| | Язык, на котором представлена входная программа, называется ''исходным языком'', а сама программа — ''[[исходный код|исходным кодом]]''. Выходной язык называется ''целевым языком''. | ||
| | |||
}} | В общем случае понятие трансляции относится не только к языкам программирования, но и к другим языкам — как формальным [[компьютерный язык|компьютерным]] (вроде [[язык разметки|языков разметки]] типа [[HTML]]), так и [[Естественный язык|естественным]] ([[русский язык|русскому]], [[английский язык|английскому]] и т. п.)<ref>{{s|СТ ИСО 2382/7—77}} // {{книга | ||
| заглавие = Вычислительная техника. Терминология. Указ. соч | |||
}}</ref><ref>{{книга | |||
| заглавие = Толковый словарь по вычислительным системам | |||
| оригинал = Dictionary of Computing | |||
| ответственный = Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского | |||
| место = М. | |||
| издательство = Машиностроение | |||
| год = 1990 | |||
| страниц = 560 | |||
| isbn = 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания) | |||
| тираж = {{formatnum:70000}} (доп.) | |||
}}</ref>. | |||
== Виды трансляторов == | |||
Существует несколько видов трансляторов<ref name="Першиков"/>. | |||
* ''Диалоговый'' транслятор — транслятор, обеспечивающий использование языка программирования в [[Разделение времени|режиме разделения времени]]. | |||
* ''Синтаксически-ориентированный'' (''[[Синтаксически управляемая трансляция|синтаксически-управляемый]])'' транслятор — транслятор, получающий на вход описание [[синтаксис (программирование)|синтаксиса]] и [[семантика (программирование)|семантики]] языка, текст на описанном языке и выполняющий трансляцию в соответствии с заданным описанием. | |||
* ''Однопроходной'' транслятор — транслятор, преобразующий [[исходный код]] при его однократном последовательном чтении (за один проход). | |||
* ''Многопроходной'' транслятор — транслятор, преобразующий исходный код после его нескольких чтений (за несколько проходов). | |||
* ''Оптимизирующий'' транслятор — транслятор, выполняющий [[Оптимизация (информатика)|оптимизацию]] создаваемого кода. См. [[оптимизирующий компилятор]]. | |||
* ''Тестовый'' транслятор — транслятор, получающий на вход [[исходный код]] и выдающий на выходе изменённый [[исходный код]]. Запускается перед основным транслятором для добавления в [[исходный код]] [[отладка программы|отладочных]] [[подпрограмма|процедур]]. Например, транслятор с [[Язык программирования|языка]] [[язык ассемблера|ассемблера]] может выполнять замену [[макрокоманда|макрокоманд]] на код. | |||
* ''Обратный'' транслятор — транслятор, выполняющий преобразование [[Машинный код|машинного кода]] в текст на каком-либо [[Язык программирования|языке программирования]]. См. [[дизассемблер]], [[декомпилятор]]. | |||
== Реализации == | |||
Цель трансляции — преобразование текста с одного языка на язык, понятный адресату. При трансляции [[Компьютерная программа|компьютерной программы]] адресатом может быть: | |||
* устройство — [[процессор]] (трансляция называется компиляцией); | |||
* программа — [[интерпретатор]] (трансляция называется интерпретацией). | |||
Виды трансляции: | |||
* [[#Компиляция|компиляция]]; | |||
** в исполняемый код | |||
*** в машинный код | |||
*** в байт-код | |||
** [[Транспайлер|транспиляция]]; | |||
* [[#Интерпретация|интерпретация]]; | |||
* [[#Динамическая компиляция|динамическая компиляция]]. | |||
=== Компиляция === | |||
{{main|Компилятор}} | |||
Язык [[процессор]]а (устройства, машины) называется машинным языком, [[машинный код|машинным кодом]]. Код на машинном языке исполняется процессором. Обычно, машинный язык — язык [[низкоуровневый язык программирования|низкого уровня]], но существуют процессоры, использующие языки [[Высокоуровневый язык программирования|высокого уровня]] (например, [[Intel iAPX 432|iAPX-432]]<ref>{{книга|автор=Органик Э.|заглавие=Организация системы Интел 432|оригинал=A Programmer’s View of the Intel 432 System|ответственный=Пер. с англ|место=М.|издательство=Мир|год=1987|страницы=20, 31|страниц=446|тираж={{formatnum:59000}}}}</ref>). Однако, такие процессоры не получили распространения в силу своей сложности и дороговизны. | |||
'''Компилятор''' — это вид транслятора, преобразующий исходный код с какого-либо [[Язык программирования|языка программирования]] на [[Машинный код|машинный язык]]<ref name="Себеста">{{книга | |||
| автор = Роберт У. Себеста. | |||
| часть = 1.7. Методы реализации | |||
| заглавие = Основные концепции языков программирования | |||
| оригинал = Concepts of Programming Languages | |||
| ответственный = Пер. с англ | |||
| издание = 5-е изд | |||
| место = М. | |||
| издательство = [[Вильямс (издательство)|Вильямс]] | |||
| год = 2001 | |||
| страницы = 45‑52 | |||
| страниц = 672 | |||
| isbn = 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.) | |||
| тираж = {{formatnum:5000}} | |||
}}</ref>. | |||
Процесс компиляции, как правило, состоит из нескольких этапов: | |||
* [[лексический анализ]]; | |||
* [[синтаксический анализ]]; | |||
* [[семантический анализ]]; | |||
* создание на основе результатов анализов промежуточного кода; | |||
* [[оптимизация компилятора|оптимизация]] промежуточного кода; | |||
* создание [[Объектный модуль|объектного кода]], в данном случае [[машинный код|машинного]]. | |||
Программа может использовать сервисы, предоставляемые [[операционная система|операционной системой]], и сторонние [[Библиотека (программирование)|библиотеки]] (например, библиотеки для работы с файлами и библиотеки для создания графического интерфейса). Для добавления в [[объектный модуль|объектный файл]] [[машинный код|машинного кода]] из других [[объектный модуль|объектных файлов]] (кода [[Библиотека (программирование)#Статические библиотеки|статических]] [[Библиотека (программирование)|библиотек]]) и информации о [[Библиотека (программирование)#Динамические библиотеки|динамических]] [[Библиотека (программирование)|библиотеках]] выполняется ''связывание'' ({{lang-en|link}}) или ''компоновка''. Связывание или компоновка выполняется [[Компоновщик|редактором связей или компоновщиком]]. Компоновщик может быть отдельной программой или частью [[компилятор]]а. Компоновщик создаёт [[Исполнимый модуль|исполняемый файл]]. Исполняемый файл (программа) запускается следующим образом: | |||
* по запросу пользователя в ядре [[операционная система|операционной системы]] создаётся объект «[[Процесс (информатика)|процесс]]»; | |||
* [[загрузчик программ]] [[операционная система|операционной системы]] выполняет следующие действия: | |||
* читает [[исполняемый файл]]; | |||
* загружает его в [[Оперативная память|память]]; | |||
* загружает в [[Оперативная память|память]] [[Библиотека (программирование)#Динамические библиотеки|динамические библиотеки]]; | |||
* выполняет связывание машинного кода программы с динамическими библиотеками (динамическое связывание); | |||
* передаёт управление программе. | |||
Достоинства компиляции: | |||
* компиляция программы выполняется один раз; | |||
* наличие компилятора на устройстве, для которого компилируется программа, не требуется. | |||
Недостатки компиляции: | |||
* компиляция — медленный процесс; | |||
* при внесении изменений в исходный код, требуется повторная компиляция. | |||
[[Ассемблер]] — компилятор, преобразующий текст с языка [[язык ассемблера|ассемблера]] на [[Машинный код|машинный язык]]. [[Язык ассемблера]] — [[Язык программирования|язык]], близкий к [[машинный код|машинному языку]], язык [[Низкоуровневый язык программирования|низкого уровня]]. | |||
=== Интерпретация === | |||
{{main|Интерпретатор}} | |||
Интерпретация — процесс чтения и выполнения [[Исходный код|исходного кода]]. Реализуется программой — [[интерпретатор]]ом. | |||
Интерпретатор может работать двумя способами: | |||
# читать код и исполнять его сразу (''чистая интерпретация''<ref name="Себеста" />); | |||
# читать код, создавать в [[Оперативная память|памяти]] промежуточное представление кода ([[байт-код]] или [[p-код]]), выполнять промежуточное представление кода (''смешанная реализация''<ref name="Себеста" />). | |||
В первом случае трансляция не используется, а во втором — используется трансляция исходного кода в промежуточный код. | |||
Этапы работы интерпретатора: | |||
# [[лексический анализ]]; | |||
# [[синтаксический анализ]]; | |||
# [[семантический анализ]]; | |||
# создание промежуточного представления кода (при чистой интерпретации не выполняется); | |||
# исполнение. | |||
Интерпретатор моделирует машину ([[виртуальная машина|виртуальную машину]]), реализует цикл выборки-исполнения команд машины. Команды машины записываются не на машинном языке, а на языке [[Высокоуровневый язык программирования|высокого уровня]]. Интерпретатор можно назвать исполнителем языка [[виртуальная машина|виртуальной машины]]. | |||
Чистая интерпретация применяется, обычно, для языков с простой структурой, например, [[Сценарный язык|языков сценариев]], языков [[APL (язык программирования)|APL]] и [[Лисп]]. | |||
Примеры интерпретаторов, создающих [[байт-код]]: [[Perl]], [[PHP]], [[Python]], [[Erlang]]. | |||
Достоинства интерпретаторов по сравнению с компиляторами: | |||
* возможность работы в интерактивном режиме; | |||
* отсутствие необходимости перекомпиляции [[Исходный код|исходного кода]] после внесения изменений и при переносе кода на другую платформу. | |||
Недостатки интерпретаторов по сравнению с компиляторами: | |||
* низкая производительность (машинный код исполняется процессором, а интерпретируемый код — интерпретатором; машинный код самого интерпретатора исполняется процессором); | |||
* необходимость наличия интерпретатора на устройстве, на котором планируется интерпретация программы; | |||
* обнаружение ошибок синтаксиса на этапе выполнения (актуально для чистых интерпретаторов). | |||
Сравнение чистого интерпретатора и интерпретатора, создающего [[байт-код]]: | |||
* чистый интерпретатор проще в реализации, так как для него не нужно писать код транслятора; | |||
* интерпретатор, создающий [[байт-код]], может выполнять его [[Оптимизация (информатика)|оптимизацию]] и добиваться большей производительности, чем чистый интерпретатор; | |||
* интерпретатор, создающий [[байт-код]], потребляет больше ресурсов системы (трансляция в [[байт-код]] занимает процессорное время; [[байт-код]] занимает место в [[Оперативная память|памяти]]). | |||
=== | === Динамическая компиляция === | ||
{{ | {{main|JIT-компиляция}} | ||
Динамическая или [[JIT-компиляция]] — трансляция, при которой [[исходный код|исходный]] или промежуточный код преобразуется (компилируется) в [[машинный код]] непосредственно во время исполнения, «на лету» ({{lang-en|just in time}}, {{lang-en2|JIT}}). Компиляция каждого участка кода выполняется только один раз; скомпилированный код сохраняется в [[кеш]]е и при необходимости используется повторно. | |||
Достоинства динамической компиляции по сравнению с компиляцией: | |||
* скорость работы динамически компилируемых программ близка к скорости работы компилируемых программ; | |||
* отсутствие необходимости перекомпиляции программы при переносе на другую платформу. | |||
Недостатки динамической компиляции по сравнению с компиляцией и чистой интерпретацией: | |||
* бо́льшая сложность реализации; | |||
* бо́льшие требования к ресурсам. | |||
Динамическая компиляция хорошо подходит для [[веб-приложение|веб-приложений]]. | |||
Динамическая компиляция появилась и поддерживается в той или иной мере в реализациях [[Java]], [[.NET Framework]], [[Perl]], [[Python]]. | |||
==== | == Смешение понятий трансляции и интерпретации == | ||
Понятия «трансляция» и «интерпретация» различаются. Во время трансляции выполняется преобразование кода программы с одного языка на другой. Во время интерпретации программа исполняется. | |||
Так как целью трансляции является, обычно, подготовка к интерпретации, эти процессы рассматриваются вместе. Например, языки программирования часто характеризуются как «компилируемые» или «интерпретируемые» в зависимости от того, что преобладает при использовании языка: компиляция или интерпретация. Причём, практически все языки [[низкоуровневый язык программирования|низкого уровня]] и [[язык программирования третьего поколения|третьего поколения]], вроде [[язык ассемблера|ассемблера]], [[Си (язык программирования)|Си]] или [[Модула-2|Модулы-2]], являются компилируемыми, а более [[высокоуровневый язык программирования|высокоуровневые языки]], вроде [[Python]] или [[SQL]] — интерпретируемыми. | |||
С другой стороны, существует взаимопроникновение процессов трансляции и интерпретации: интерпретаторы могут быть компилирующими (в том числе с динамической компиляцией), а в трансляторах может требоваться интерпретация для реализации [[метапрограммирование|метапрограммирования]] (например, для [[макрос в языке ассемблера|макросов в языке ассемблера]], [[условная компиляция|условной компиляции]] в [[Си (язык программирования)|Си]] или [[шаблоны C++|шаблонов]] в [[C++]]). | |||
| | |||
| | |||
| | |||
| | |||
| | |||
Более того, один и тот же [[язык программирования]] может и транслироваться, и интерпретироваться, и в обоих случаях должны присутствовать общие этапы анализа и распознавания конструкций и директив исходного языка. Это относится и к программным реализациям, и к аппаратным — так, [[процессор]]ы семейства [[x86]] перед исполнением инструкций [[Машинный код|машинного языка]] выполняют их декодирование, выделяя в [[опкод]]ах поля операндов (указание [[Регистр процессора|регистров]], адресов в [[Оперативная память|памяти]], [[Константа (программирование)|констант]]), [[Разрядность|разрядности]] и т. п., а в [[процессор]]ах [[Pentium]] с архитектурой [[NetBurst]] тот же самый [[машинный код]] перед сохранением во внутреннем [[кэш]]е дополнительно транслируется в последовательность микроопераций. | |||
== | == Примечания == | ||
{{примечания}} | |||
== | == Литература == | ||
{{ | * {{книга | ||
| автор = Касьянов В. Н., Поттосин И. В. | |||
| заглавие = Методы построения трансляторов | |||
| место = Новосибирск | |||
| издательство = Наука | |||
| год = 1986 | |||
| | | страниц = 344 | ||
| | |||
| | |||
| | |||
| | |||
| | |||
}} | }} | ||
{{Внешние ссылки}} | |||
{{Выполнение программы}} | |||
[[Категория:Трансляторы| ]] | |||
Текущая версия от 18:53, 25 июля 2025
Шаблон:Эта статья Шаблон:Другой термин Трансля́тор — программа или техническое средство, выполняющее трансляцию программы<ref name="Терминология ВТ">Шаблон:S // Шаблон:Книга</ref><ref name="ГОСТ 19781-90">Шаблон:ГОСТ</ref><ref name="Першиков">Шаблон:Книга</ref>.
Трансля́ция програ́ммы — преобразование программы, представленной на одном из языков программирования, в программу, написанную на другом языке. Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати текст программы и т. д.<ref name="Терминология ВТ"/><ref name="ГОСТ 19781-90"/>
Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком.
В общем случае понятие трансляции относится не только к языкам программирования, но и к другим языкам — как формальным компьютерным (вроде языков разметки типа HTML), так и естественным (русскому, английскому и т. п.)<ref>Шаблон:S // Шаблон:Книга</ref><ref>Шаблон:Книга</ref>.
Виды трансляторов
Существует несколько видов трансляторов<ref name="Першиков"/>.
- Диалоговый транслятор — транслятор, обеспечивающий использование языка программирования в режиме разделения времени.
- Синтаксически-ориентированный (синтаксически-управляемый) транслятор — транслятор, получающий на вход описание синтаксиса и семантики языка, текст на описанном языке и выполняющий трансляцию в соответствии с заданным описанием.
- Однопроходной транслятор — транслятор, преобразующий исходный код при его однократном последовательном чтении (за один проход).
- Многопроходной транслятор — транслятор, преобразующий исходный код после его нескольких чтений (за несколько проходов).
- Оптимизирующий транслятор — транслятор, выполняющий оптимизацию создаваемого кода. См. оптимизирующий компилятор.
- Тестовый транслятор — транслятор, получающий на вход исходный код и выдающий на выходе изменённый исходный код. Запускается перед основным транслятором для добавления в исходный код отладочных процедур. Например, транслятор с языка ассемблера может выполнять замену макрокоманд на код.
- Обратный транслятор — транслятор, выполняющий преобразование машинного кода в текст на каком-либо языке программирования. См. дизассемблер, декомпилятор.
Реализации
Цель трансляции — преобразование текста с одного языка на язык, понятный адресату. При трансляции компьютерной программы адресатом может быть:
- устройство — процессор (трансляция называется компиляцией);
- программа — интерпретатор (трансляция называется интерпретацией).
Виды трансляции:
- компиляция;
- в исполняемый код
- в машинный код
- в байт-код
- транспиляция;
- в исполняемый код
- интерпретация;
- динамическая компиляция.
Компиляция
Шаблон:Main Язык процессора (устройства, машины) называется машинным языком, машинным кодом. Код на машинном языке исполняется процессором. Обычно, машинный язык — язык низкого уровня, но существуют процессоры, использующие языки высокого уровня (например, iAPX-432<ref>Шаблон:Книга</ref>). Однако, такие процессоры не получили распространения в силу своей сложности и дороговизны.
Компилятор — это вид транслятора, преобразующий исходный код с какого-либо языка программирования на машинный язык<ref name="Себеста">Шаблон:Книга</ref>.
Процесс компиляции, как правило, состоит из нескольких этапов:
- лексический анализ;
- синтаксический анализ;
- семантический анализ;
- создание на основе результатов анализов промежуточного кода;
- оптимизация промежуточного кода;
- создание объектного кода, в данном случае машинного.
Программа может использовать сервисы, предоставляемые операционной системой, и сторонние библиотеки (например, библиотеки для работы с файлами и библиотеки для создания графического интерфейса). Для добавления в объектный файл машинного кода из других объектных файлов (кода статических библиотек) и информации о динамических библиотеках выполняется связывание (англ. Шаблон:Lang-en2) или компоновка. Связывание или компоновка выполняется редактором связей или компоновщиком. Компоновщик может быть отдельной программой или частью компилятора. Компоновщик создаёт исполняемый файл. Исполняемый файл (программа) запускается следующим образом:
- по запросу пользователя в ядре операционной системы создаётся объект «процесс»;
- загрузчик программ операционной системы выполняет следующие действия:
- читает исполняемый файл;
- загружает его в память;
- загружает в память динамические библиотеки;
- выполняет связывание машинного кода программы с динамическими библиотеками (динамическое связывание);
- передаёт управление программе.
Достоинства компиляции:
- компиляция программы выполняется один раз;
- наличие компилятора на устройстве, для которого компилируется программа, не требуется.
Недостатки компиляции:
- компиляция — медленный процесс;
- при внесении изменений в исходный код, требуется повторная компиляция.
Ассемблер — компилятор, преобразующий текст с языка ассемблера на машинный язык. Язык ассемблера — язык, близкий к машинному языку, язык низкого уровня.
Интерпретация
Шаблон:Main Интерпретация — процесс чтения и выполнения исходного кода. Реализуется программой — интерпретатором.
Интерпретатор может работать двумя способами:
- читать код и исполнять его сразу (чистая интерпретация<ref name="Себеста" />);
- читать код, создавать в памяти промежуточное представление кода (байт-код или p-код), выполнять промежуточное представление кода (смешанная реализация<ref name="Себеста" />).
В первом случае трансляция не используется, а во втором — используется трансляция исходного кода в промежуточный код.
Этапы работы интерпретатора:
- лексический анализ;
- синтаксический анализ;
- семантический анализ;
- создание промежуточного представления кода (при чистой интерпретации не выполняется);
- исполнение.
Интерпретатор моделирует машину (виртуальную машину), реализует цикл выборки-исполнения команд машины. Команды машины записываются не на машинном языке, а на языке высокого уровня. Интерпретатор можно назвать исполнителем языка виртуальной машины.
Чистая интерпретация применяется, обычно, для языков с простой структурой, например, языков сценариев, языков APL и Лисп.
Примеры интерпретаторов, создающих байт-код: Perl, PHP, Python, Erlang.
Достоинства интерпретаторов по сравнению с компиляторами:
- возможность работы в интерактивном режиме;
- отсутствие необходимости перекомпиляции исходного кода после внесения изменений и при переносе кода на другую платформу.
Недостатки интерпретаторов по сравнению с компиляторами:
- низкая производительность (машинный код исполняется процессором, а интерпретируемый код — интерпретатором; машинный код самого интерпретатора исполняется процессором);
- необходимость наличия интерпретатора на устройстве, на котором планируется интерпретация программы;
- обнаружение ошибок синтаксиса на этапе выполнения (актуально для чистых интерпретаторов).
Сравнение чистого интерпретатора и интерпретатора, создающего байт-код:
- чистый интерпретатор проще в реализации, так как для него не нужно писать код транслятора;
- интерпретатор, создающий байт-код, может выполнять его оптимизацию и добиваться большей производительности, чем чистый интерпретатор;
- интерпретатор, создающий байт-код, потребляет больше ресурсов системы (трансляция в байт-код занимает процессорное время; байт-код занимает место в памяти).
Динамическая компиляция
Шаблон:Main Динамическая или JIT-компиляция — трансляция, при которой исходный или промежуточный код преобразуется (компилируется) в машинный код непосредственно во время исполнения, «на лету» (англ. Шаблон:Lang-en2, Шаблон:Lang-en2). Компиляция каждого участка кода выполняется только один раз; скомпилированный код сохраняется в кеше и при необходимости используется повторно.
Достоинства динамической компиляции по сравнению с компиляцией:
- скорость работы динамически компилируемых программ близка к скорости работы компилируемых программ;
- отсутствие необходимости перекомпиляции программы при переносе на другую платформу.
Недостатки динамической компиляции по сравнению с компиляцией и чистой интерпретацией:
- бо́льшая сложность реализации;
- бо́льшие требования к ресурсам.
Динамическая компиляция хорошо подходит для веб-приложений.
Динамическая компиляция появилась и поддерживается в той или иной мере в реализациях Java, .NET Framework, Perl, Python.
Смешение понятий трансляции и интерпретации
Понятия «трансляция» и «интерпретация» различаются. Во время трансляции выполняется преобразование кода программы с одного языка на другой. Во время интерпретации программа исполняется.
Так как целью трансляции является, обычно, подготовка к интерпретации, эти процессы рассматриваются вместе. Например, языки программирования часто характеризуются как «компилируемые» или «интерпретируемые» в зависимости от того, что преобладает при использовании языка: компиляция или интерпретация. Причём, практически все языки низкого уровня и третьего поколения, вроде ассемблера, Си или Модулы-2, являются компилируемыми, а более высокоуровневые языки, вроде Python или SQL — интерпретируемыми.
С другой стороны, существует взаимопроникновение процессов трансляции и интерпретации: интерпретаторы могут быть компилирующими (в том числе с динамической компиляцией), а в трансляторах может требоваться интерпретация для реализации метапрограммирования (например, для макросов в языке ассемблера, условной компиляции в Си или шаблонов в C++).
Более того, один и тот же язык программирования может и транслироваться, и интерпретироваться, и в обоих случаях должны присутствовать общие этапы анализа и распознавания конструкций и директив исходного языка. Это относится и к программным реализациям, и к аппаратным — так, процессоры семейства x86 перед исполнением инструкций машинного языка выполняют их декодирование, выделяя в опкодах поля операндов (указание регистров, адресов в памяти, констант), разрядности и т. п., а в процессорах Pentium с архитектурой NetBurst тот же самый машинный код перед сохранением во внутреннем кэше дополнительно транслируется в последовательность микроопераций.