写一个快速编译器:单核每秒 50 万行的实战技巧
来源:tibleiz.net — 2024-02
📋 概述
作者 Marc Kerbiquet 分享了写快速编译器(单核每秒编译至少 50 万行)的具体手法:极简无复制数据结构、内存区域分配、标识符直接映射为整数、错误路径优化、只编译用到的部分,以及自行实现的 x64 后端——相比 LLVM 快约 30 倍。文章强调编译速度不只是体验问题,还会反过来塑造编译器设计,让单独的分离编译变得可有可无。
🔑 核心要点
- 用 (start_pointer, size) 指针对替代零结尾字符串,直接从输入缓冲引用子串,零拷贝。
- 内存区域分配(region)只需推进指针,整块一次性释放,极适合编译单元。
- 把标识符转成唯一整数:CPU 擅长定长整数而非字符串,比较与哈希都更快。
- 语法错误按「罕见事件」优化:返回哑表达式而非层层判空,代码更简更快。
- 自研 x64 后端(含伪码生成、重复函数去重、线性扫描寄存器分配、两遍汇编)比 LLVM 快约 30 倍。
- 只编译实际用到的声明,避开庞大库中未使用部分的完整解析。
💡 金句
代码越少执行、内存访问越少,通常就越快——虽然现代架构让这条规则不再绝对,它依然是值得遵循的好原则。
👍 0
👎 0
← 返回 Lobsters 首页