Skip to content

Commit 68bb737

Browse files
speak-agentclaude
andcommitted
docs/22: which of the two new keys an older engine ignores, and which it refuses
`[kernel-abi]` is an unknown top-level table to an engine that predates it and is ignored, so a package adopting it needs no floor move. `[c-abi.absent]` is a new key inside a table mcpp does know, where an unrecognised key is a parse error naming it --- the mechanism that keeps a misspelling from silently disabling a declaration --- so a package adopting that one does. Co-authored-by: Claude Code <noreply@anthropic.com>
1 parent 88dfb74 commit 68bb737

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

docs/22-target-side.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,16 @@ list back when a link names one of the `link`-shaped entries, so
599599
`undefined reference to 'fork'` arrives with the sentence that says whether it
600600
is a defect or a limit of the environment this program was built for.
601601

602+
**An engine that predates these keys.** `[kernel-abi]` is a top-level table an
603+
older mcpp does not know, and an unknown top-level table is ignored: a manifest
604+
carrying it loads unchanged everywhere it loaded before, and the absence of the
605+
resolution-time check is the behaviour that release already had. `[c-abi.absent]`
606+
is not the same case --- it is a new key inside a table mcpp does know, and an
607+
unrecognised key there is a parse error naming the key, which is what keeps a
608+
misspelling from silently disabling a declaration. A package adopting the second
609+
therefore requires an index floor at 2026.9.20.1; a package adopting the first
610+
does not.
611+
602612
**Fingerprint.** The realised environment participates in the build's
603613
fingerprint (`compileFlags`, §92's field 7): two builds whose C library
604614
declares `lp64` and `llp64` compile the same source into objects whose

docs/zh/22-target-side.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,12 @@ tcsetattr = { form = "accepted-no-effect", note = "openkal 不命名的那些字
471471
`undefined reference to 'fork'` 会带着那句说明它是缺陷还是这个程序所构建环境之限制的话
472472
一起到达。
473473

474+
**早于这些键的引擎。** `[kernel-abi]` 是一个旧 mcpp 不认识的**顶层表**,而未知顶层表
475+
被忽略:带着它的清单在它此前能加载的每个地方照常加载,解析期检查的缺席正是那个版本本来
476+
就有的行为。`[c-abi.absent]` 不是同一种情形——它是 mcpp **认识的表里的一个新键**,而那里
477+
的未知键是一条点名该键的解析错误,这正是让拼错不会静默关掉一条声明的机制。因此采用后者
478+
的包需要把索引 floor 抬到 2026.9.20.1,采用前者的包不需要。
479+
474480
**指纹。** 解析出的环境参与构建指纹(`compileFlags`,§92 的第 7 项):C 库声明 `lp64`
475481
`llp64` 的两次构建,从同一份源码编译出 `long` 宽度不同的目标文件,因此二者绝不共享输出目录,
476482
也不会复用对方产出的目标文件缓存。

0 commit comments

Comments
 (0)