Zig 十年老提案落地:歧义优先级现在必须加括号
来源:ziglang.org — 2026-10-24
📋 概述
Zig 第二古老的开放提案(2016 年 2 月提出的 issue #114,要求对容易混淆的运算符组合强制加括号)在十年后由贡献者 CMDRZero 实现进了 master。从此一部分运算符组合不再有定义的优先级,混用时编译器直接报「ambiguous operator precedence」并提示加括号,同时注明 0.17.x 里原本是怎么结合的。算术与比较这类常见组合不受影响,整个代码库里一百多万行只有 353 行需要改。
🔑 核心要点
- 受影响的是 模糊组合:比如 x orelse y == z 现在直接报错,必须写明是 (x orelse y) == z 还是 x orelse (y == z)
- 常见写法不受影响:x + y * z 照旧免括号,算术、比较、and/or 的优先级表保持直觉
- 设计目标是减少读代码时必须记住的规则数量,而不是消灭所有优先级——% 与乘除法混用、和自己混用都要加括号
- 迁移有两条路:按编译器报错逐个手改,或者用 zig fmt --upgrade 自动补括号并保持原有结合顺序
- 作者更推荐手改——重新判断那些罕见组合的真实意图,常常能顺手挖出 bug;自动改完也要过一遍 diff
- 存量影响很小:一百多万行里只有 353 行 需要调整,说明这些组合本来就很少见
💡 金句
The idea behind this is to reduce the number of rules a programmer needs to know when reading and writing Zig code.
👍 0
👎 0
← 返回 Lobsters 首页