Compiling a Functional Language to LLVM (2023)
8 months ago
- #functional-programming
- #LLVM
- #compiler
- 作者讨论了将名为'mimsa'的小型函数式语言编译到LLVM的过程。
- 提到了Joseph Morag的Micro-C系列和《将高级概念映射到LLVM IR》等资源,但缺乏对函数式编程范式的深入探讨。
- 初始语言是一个支持加减乘除等运算的基础计算器。
- 使用抽象语法树(AST)在内部表示程序,并带有源代码位置注释。
- 选择'megaparsec'库进行解析,因其速度快、错误处理优秀且具有空格管理特性。
- 在转向LLVM编译前,先实现了一个简单的解释器来求值表达式。
- 引入LLVM作为工具,无需深入了解各种架构即可将高级语言编译到多平台。
- 创建了最小化C运行时来支持该语言,主要包含'printint'函数。
- 使用'llvm-hs-pure'和'llvm-hs-pretty'库从Haskell生成并格式化LLVM IR。
- 演示了将表达式转换为LLVM IR的过程,包括处理算术运算。
- 展示并解释了简单表达式(6*8-3)生成的LLVM IR代码。
- 编译器输出LLVM IR后,通过'clang'进一步编译为可执行文件。
- 未来计划为语言添加相等运算符和控制流功能。