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