Potato 形式对象
Potato 不是语言。它没有语法,只有结构。它的位置在编译流程的输出端:每个编译单元产出一份机器可读的形式对象,描述这个单元的类型、布局、能力需求与契约。
{"unit": "ahci.flush",
"potato": "v1",
"language": "loment",
"capabilities": [
{"name": "blk_write", "domain": "disk[0..4]",
"revocable": true, "on_revoke": "fallback"}
],
"contracts": [{"pred": "hex64", "mode": "binary"}],
"guards": 1,
"excluded": []}
v0 与 v1
| 版本 | 覆盖 | 状态 |
|---|---|---|
| v0 | 标量、数组、struct、枚举、布局、能力域 | 仍合法,可回放(冻结样本 demo.v0.json 持续回放) |
| v1 | 新增泛型与单态化实例、trait/impl、切片、str、ptr、()、guard 审计站点 | 7/7 自检 · 33 条反例全被拒 · 跨实现 50/50 |
版本策略:
v0 对象永远合法——新版本发布不会让旧对象失效。这看起来是小事,但它决定了“回放”能不能作为一条长期判据存在。
校验分三层
| 层 | 查什么 |
|---|---|
| 结构层 | 顶层字段白名单(按版本)、unit/language/imports 形态、表内元素唯一、types 与 enums 共用一个命名空间 |
| 类型层 | 合法类型的递归定义;layout 字段只允许定宽整型,且 offset + width ≤ size、区间不重叠 |
| 语义层 | 能力域区间合法性、枚举载荷键、泛型参数、单态化实参匹配、trait/impl 方法集、guard 计数非负 |
反例完备性由 33 条变异保证:规范里每一条规则至少对应一条被拒绝的反例。这是防止“规范写得很严但校验器没实现”这类空隙的办法。
强制导出的三层都不可关闭
- 编译器内部 —— emit_potato() 返回前调用独立校验器,有错即编译失败。
- CLI 层 —— 要 --emit-rust / --emit-llvm 就必须同时给 --emit-potato,否则退出码 2。
- 仓库层 —— lom_audit 要求每个示例都有一份逐字节一致的对象,且通过独立校验器。
跨实现一致性(M53):
同一份形式对象必须被两份独立实现判成同一个结果——FujoOS 侧的 potato.py 与 LinuxFUAI 侧的 potato_verify.py(按规范独立实现,不 import 前者)。50 条对照全部一致。