Вызвать код Python из LLVM JIT
Я пишу лексер / парсер / компилятор языка на Python, который должен работать в LLVM JIT-VM (используяllvm-py
) потом. Первые два шага на данный момент довольно просты, но (даже если я еще не запускал задачу компиляции) я вижу проблему, когда мой код хочет вызвать Python-Code (в общем) или взаимодействовать с лексером Python / parser / compiler (в особом порядке) соответственно. Моя главная проблема заключается в том, что код должен иметь возможность динамически загружать дополнительный код в виртуальную машину во время выполнения и, следовательно, он должен запускать всю цепочку лексеров / анализаторов / компиляторов в Python изнутри виртуальной машины.
Прежде всего: возможно ли это, или виртуальная машина не отключается после запуска?
Если это так, я в настоящее время вижу 3 возможных решения (я открыт для других предложений)
Выключение виртуальной машины и возможность прямого вызова функций Python основного процесса (возможно, путем регистрации ее как LLVM-функции, которая каким-либо образом перенаправляется в основной процесс). Я ничего не нашел по этому поводу и в любом случае я не уверен, если это хорошая идея (безопасность и тому подобное).Скомпилируйте среду выполнения (статически или динамически во время выполнения) в LLVM-Assembly / -IR. Для этого необходимо, чтобы IR-код мог изменять виртуальную машину, в которой он работает.Скомпилируйте среду выполнения (статически) в библиотеку и загрузите ее непосредственно в виртуальную машину. Опять же, он должен иметь возможность добавлять функции (и т. Д.) В виртуальную машину, в которой он работает.