Как мне записать вывод в привязках Python LLVM?
Я использую привязки Python LLVM для генерации кода для пользовательского языка.
Теперь я хочу запускать программы и проверять, правильно ли работает их вывод, но я не могу понять, как именно выводить что-либо.
Есть ли способ написать stdout
или к файлу, используя привязки LLVM?
Или мне нужно позвонить printf
из библиотеки C?
Как мне сделать один из этих?
Примечание. Я не использую JIT / ExecutionEngine, поэтому LLVM не находит автоматически printf
функция.
1 ответ
LLVM может генерировать объектный файл (.o
) это должно быть в состоянии связать с printf()
до тех пор, пока вы определите это правильно и ссылку на glibc
(или же msvcrt
если ты на винде). У них также, кажется, есть библиотека под названием llvm_cbuilder
как часть llvmpy
это может помочь вам сделать это. У них даже есть тестовый случай только для printf()
:
https://github.com/llvmpy/llvmpy/blob/master/llvm_cbuilder/tests/test_print.py
Другой вариант - иметь свой собственный набор служебных функций, включая те, которые печатают. Затем вы можете передать указатель на таблицу, содержащую все из них, в сгенерированную функцию. Что мне нравится в этом решении, так это то, что оно позволяет вам загружать сгенерированную функцию во время выполнения и избегать реального связывания (но вы должны учитывать перемещения).
И последнее, но не менее важное: Numba всегда является хорошим источником примеров.