Norm 0.3
Norm 0.3 是 nullable 与算法基础能力版本。本页定义 0.3 的交付契约;语言规范定义完整语义,本版本实现下列能力及其工具链支持。
Nullable 类型
- 普通类型默认非空,
T?显式表示 nullable 类型; null在明确的 nullable 期望类型中获得类型;- nullable 标记支持字段、参数、返回类型、局部变量和嵌套泛型实参;
T?在泛型替换后规范化,重复 nullable 不形成新类型;if、提前return、&&与||参与局部变量的 null flow narrowing;?.对成员读取和方法调用执行 null propagation;??从左到右短路求值并提供 fallback;- guest null 使用独立运行时值表示,JVM 与 Native Image 保持一致行为。
调用与控制流
- 顶层函数、class 方法和内置函数支持同名重载;
- 重载按参数数量、参数标签、参数类型和泛型推断结果选择唯一目标;
for condition { ... }在每轮开始前重新计算 Boolean 条件;- 条件式与遍历式
for在 Syntax、Bound IR 和执行节点中分别建模; - 两种循环都支持
break、continue、return和执行取消检查。
Range 与集合
range(start, end, step)支持正向、反向和跨步的左闭右开整数区间;- 两参数
range(start, end)等价于step: 1; Range.size()与迭代共享同一方向和边界规则;Array<T>与List<T>提供last()和reversed();List<T>提供removeLast();Array.filled与List.filled通过通用类型级成员调用和泛型推断构造集合;Map.get(key:)返回 nullable value,索引读取继续要求键存在;- 集合复制、反转和填充遵循已有 value transfer 语义。
文本与排序
CodePoint.isAsciiDigit()精确判断 ASCII0到9;CodePoint.asciiDigitValue()返回对应整数值;std.collections.sort为 Integer、CodePoint 和 String 的 Array 与 List 提供稳定自然顺序排序;- 排序返回独立集合,String 使用 code point 字典序。
工具与可执行规格
CLI、SemanticModel、Bound IR、Truffle 后端和语言服务器共享 nullable、重载、类型级成员与循环绑定结果。诊断、补全、签名提示、悬停、跳转、引用和重命名覆盖 0.3 语法以及跨文件公开签名。
可执行规格覆盖 null flow 的分支合流与重新赋值、safe access 求值顺序、泛型 nullable、重载歧义、条件循环控制转移、Range 边界与整数溢出、集合空值错误、元素复制语义、Unicode 数字边界、稳定排序以及 LeetCode 1–100 回归。