Skip to content

【Zig 日报】使用 LLVM 实现增量编译 #318

@jiacai2050

Description

@jiacai2050

作者:Matthew Lugg

在上个月合并了类型解析(type resolution)的相关改动后,我花了一些时间处理个人项目,但最近我还是抽出时间对 LLVM 代码生成后端进行了一些改进。这些改进包含多个方面,旨在实现不同的目标,其中一个用户能直接感受到的好处是:我成功让 LLVM 后端支持了增量编译。

遗憾的是,这无法加快令人头疼的“LLVM Emit Object”(生成对象文件)阶段,因为该过程耗时完全取决于 LLVM 本身。然而,增量编译的意义在于能最大限度减少 Zig 编译器本身代码的执行时间。这意味着,如果你的代码存在编译错误(此时会跳过“LLVM Emit Object”阶段),你通常能非常迅速地看到这些错误。(当然,在构建成功的情况下,它也能提供一定的速度提升。)

目前,该功能已在 master 分支的构建版本中可用,并将包含在即将发布的 0.16.0 版本中(我们很快就会为其打上标签)。

对于还没尝试过的用户,特别是正在使用 Zig master 分支的用户,请务必通过运行 zig build -fincremental --watch 来体验一下增量编译!Zig 核心团队在我们的工作流中已经使用增量编译一年多了,并从中受益匪浅;我们也收到了用户们的积极反馈。目前该功能已相对稳定,很多人都惊讶地发现,只需在几毫秒而非几秒内就能获取最新的编译错误,能节省多少时间。

虽然我个人还没怎么在 LLVM 后端使用过增量编译,但目前持续集成(CI)中所有的增量编译测试覆盖率都已经为 LLVM 后端开启,且我从用户那里得到了积极反馈,所以绝对值得一试。一如既往,如果你在使用增量编译时遇到 Bug,请尽可能向我们反馈!

谢谢大家,希望这些改进对你们有用。

https://ziglang.org/devlog/2026/#2026-04-08

加入我们

Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来:

  1. 供稿,分享自己使用 Zig 的心得
  2. 改进 ZigCC 组织下的开源项目
  3. 加入微信群Telegram 群组

Metadata

Metadata

Assignees

No one assigned

    Labels

    日报daily report

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions