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

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

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

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

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

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

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы