Двоичная трансляция

В компьютерной области под двоичной трансляцией (от англ. binary translation) понимают эмуляцию одного набора инструкций на другом за счет трансляции машинного кода. Последовательности инструкций переводятся из исходного набора (source) в целевой (target) набор инструкций. ДТ позволяет выполнять приложения одной архитектуры при работе на второй, причём для оптимизирующих двоичных компиляторов скорость выполнения кода зачастую выше оригинала.

Двоичная трансляция делится на статическую и динамическую. Динамическая компиляция происходит незаметно для пользователя, при запуске приложения. Статический компилятор делает из двоичного кода исходной архитектуры готовое полноценное приложение для целевой архитектуры. При статической ДТ весь исходный исполняемый файл транслируется в исполнимый файл для целевой архитектуры. Это весьма непростая задача - выполнить данную трансляцию абсолютно корректно, так как не весь код сразу считывается транслятором. Например, некоторые части исполнимого кода доступны лишь через косвенные переходы, чьи параметры становятся известны лишь во время исполнения.

С другой стороны, динамическая трансляция рассматривает короткие последовательности кода (как правило, это базовый блок: цикл или метод), транслирует его и кэширует результирующую последовательность. Код транслируется не весь, а по мере считывания и, соответственно, возможности его трансляции, и для инструкций ветвления создается контрольная точка в транслируемом коде.

Динамическая двоичная трансляция отличается от простой эмуляции удалением основного цикла эмулятора «считывание-декодирование-исполнение» (что является основным его узким местом), расплачиваясь за это большими накладными нагрузками во время процесса трансляции.

Эти накладные расходы (нагрузки) несколько нивелируются в дальнейшем благодаря тому, что оттранслированный код будет исполняться несколько раз (то есть без повторной трансляции).

Более совершенные динамические трансляторы применяют динамическую рекомпиляцию: транслируемый код инструментируется на предмет выяснения «температуры кода», то есть того, какие фрагменты выполняются довольно часто, и к ним применяется агрессивная оптимизация. Такой подход напоминает JIT-компилятор, и в сущности, такие компиляторы (как например, технология HotSpot от корпорации Sun) можно рассматривать как динамические трансляторы из виртуального набора инструкций (байт-код) в реальный.

Источник: Википедия

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я