Skip to content

Norm 0.7 ​

Norm 0.7 建立可持续演进的编译器架构,并交付具有明确生命周期的增量编译会话。本页定义 0.7 的实现契约;语言语法与类型规则继续由规范定义。

编译边界 ​

  • 编译结果拆分为不可变的 CoreArtifact、运行期 CompilationState 和组合边界 CompilationOutput;
  • frontend、执行 API、Truffle 后端与 CLI 成为独立 Gradle 模块,执行 API 不依赖具体后端;
  • NormRuntime 是运行时组合入口,Truffle 只消费 Core artifact;
  • ArchUnit 自动约束 frontend、bound、Core 与 Truffle 的依赖方向。

增量编译 ​

  • CompilerSession 统一提供 compile、analyze、snapshot、invalidate 和 close 生命周期;
  • 解析结果与编译单元使用有容量限制的 LRU 缓存;
  • 声明级分析根据语义依赖复用结果,并在声明、导入、包上下文或编译作用域变化时精确失效;
  • 编译控制统一提供取消、文档规模、源码规模、工作量和 Core 规范化搜索预算。

Core 基础设施 ​

  • CoreWalker 与 CoreRewriter 是 Core IR 遍历和重写的统一入口,覆盖捕获类型和引用;
  • 定义存储使用批量 putAll 写入口,每批统一维护容量并按 shard 安全发布;
  • Core 规范化提供搜索记忆、预算控制和度量;
  • 构建版本由 Gradle 生成,CLI 与 Truffle metadata 使用同一版本常量。

语言与运行时一致性 ​

  • 标识符语义值统一为 NFC,token 仍保留源码原始拼写与精确 span;
  • equality 与大小比较不可连续书写,显式括号仍可组合比较结果;
  • Map 与 Set 使用语言内建 equality/hash,复合 value 可直接作为键或元素;
  • Range 与 StringBuilder 的运行时类型来自编译后的 CoreType;
  • clamp 校验区间顺序,参数契约统一通过 require 报告 INVALID_ARGUMENT;
  • Parser 在缺失 token 与局部损坏后继续产生稳定诊断,VS Code 运行任务保留进程退出状态。

模块项目 ​

  • 项目配置是与应用入口同目录、无 package 声明的 module.norm,通过普通 Norm 函数 Module module() 返回模块定义;
  • 模块配置由编译器和运行时执行,能够使用标准库,并将结果发布为强类型 ModuleDescriptor;
  • 独立的 project-system 模块统一负责项目发现、源码归属、导出边界、依赖解析和模块图构建;
  • 编译作用域以 ModuleCoordinate、ModuleSourceCoordinate 和 ModuleGraph 表达模块身份与依赖关系。

VS Code 与发布 ​

  • 运行当前文件前会保存同一工作区中已修改的 Norm 文档,使项目配置和跨文件依赖使用一致的磁盘快照;
  • 开发 VSIX 同时支持当前源码 JVM server 和已暂存的多平台原生 CLI;
  • 通用发布包从发布目标清单装配各平台 CLI,并校验版本、内容哈希和 VSIX 目录边界。

升级说明 ​

Java 集成应使用 CompilerSession 获取 CompilationOutput,使用 CoreArtifact 跨越后端边界,并通过 NormRuntime 执行程序。旧的 Compiler、CompilationEnvironment、CoreCompilation 和 ProgramRunner API 已移除。

完整边界见编译器设计、实现策略和工具链开发规范。

Norm 0.25