`用 Rust 从零实现 Lisp 解释器(74 步,零依赖,含完整教程)
坦白说: 本教程在 AI 编程助手的辅助下完成。我亲自跟进了每一步,每次修改后运行
cargo test,调试了每一个编译错误。代码是经过测试且可运行的,可以 clone 下来验证。AI 主要帮助解释概念、组织教程结构和撰写文字,可以理解为一个耐心的结对编程伙伴。
这是什么?
一份手把手的 Rust 实战教程,带你从零开始,用 74 个步骤实现一个功能完整的 Lisp 解释器。
- 零基础友好:不要求你会 Rust,不要求你写过解释器
- 零依赖:不用任何第三方库,纯标准库实现
- 74 步:每一步先说清楚"要解决什么问题",再写代码
- 42 个测试:每一步都有测试验证,确保代码可运行
最终实现了什么?
;; 变量与算术
(define (square x) (* x x))
(square 5) ;; => 25
;; 闭包
(define (adder n) (lambda (x) (+ x n)))
(define add5 (adder 5))
(add5 10) ;; => 15
;; 尾调用优化(不会栈溢出)
(define (loop n)
(if (= n 0) 'done (loop (- n 1))))
(loop 1000000) ;; => done
;; 宏
(defmacro (when test body) (list 'if test body))
(when (> 3 2) 'yes) ;; => yes
;; 准引用
`(1 ,(+ 1 1) 3) ;; => (1 2 3)
教程涵盖什么?
| 主题 | 内容 |
|---|---|
| 词法分析 | 手写 tokenizer,零拷贝优化 |
| 解析器 | 递归下降解析,错误处理 |
| 求值器 | 环境链、词法作用域 |
| 闭包 | Rc<RefCell> 捕获环境 |
| 尾调用优化 | 蹦床循环(trampoline)实现 TCO |
| 宏系统 | defmacro、准引用、gensym |
| 性能优化 | 字符串驻留、FxHasher、零拷贝 |
适合谁?
- 想学 Rust 但不知道做什么项目的人
- 对解释器/编译器原理感兴趣的人
- 想理解闭包、作用域、尾调用等概念底层实现的人
怎么开始?
git clone https://github.com/lisering/lisp-rs.git
cd lisp-rs
cargo test # 运行全部测试
cargo run # 启动 REPL
教程有中英文两个版本,在 README 顶部可以切换语言。
欢迎 star ⭐,也欢迎提 issue 和 PR!
浙公网安备 33010602011771号