Правильны ли понятия трансляции, компиляции и интерпретации в книгах Таненбаума?

Изучаю 6-е издание "Архитектура компьютера" Таненбаума. В книге даются следующие определения.
Трансляция - это перевод программы с одного языка на другой, когда каждая команда исходной программы заменяется на команду или набор команд целевого. При этом весь исходный текст переводится на новый язык и затем используется.
Интерпретация - тоже самое, но каждая исходная команда заменяется на набор команд целевого языка и тут же исполняется интерпретатором.
Компиляция у него означает тоже самое, что и трансляция.
В других источниках дается несколько другое определение:
Трансляция - процесс перевода программы с одного языка на другой. Делится он на компиляцию и интерпретацию. Когда целевой язык - машинный или ассемблер, то это компиляция. Когда другая программа, то это интерпретация.
Подскажите все же правильное определение этих терминов.
  • Вопрос задан
  • 3220 просмотров
Решения вопроса 1
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
В том смысле, как эти термины подразумеваются Танненбаумом, различие между трансляцией и компиляцией в том, что в первом случае происходит взаимно-однозначное (и потенциально обратимое) преобразование операторов входного языка (исходника) в команды исполнителя, а компиляция — более «творческий» процесс, когда одному оператору входного языка будет соответствовать произвольное (обычно довольно существенное) число команд исполнителя, однозначность возможна лишь на уровне блоков кода, а обратимость практически утеряна (однозначная декомпиляция невозможна).

На практике трансляторами являются различные ассемблеры, а компиляторами — генераторы машкода языков высокого уровня (ЯВУ). Это отражено в литературе: ассемблирование программ ассемблером называют трансляцией, а трансляцию (каламбур!) в машкод языков высокого уровня — компиляцией. Иногда говорят «трансляция с ЯВУ», подразумевая неоднозначность процесса явно.

Другое использование термина «трансляция» — в качестве объединяющего для компиляции и интерпретации. В этом случае речь идет только о языках высокого уровня, ассемблеры остаются за скобками.

У себя на форуме я неправильно использовал эти термины
После углубленного изучения темы выяснилось, что процесс генерации обратимого кода для дальнейшего добавления в базу правильней называть трансляцией и установкой, а не компиляцией. В окончательном документе это будет учтено.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Moskus
@Moskus
Эти определения не играют роли, кроме случая, когда вы работаете над проектом, где разрабатывается компилятор, декомпилятор или какое-то иное средство, выполняющее аналогичные функции. Там это важно, потому что команда должна общаться на одном языке и называть одно и то же одинаково.
Главное, чтобы вы понимали суть этих действий. В книге эти определения даны для "внутреннего" использования, то есть для того, чтобы вы понимали, о чем речь в этой книге.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Книги
software engineer
Если копать слишком глубоко, то идеального совпадения не будет.

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

Другими словами, не копайте слишком далеко - формальный язык в ИТ сфере, все-таки ближе к физике, а не к математике.

Например - не путайте машинный язык и ассемблер - при вопросе компиляции и интерпретации это разные вещи.

Можно перейти к простому определению - интерпретатор выполняет команды программы.

Следовательно интерпретация - это когда ваш текст программы выполняется непосредственно интерпретатором.

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

Трансляция - неоднозначная вещь, перевести код из одного языка в другой не всегда возможно, но при компиляции, трансляция используется для первичной подготовки исходного текста к компиляции. Чистая трансляция - вещь специфическая.
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
Трансляция - собственно перевод.
Есть два принципиально разных подхода к переводу -
1)Компиляция - перевели всю программу, и запускаем уже переведенный код.
2)Интерпретация - переводим оригинал по мере необходимости.

Это в идеале.
А в реальности есть самые разные сочетания двух этих подходов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Leningrad Media Москва
от 150 000 до 170 000 ₽
N.Academy Москва
от 100 000 ₽
vivaCRM Москва
от 200 000 до 250 000 ₽
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект