Автоматическая генерация интерпретатора для многоязыковой виртуальной машины - Gonopolskiy, Mark Gennadievich (Современные информационные технологии и ИТ-образование; Том 17 № 4 (2021): Современные информационные технологии и ИТ-образование, 2021)
В данной статье проведено исследование существующих реализаций генераторов интерпретаторов и предложен подход к генерации интерпретаторов на ассемблере для нескольких архитектур по описанию множества инструкций (BISA – Bytecode Instruction Set Architecture) многоязыковой регистровой виртуальной машины (VM – Virtual Machine) с интерпретатором, компилятором и сборщиком мусора. Каждой инструкции из BISA однозначно соответствует обработчик BISA. Для каждого обработчика BISA задан номер, определяющий положение обработчика, частота использования соответствующей инструкции в множестве целевых приложений (МЦП), и набор инструкций псевдоязыка, характеризующий логику обработки соответствующей инструкции BISA виртуальной машиной. МЦП состоит из приложений, предназначенных для запуска на рассматриваемой виртуальной машине. Интерпретатор представляет собой последовательный набор обработчиков BISA. Согласно выбранному автором подходу, для получения интерпретаторов на ассемблере по BISA необходимо выполнить три последовательных шага. На первом шаге осуществляется преобразование обработчиков BISA в промежуточное представление интерпретатора. На втором шаге проводятся машинно-независимые оптимизации промежуточного кода интерпретатора. На третьем шаге выполняются машинно-зависимые оптимизации и  преобразование промежуточного представления интерпретатора в представления выбранных архитектур. Было разработано инструментальное средство на языке C++, реализующее упрощенный, не включающий оптимизации, вариант предложенного подхода для двух инструкций. Проведено экспериментальное исследование, в ходе которого предложенный генератор сравнивался с компилятором clang++ по количеству генерируемых инструкций целевой машины для каждого обработчика BISA. Экспериментальное исследование показало, что выбранные подходы эквивалентны, даже при использовании упрощенного алгоритма генерации интерпретаторов. В перспективе планируется оптимизировать предложенный подход, что позволит превзойти по производительности известные подходы.