Фон: Я пишу игрушку Lisp interperter/compiler в Haskell для собственного развлечения/назидания. Я пытаюсь добавить возможность компиляции в байт-код LLVM.
Контекст: Я читал документацию для LLVM.Core и пример кода (здесь), пытаясь понять средства сочетания и средства абстракции (как описано в Структура и интерпретация Абельсона и Суссмана компьютерных программ.), используемых в привязках LLVM Haskell. Есть много мелких предметов, и я не совсем понимаю, как они предназначены для совместной работы. Похоже, что есть уровень абстракции выше основных инструкций машины LLVM, которые очевидны для кого-то, у кого большой опыт работы с LLVM, но не документированы для тех, кто я, как я, просто мокрые ноги.
Вопрос: Что такое CodeGenModule
и CodeGenFunction
и как они используются для создания Functions
и Modules
?