Zig 2026 年开发日志:SPIR-V 后端、@bitCast 语义及构建系统等多方面改进!

发布时间:2026/6/30 21:22:57
Zig 2026 年开发日志:SPIR-V 后端、@bitCast 语义及构建系统等多方面改进! 开发日志汇总本页面精心整理了 Zig 主分支的近期更新内容你也可通过 RSS 订阅来获取相关信息。此页面记录的是 2026 年的更新条目其他年份内容可查看开发日志存档页面。2026 年 6 月 26 日SPIR-V 后端进展作者是 Ali Cheraghi。在最近编译器更新后SPIR-V 后端出现诸多问题他花了好几周改善其状况。首先引入了新的 SpirvType 内置函数以解决编写着色器时长期存在的难题可查看相关链接了解背景。执行模式信息现在由调用约定承载删除了旧的辅助函数拒绝手动编写的指令还为网格着色管线添加了两种新调用约定。功能和扩展现在完全由 CPU 特性集驱动汇编器拒绝直接生成相关指令。SPIRV 后端现在多线程代码生成恢复了两个 ISel 传递。现在 .spv 文件被识别为对象文件可合并多个文件还修复了数十个 bugspirv64 - vulkan 目标上的总通过行为测试增加近 10%std.gpu 被重命名为 std.spirv虽仍有大量行为测试被跳过但现在是尝试用 Zig 编写着色器或计算内核的不错时机可在 Codeberg 上提交 bug 报告。2026 年 6 月 25 日新的 bitCast 语义和 LLVM 后端改进作者 Matthew Lugg 开始在分支上工作实现对 LLVM 后端的改进此改动逐渐扩大实现了一些语言提案。Zig 一直将任意位宽整数类型直接转换为 LLVM IR 的位整数类型但不理想此 PR 目标是操作值时用位整数类型存储到内存时扩展为 ABI 大小类型。bitCast 过去定义有问题现在偏离了原定义LLVM 后端实现的未明确指定语义受存储方式改变影响作者选择实现新定义。2024 年 Jacob Young 撰写提案解决 bitCast 问题提案被接受自托管 x86_64 后端已实现新语义现在是在所有地方实现新语义的好时机还可利用 Legalize 传递。作者在整个编译器实现新语义审核大量 bitCast 使用情况PR 通过测试并合并到主分支。新的 bitCast 语义基于逻辑位布局与旧语义不同在涉及聚合类型时表现不同还允许一些奇特操作如将 [2]u3 转换为 Vector(3, u2)。还实现了几个小提案所有更改语义将在 0.17.0 版本说明中解释并给出迁移步骤。此分支改变 LLVM 后端转换方式恢复了被遗漏的优化Zig 编译器性能提升约 5%0.17.0 版本可能有轻微运行时性能提升。2026 年 5 月 30 日ELF 链接器改进作者 Matthew Lugg 致力于 Zig 0.16.0 中推出的新 ELF 链接器开发。最初该链接器仅支持链接纯 Zig 代码默认禁用现在取得很大进展能在启用 LLVM 和 LLD 库时构建自托管的 Zig 编译器。新链接器支持快速增量编译在 x86_64 Linux 上链接外部库等时可增量重建且无额外性能开销在 Andrew 的俄罗斯方块克隆版和 Zig 编译器本身测试效果良好。目前链接器最大缺失功能是不支持为 Zig 代码生成 DWARF 调试信息这是接下来首要任务但即时重建实用性令人惊讶。使用 Zig 主分支且是 x86_64 Linux 的用户可尝试新链接器遇到 bug 可提交问题。Zig 0.17.0 即将发布标记版本用户很快可尝试此功能。2026 年 5 月 26 日构建系统重构作者 Andrew Kelley 提到一个重要分支合并将构建过程与配置过程分离。以前 build.zig 文件和构建系统实现编译到一个臃肿进程现在 build.zig 文件编译成小进程构建图序列化父进程缓存配置文件异步编译构建器进程构建器进程执行构建图且每个 zig 版本 只编译一次。此次更改使 zig build 更快一是只编译用户 build.zig 逻辑二是无变化时可跳过重新运行 build.zig 逻辑三是执行构建图的进程启用优化。通过运行 zig build --help 前后差异可看出性能提升显著构建系统使用缓存配置。第三方工具将受益于序列化配置文件变更集对构建系统内部机制重大重构但 API 角度大部分非破坏性有一处主要破坏性更改示例。想影响 Zig 发展方向的用户可升级到开发版本尝试更改0.17.0 版本几周内发布若版本破坏构建0.17.1 版本有机会修复。2026 年 4 月 8 日与 LLVM 的增量编译作者 Matthew Lugg 在合并类型解析更改后对 LLVM 代码生成后端进行改进成功让 LLVM 后端支持增量编译。增量编译虽不能加速 LLVM 生成目标文件过程但能减少 Zig 编译器代码花费时间有编译错误时能快速得到错误信息成功构建时也有速度提升。此功能在主分支构建中可用将包含在 0.16.0 版本中用户可通过在 zig build 命令中传递 -fincremental --watch 尝试该功能相对稳定CI 中增量测试覆盖已为 LLVM 后端启用用户反馈积极遇到问题可报告。2026 年 3 月 10 日类型解析重新设计附带语言更改作者 Matthew Lugg 合并了一个 30000 行的 PR目标是重构 Zig 编译器内部类型解析逻辑。Zig 编译器现在分析类型字段更懒惰未初始化类型无需关心其样子如使用 std.Io.Writer 时编译器不会引入 std.Io 中代码。在 “依赖循环” 体验方面改进遇到依赖循环会得到详细错误信息。该 PR 对 “增量编译” 功能重大改进修复大量已知 bug消除 “过度分析” 问题使增量编译更快用户可尝试增量编译。PR 还有很多其他更改包括 bug 修复、小语言更改和编译器性能提升可查看 Codeberg 上的 PR 了解更多遇到 bug 可提交问题。2026 年 2 月 13 日io_uring 和 Grand Central Dispatch 的 std.Io 实现已合并作者 Andrew Kelley 提到随着 0.16.0 版本发布周期接近尾声Jacob 使 std.Io.Evented 跟上 API 更改包括 io_uring 实现和 Grand Central Dispatch 实现这两个实现基于用户空间栈切换。可通过 std.Io.Evented 试验构建应用程序但要视为实验性的还有后续工作要做如更好的错误处理、移除日志记录等。Zig 代码有望轻松切换 I/O 实现并给出了示例代码和运行示例。