模块系统 - inline-function/Sublimation GitHub Wiki
模块系统
目录即模块
一个目录 = 一个模块。项目里每个子目录默认是一个独立模块。
MY_PROJECT/
main.subl ← 根模块(有全局唯一 main())
MY_PROJECT.settings ← 根模块声明(mount 依赖)
stdlib/ ← 标准库(隐式自动挂载,无需声明)
users/ ← 子模块目录
users.subl
users.settings
挂载 mount
在 .settings 文件里用 mount 声明依赖:
# MY_PROJECT.settings
mount users
mount stdlib
stdlib/(根目录下)隐式自动挂载——任何模块都能直接用。- 挂载后,被挂载模块里的类型、函数、构造子、定理对当前模块可见。
跨模块解析
裸名自动跨模块解析:
// 本模块没有定义 Ok/Err,但 stdlib/collection 有——直接可用
var r: Result[Nat, Str] = Ok(42)
构造子(如 Ok/Err)、结构体、函数、定理都会在可见模块(含 stdlib)里依次查找。
定理跨模块搜索
证明时,定理搜索沿可见路径跨模块展开:
+∵ n ∈ (0..30)
∴ n ≥ 0 // 命中 stdlib/logic.subl 的 rangeLowerBound / natNonNeg
编译
java -jar sublimation.jar compile MY_PROJECT -o out.js
node out.js
用目录路径作为编译入口(而非单个文件),即走模块系统。