Skip to content

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() 精确判断 ASCII 0 到 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 回归。

Norm 0.25