Перейти к содержанию

Виртуальная машина GZDoom и JIT-компиляция кода

Этапы компиляции

ZScript / Decorate

Языки сверхвысокого уровня. Компилируются в GZDoom VM IR. Конфигурация стейтов сюда не относятся.

Фактически это единственный уровень, где программист может напрямую повлиять на работу программы. Следующие уровни уже управляются и транслируются игровым движком автоматически.

GZDoom VM IR

GZDoom VM IR, он же GZDoom Virtual Machine Intermediate Representation, он же промежуточное представление виртуальной машины GZDoom. Это унифицированная прослойка между языками высокого уровня (в данном случае это ZScript и Decorate) и целевой платформой исполнения (x86, ARM и так далее).

Исполняет ту же функцию, что и другие промежуточные представления (например, LLVM IR).

Ассемблер

Не представлен в GZDoom в явном виде, однако есть флаг -dumpjit, который выводит скомпилированный ассемблерный листинг.

Машинный код

Непосредственно код в том виде, в котором его видит компьютер. То самое, что сохраняется в памяти.

После компиляции со страниц памяти с кодом убирается флаг возможности записи, остаётся r-x (только чтение и исполнение). По этой причине нельзя изменять код скрипта прямо во время работы скрипта.