能力域即语言构造
这一页是语言与 FUAI 的接缝。如果能力只是一组运行时检查函数,那么“这个程序需要哪些能力”就只能在运行时才知道;如果能力是语言构造,它就能在编译期被声明、检查、并导出成形式对象。
// 声明一块可撤销的能力域 capability blk_write: disk[0..4] revocable { on_revoke => fallback } export fn flush(req: FlushReq) contract(hex64) { guard blk_write(idx) // 越界在编译期拒绝 ... }
四件事由同一条声明推出
| 层 | 发生时机 | 产物 |
|---|---|---|
| 编译期边界检查 | 编译时 | 越界访问直接编译失败 |
| 运行期 trap | 运行时 | 动态越界落到 trap,而不是静默继续 |
| 审计计数 | 每次使用 | guard 站点落审计(A2 的输入) |
| 域表 | 编译时生成 | CapDomain 常量表,供内核执行 |
这四件事合起来,让 A1–A4 从“运行时可能会检查”变成“离线就能判定”。其中 A1(无越权执行)和 A4(可撤销)直接来自这条声明的两个字段,A2(可审计)来自 guard 站点,A3(模型缺席仍运行)来自“没有申请 AI 能力空间”这一条可检查的性质。
实测过的两件事
- 能力域模糊测试 —— 120 组随机域与索引,无一次越权放行。
- 越界声明编译期报错 —— excluded 出界声明强制生效,不是警告。
延伸到内核:
域表由形式对象生成后交给内核执行;内核侧的能力表与审计环见 AI 层 · 能力域与审计环。