Skip to content

Norm 0.4 ​

Norm 0.4 建立源码 authoring 与 content-addressed Core IR 组合的编译模型。本页定义 0.4 的实现契约;语言语法和类型语义继续由语言规范定义。

编译模型 ​

  • .norm 源码与 module.norm 是项目事实来源;
  • ProjectLoader 为 CLI、Language Server 和测试工具建立统一的不可变 source set;
  • 项目拓扑由 module() 返回值、路径和 package 头确定;配置求值失败时,Language Server 仍以 module.norm 所在目录作为稳定项目根;
  • CompilationScope 保存源码归属和直接模块依赖,Analyzer 与语言服务据此执行相同的可见性规则;
  • 名称解析与类型检查完成后,Binder 的结果统一进入 CoreBuilder;
  • Language Server 使用纯 authoring snapshot,执行编译按需物化 Core;
  • TypedProgram、ExecutionBackend 与 Truffle Lowerer 只使用 CoreCompilation;
  • ResolvedCall 是调用目标、实例化签名、类型实参和实参映射的单一事实来源。

内容身份 ​

  • DefinitionId 由版本化 canonical bytes 与固定依赖决定;
  • callable、参数、局部变量和源码位置变化不改变等价 callable 的 identity;
  • 局部变量和类型参数使用定义内索引;
  • 互递归定义按强连通分量规范化并共享 DefinitionGroupId;
  • 调用、构造、enum、用户类型和字段 owner 固定为完整 DefinitionId 或递归组成员索引;
  • 运行时类型 capture 按类型参数索引规范化;
  • 模块坐标、名义类型 arity 与 enum 的可观察文本保持语言语义。

authoring 名字和导出信息由 CoreNamespace 管理;CoreAuthoringMap 保存每个来源 occurrence 的名字、位置和精确引用路由。同一内容定义可以关联多个源码来源,诊断和调用栈仍返回实际执行的来源。

存储与增量 ​

  • canonical definition group 使用 SHA-256 内容 identity;
  • 内存与文件 DefinitionStore 共享同一最小 API;
  • 文件存储执行只读校验、跨进程原子发布与并发清理,缺失内容与损坏内容使用不同结果,并由 CLI 跨进程复用;
  • 存储准入结果使用强类型状态,根策略与维护锁保证多进程采用同一容量边界;
  • 模块和独立文件分别使用稳定的 CompilationUnitId 保持编译会话历史;
  • CoreDependencyIndex 提供直接依赖、反向依赖与传递 dependents;
  • CoreCompilationDelta 精确区分新增、复用和脱离当前命名空间的定义;
  • 依赖 identity 传播使变更闭包自动获得新 identity,不相关定义保持可复用。

执行与工具 ​

  • Truffle artifact 使用独立 ArtifactId;
  • artifact identity 包含 Core groups、入口 occurrence、namespace/interface、binding occurrence、源码内容、origin、引用路由和后端 ABI;
  • 长时间运行的后端使用有界 artifact cache;
  • ExecutionContext 作为隐藏根参数沿调用传递,可执行 artifact 可跨独立执行安全复用;
  • Polyglot 入口在执行时读取当前 context;
  • 诊断与语言服务继续使用同一 SemanticModel 和 authoring identity;
  • Core 在落盘前验证类型、调用、内建操作、namespace binding 和完整依赖闭包;
  • 标准库源码进入同一 Core、存储和依赖链路。

可执行规格 ​

测试覆盖 identity golden bytes、源码移动与重命名、模块版本、名义类型、声明重排、递归组规范化、类型与调用依赖传播、authoring occurrence、内容损坏与并发存储、Core-only backend、artifact 复用、Polyglot 多 context,以及单文件、模块和标准库程序执行。

完整身份规则与阶段边界见编译器架构,项目加载规则见模块系统。

Norm 0.25