sml

SML { ❄ }

下载页 问题反馈、使用疑问,或随便聊聊: QQ 群 · 点击加入 sal@mail.swebase.cn 中文 EN

第 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(绝不静默)。

三条速记:

  1. 五端都稳的(优先用于跨端文档):键值 / 块 / 数组、注释、裸词串、include、$env、单契约 @contract/@is、namespace。
  2. ** Rust(±JS)的进阶**:@when / @for 仅 Rust;typed-block / @type / glob·regex-include 为 Rust + JS。
  3. 会静默或降级的,跨端要当心:C 的 fragment 不展开、C / C++ / Lua 的 typed-block 退化成普通裸块、Lua 的 for 待复核 —— 这些端要么明确报码、要么留下与预期不同的树。

→ 回教科书目录