使用Haskell和LLVM实现JIT编译的语言 0x00

这篇文章翻译自Stephen Diehl的Blog,鉴于原文的长度,这将会是个天坑。

那么,为什么要翻译这篇文章呢?主要还是由于Stephen Diehl大神的文章实在是让人大开眼界(特别是这篇,当初看过LYAH之后就该直接来刷这个的,简直跟翻开一本黑魔法书一样)。并且,这篇blog的深度正好适合“入门”之后的中级Haskeller。这个项目从头到尾自己敲一遍基本上Haskell的种种特性就熟悉了(笑)。

注:本文会夹杂大量私货,同时会补充原文中不易理解的地方,如有错误还请指正。

那么,在开始之前,先放上目录吧。


Chapter 1 (引言)

  • 设置
  • 基本语言
  • LLVM 介绍
  • 完整源码

Chapter 2 (语法分析(Parser)和抽象语法树(AST))

  • Parser组合子(Parser Combinator)
  • 词法分析器(Lexer)
  • 语法分析器(Parser)
  • REPL
  • 完整源码

Chapter 3 (代码生成)

  • Haskell LLVM绑定
  • 代码生成设置
  • 代码块(Blocks)
  • 指令(Instruction)
  • 从抽象语法树到中间语言(IR)
  • 完整源码

Chapter 4 (JIT 和优化器支持)

  • 抽象语法树和模块(Modules)
  • 常量折叠(Constant Folding)
  • Optimization Passes(优化阶段?)
  • 添加一个JIT编译器
  • 外部函数
  • 完整源码

Chapter 5 (控制流)

  • “if”表达式
  • “for”循环表达式
  • 完整源码

Chapter 6 (运算符)

  • 用户定义的运算符
  • 二元运算符
  • 一元运算符
  • Kicking the Tires <- 这个太不好翻译了(逃
  • 完整源码

Chapter 7 (变量)

  • 为什么这是一个困难的问题
  • LLVM中的内存
  • 变量
  • 赋值
  • 完整源码

Chapter 8 (结语)

  • 教程总结

Chapter 9 (附录)

  • 命令行工具

如果有时间的话大概会实现一些扩展功能,到时候再加上吧。