Zig 十年老提案落地:歧义优先级现在必须加括号
来源:ziglang.org — 2026-10-24
📋 概述
Zig 仓库里第二老的未关闭提案 issue #114 从 2016 年 2 月挂到现在,终于由贡献者 CMDRZero 在主线实现:当运算符组合的优先级本身有歧义时,编译器不再默默按一张难记的优先级表求值,而是要求你写括号。作者用 orelse 与 == 的组合说明,以前 x orelse y == z 会被当成 (x orelse y) == z,现在直接报错;而 x + y * z 这样有明确定义的常见组合依然不用括号,全库迁移只改了 353 行。
🔑 核心要点
- 目标是减少阅读代码时必须记住的规则:歧义组合一律要求括号,而不是靠优先级表硬记
- x orelse y == z 过去按 0.17.x 的规则求值为 (x orelse y) == z,现在必须显式写出来,否则编译报 ambiguous operator precedence
- 常见组合如 x + y * z 仍有明确定义,不需要括号,日常写代码几乎无感
- 迁移成本极低:一百多万行的 Zig 代码里只有 353 行需要改动
- 剩下要记的只有算术与比较那张小表:乘除模先于加减,然后是比较,再是 and/or
- 同日 devlog 还收录了 naked package 支持 version 与 paths、矛盾哈希检测、--print-tree 依赖树、--configure 等构建系统改动
- 顺带收益是依赖体积:只取指定文件后,zlib 的解包体积从 4.3M 降到 1.2M
💡 金句
Ten years later, that proposal has been implemented in the master branch version of Zig thanks to contributor CMDRZero.
👍 0
👎 0
← 返回 Lobsters 首页