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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions