Zig's Incremental Compilation Internals
a day ago
- Zig的增量编译能够检测到发生变化的函数或声明,仅重新编译这些部分,并通过修补二进制文件实现快速重建。
- 该功能如今已适用于实际项目,并且Zig核心团队每天都在使用。
- 演示显示,在初始5秒构建后,重建仅需50-70毫秒。
- 每个文件的处理(解析、AstGen、ZIR)可轻松并行化,并缓存到磁盘上。
- 语义分析通过分析单元(类型、值、实体)的依赖图来最小化重新分析的范围。
- 代码生成(从AIR到MIR)可轻松并行,且函数之间相互独立。
- 增量链接利用MappedFile抽象来实现调整大小和可修补性,从而避免完全重新链接。
- 链接器通过指数增长扩展来摊销移动成本,使得缓慢更新很少发生。
- Flush包含引用图的遍历;但仍存在优化机会。
- 使用方法:在Zig主分支上运行`zig build --watch -fincremental`,目标为x86_64-linux。