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 已移除。