写一个快速编译器:单核每秒 50 万行的实战技巧
来源:tibleiz.net — 2026-08
📋 概述
作者分享自己为语言写的编译器如何在单核上做到每秒至少编译 50 万行(不含空行和注释)的实战技巧。核心思路分几条:设计一门适合手写递归下降解析的简单无上下文语法;尽量减少代码与内存访问、避免数据拷贝(用指针+长度代替零终止字符串);用内存区域(region)管理分配与释放,让分配只前进指针、释放一次清空;把标识符在词法阶段转成整数以便快速比较;针对「错误是特例」优化常见路径,并优先执行最快的错误检查条件。
🔑 核心要点
- 目标:单核每秒 ≥ 50 万行编译速度,直接影响开发循环体验(Rust 编译慢常被吐槽)。
- 语法设计先行:采用适合递归下降的简单无上下文语法,电脑好解析、人也好解析。
- 用 指针+长度替代零终止字符串,直接引用输入缓冲而无需拷贝。
- 用 内存区域(region)管理内存:分配只前进指针、整块释放,极其高效。
- 把标识符在词法阶段转成整数,用整数比较代替字符串哈希与比较。
💡 金句
当我的最大程序不到 10 万行、每秒却能编译 50 万行时,我根本不用操心分离编译的问题——完整构建不到 200 毫秒。
👍 0
👎 0
← 返回 Lobsters 首页