主要观点:作者重新思考 Ninja 设计选择,提出新的构建系统 n2,其通过构建类似清单的文档(包含命令行、输入输出等信息并哈希)来解决 Ninja 中 mtime 比较的问题,采用单遍遍历的方式支持早期截止,且能更高效地处理构建状态和提供进度反馈。
关键信息:
- Ninja 主要依赖 mtime 比较确定构建步骤是否需重新执行,但存在诸多问题,如命令行改变、文件部分写入等情况 mtime 无法准确反映。
- n2 构建类似清单文档并哈希记录构建状态,哈希值易扩展到其他技术,如避免 mtime 完全使用内容哈希等。
- Ninja 原架构双遍遍历支持早期截止较繁琐,单遍遍历方式更简单自然,能更好处理早期截止且无需额外存储状态,还可交错统计文件状态与其他工作。
重要细节: - 列举 mtime 比较处理不好的多种场景,如命令行改变、文件修改顺序等。
- 单遍遍历方式在冷磁盘情况下能更快开始执行任务并提供进度反馈,构建进度条可覆盖统计工作。
- 新方式虽有丢失能解释步骤过时原因等缺点,但在作者看来是为了简化,且 n2 速度与 Ninja 相近。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。