Hasty Briefsbeta

双语

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'进一步编译为可执行文件。
  • 未来计划为语言添加相等运算符和控制流功能。