@Aleviy

Многоуровневая компьютерная организация. Интерпретируется\транслируется ли написанный код до того момента, пока не дойдет до машинного кода?

Читаю Таненбаума "Архитектура компьютера". Написано, что компьютер состоит из "уровней".
Изобретение целого ряда языков, каждый из которых более удобен для чело-
века, чем предыдущий, может продолжаться до тех пор, пока мы не дойдем до
подходящего нам языка. Каждый такой язык использует своего предшественника
как основу, поэтому мы можем рассматривать компьютер в виде ряда уровней,
изображенных на рис. 1.1. Язык, находящийся в самом низу иерархической
структуры — самый примитивный, а тот, что расположен на ее вершине — самый
сложный.


Так вот, я не могу понять один момент. Допустим, я пишу код, на языке самого верхнего уровня. Будет ли он транслироваться на уровень ниже каждый раз, пока не дойдет до самого нижнего и, соответственно, до языка самого нижнего уровня. Ведь в книге было написано, что компьютер выполняет команда только машинного кода, который является языком самого нижнего уровня.
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 3
Aetae
@Aetae
Тлен
Ну какбэ языки делятся на интерпретируемые и компилируемые.
Вторые сразу компилируются в (почти) машинный код и в таком виде хранятся. Там "трансляция" минимальна.
Первые в самом примитивном своём виде да - "транслируется" каждый раз в самый низ. Но современные интерпретаторы большинства таких языков - это довольно жирные монстры, которые многое "подготавливают заранее" и применяют для ускорения множество мозголомных трюков.

Ну и если говорить о "цепочках языков" - такого, конечно, (почти) нет.
Максимум добавляется один промежуточный уровень для кроссплаформенности, напр. в той же Java.
Ответ написан
Комментировать
hint000
@hint000
у админа три руки
Когда я был студентом, у нас был курс "методы трансляции". В качестве практической части брали подмножество языка высокого уровня (C или Pascal) и транслировали в язык ассемблера.
"Боевые" трансляторы могут тоже использовать язык ассемблера, как единственный промежуточный, а могут не использовать ничего промежуточного.

Также процитирую из Википедии:
К интерпретируемым языкам, использующим байт-код, относятся Perl, PHP (например Zend Engine), Ruby (начиная с версии 1.9), Python, Erlang и многие другие.
Широко распространённые платформы, использующие байт-код[9]:
Байт-код Java (стековая виртуальная машина), исполняемый различными виртуальными машинами Java[10][11]. Платформа была создана компанией Sun для языка Java, но стала использоваться и для других языков; существуют десятки высокопроизводительных реализаций JVM, использующих JIT-компиляторы.
Существуют варианты трансляции Java в байт-код регистровых машин, например, в виртуальной машине Dalvik (с JIT-компиляцией) или при AOT-компиляции в ART
Платформа Microsoft .NET использует стековый байт-код Intermediate Language (CIL, MSIL)[8], исполняемый с помощью Common Language Runtime (CLR), создана Microsoft для C# и некоторых других языков.
Сценарный язык JavaScript выполняется различными высокопроизводительными «движками», в основном, встроенными в веб-браузеры, часто с возможностью JIT-оптимизации. Многие интерпретаторы построены с применением байт-кода, однако программы на Javascript распространяются в виде исходных кодов.
Сценарный язык ActionScript транслируется в стековый байт-код, распространяется в составе swf- и pdf-файлов, и выполняется виртуальными машинами в Adobe Flash и Adobe Acrobat.
Компилятор Clipper создает исполняемый файл, в который включен байт-код, транслированный из исходного текста программы, и виртуальная машина, исполняющая этот байт-код.
Программы на Java обычно компилируются в class-файлы (англ.)русск., содержащие байт-код Java. Эти универсальные файлы передаются на различные целевые машины.
В ранних реализациях Visual Basic (до версии 6) использовался высокоуровневый Microsoft p-code[9]
Высокоуровневые p-коды и байт коды применялись в СУБД, некоторых реализациях Бейсика и Паскаля.
В стандарте открытых загрузчиков Open Firmware фирмы Sun Microsystems байт-код представляет операторы языка Форт.
отсюда: https://ru.wikipedia.org/wiki/Байт-код
Как видим, один промежуточный уровень - не такая уж редкость. Но больше одного - не практично.

Здесь не говорим о микропрограммной трансляции внутри процессора, это недоступно простым смертным.
Ответ написан
Комментировать
Griboks
@Griboks
Это зависит от конкретной реализации конкретного языка на конкретном устройстве. Код может как переводиться в другой код любого уровня языка (в том числе в машинный код или микрокод), так и сразу выполняться.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы