Я делаю приложение, и я хотел бы загрузить и выполнить llvm битовый код с помощью ExecutionEngine. Мне удалось сделать это с действительно простым кодом C, скомпилированным с помощью clang.
Я думаю, что если я использую llvm для этого проекта, то это может быть более независимым от языка, чем, скажем, в частности, выбор lua / python / javascript. Но я не совсем понимаю, как это может работать для управляемых языков или языков сценариев, поскольку они часто привязаны к платформе с такими ресурсами, как GC. Так что я не уверен, как это будет работать через ExecutionEngine.
Итак, в качестве примера сценария предположим, что пользователь хотел написать некоторый код Python, который запускается в моем приложении. Затем я хочу, чтобы они доставили мне битовый код, представляющий этот код Python, который я затем запустил в своем приложении C ++, используя ExecutionEngine llvm.
Это возможно? Можно ли просто скомпилировать python в битовый код, а затем запустить его с помощью ExecutionEngine? Если нет, что мне нужно знать, чтобы понять, почему нет?
После некоторого чтения и некоторых разговоров я считаю, что ответ заключается в том, что ExecutionEngine, по сути, выполняет код, как если бы он был нативным C-кодом. Это означает, что если вы хотите выполнить lua / python / javascript-код поверх llvm, вам нужно будет отправить битовый код для этой среды выполнения. Затем среда выполнения может анализировать и выполнять скрипт как обычно.
Насколько я знаю, ни одна из этих сред выполнения не имеет возможности компилировать свой сценарий непосредственно в битовый код llvm (пока).
Других решений пока нет …