第 14 章:能力地图
为什么有这一章:typed-block / @when / @for 这些进阶能力只在第 10 章出现,第 1–9 章一处入口都没有 —— 读者很容易以为"SML 就会前九章那些"。本章把所有能力摊成一张表:是否 opt-in、五端支持、在哪一章详解。写跨端文档前,先来这里对一眼。
数据来源:第 10 章「实现面总表」(2026-09-19 真机实测)+ 契约叠加(2026-10-12,任务 C/D/F)。 判据是跑出来的行为,不是读源码猜的;
?= 未实测(不代表没有)。
| 能力 | 默认 | Rust | JS | C | C++ | Lua | 详解章节 |
|---|---|---|---|---|---|---|---|
| 键值 / 块 / 数组 / 标量 | 开 | ✅ | ✅ | ✅ | ✅ | ✅ | 第 1–2 章 |
注释(# -- // /* */ _* *_) |
开 | ✅ | ✅ | ✅ | ✅ | ✅ | 第 1 章 |
裸词即串(bareword-string) |
开 | ✅ | ✅ | ✅ | ✅ | ✅ | 第 1 章 |
include(单文件) |
开 | ✅ | ✅ ※ | ✅ | ✅ | ✅ | 第 4 章 |
env($env.X) |
开 | ✅ | ✅ | ✅ | ✅ | ✅ | 第 6 章 |
契约(@contract / @is,单契约) |
开 | ✅ | ✅ | ✅ | ✅ | ✅ | 第 5 章 |
片段(@base {} + &base) |
开 | ✅ 展开 | ✅ | ⚠️ 不展开 | ❌ | ❌ | 第 3 章 |
namespace(include … as ns) |
开 | ✅ | ✅ | ✅ | ✅ | ❌ | 第 4 章 |
implicit-ns |
开 | ✅ | ✅ | ? | ? | ? | 第 4 章 |
top-level-array(文档根是数组) |
开 | ✅ | ❌ | ✅ | ❌ | ❌ | 第 10 章 |
| 契约叠加(mixin,一个块多约) | 开※ | ✅ | ❌ 017 |
❌ 017 |
❌ 017 |
❌ 017 |
§5.4.1 |
typed-block(契约名 块名 { }) |
关 | ✅ | ✅ | ❌ 静默降级 | ❌ | ❌ | §5.2.2 |
@type 模式(Loom-in-SML) |
开 | ✅ | ✅ | ❌ 明确拒绝 | ❌ 明确拒绝 | ❌ 明确拒绝 | §5.2.2 |
multi-include(include "a", "b") |
关 | ✅ | ✅ | ✅ | ✅ | ❌ | 第 10 章 |
glob-include(include "inc/*.sml") |
关 | ✅ | ✅ | ❌ | ? | ❌ | 第 10 章 |
regex-include(include "re:…") |
关 | ✅ | ✅(受限子集) | ? | ❌ | ❌ | 第 10 章 |
ext-rewrite |
关 | ✅ | ? | ? | ? | ? | 第 10 章 |
@when |
关 | ✅ | ❌ | ❌ | ❌ | ❌ | 第 10 章 |
@for |
关 | ✅ | ❌ | ❌ | ❌ | ⚠️ 待复核 | 第 10 章 |
@feature 门控机制本身 |
— | ✅ | ✅ | ❌ | ❌ | ❌ | 第 10 章 |
※ JS 的 include 由宿主提供文件表(parse(text, { files })),JS 侧自己不读盘(为编辑器 / 服务端内嵌设计)。
※ 契约叠加无需额外 @feature(随 contract 默认开),但目前只有 Rust 落地,其余四端明确报 E-CONTRACT-017(绝不静默)。
三条速记:
- 五端都稳的(优先用于跨端文档):键值 / 块 / 数组、注释、裸词串、
include、$env、单契约@contract/@is、namespace。 - ** Rust(±JS)的进阶**:
@when/@for仅 Rust;typed-block/@type/glob·regex-include为 Rust + JS。 - 会静默或降级的,跨端要当心:C 的
fragment不展开、C / C++ / Lua 的typed-block退化成普通裸块、Lua 的for待复核 —— 这些端要么明确报码、要么留下与预期不同的树。
→ 回教科书目录