Исполнение байткода07 / 19

Как работает интерпретатор

Как Ignition выполняет инструкции байткода и получает результат функции.

В прошлом уроке мы получили байткод из AST. Теперь Ignition читает инструкции этого байткода и по очереди выполняет указанные операции.

У каждой инструкции есть обработчик — часть интерпретатора, которая выполняет эту операцию. CPU исполняет машинный код обработчиков Ignition.

Рассмотрим функцию add(a, b), которая возвращает сумму аргументов. При вызове add(2, 3) инструкции сначала загрузят 2, затем прибавят 3 и вернут 5.

Выполнение add(2, 3)

function add(a, b) {
  return a + b;
}
add(2, 3);

Учебный псевдобайткод: названия инструкций условные. Одно нажатие — одна инструкция.

  1. LOAD a→ Следующая
    Загрузить a
  2. ADD bОжидает
    Прибавить b
  3. RETURNОжидает
    Вернуть значение
Аккумулятор
—

Аргументы заданы: a = 2, b = 3. В аккумуляторе пока нет значения.

0 / 3
Основной вывод

Ignition читает инструкцию, выполняет её обработчик и переходит к следующей. CPU исполняет машинный код обработчиков интерпретатора.

Проверить по первоисточнику ↗

V8 · Ignition↗Официальное описание регистрового интерпретатора.V8 · Обработчики и аккумулятор Ignition↗Обработчики инструкций выполняют операции; аккумулятор хранит промежуточные результаты.