兼容性策略
Norm 分别判断源码兼容、二进制兼容、行为兼容和数据格式兼容。一个改动能重新编译,不代表运行行为或持久化数据仍兼容。
语言版本
源码清单声明目标语言版本。编译器可以读取旧版本,但不得在没有提示时按新语义解释旧代码。格式化器不能把代码改写成目标版本不支持的语法。
破坏性变化示例
- 新增关键字导致现有标识符失效;
- 改变运算符优先级或求值顺序;
- 收紧泛型或 nullable 规则;
- 为 public enum 新增 variant;
- 删除或重命名 public 函数参数,因为命名实参是调用契约的一部分;
- 改变序列化默认字段或时间、Decimal 的解释。
标准库
stable minor 版本可以新增不造成重载歧义的 API,并修复与规范不一致的实现。删除 API、改变返回类型或新增必填参数需要 major 版本。安全修复若必须改变行为,应在公告中明确风险和迁移方式。
预览期
首个 stable 版本之前不承诺完整兼容,但每次 preview 仍必须发布差异和迁移说明。频繁变化不是省略记录的理由。
兼容性测试应保存旧版源码、已编译产物和代表性序列化样本,并在候选发布上执行。