Skip to content

Commit 08f3d0b

Browse files
committed
docs: 方案更新 —— 收回一条论证、openarch 两个接口已完成、QEMU 改为临时 PR 先跑通
**⚠️ 收回一条论证。** 第一版反对把 libc++ 头独立成包,理由是「索引没有表达 跨包版本约束的机制」。那个前提是错的:一条带版本要求的依赖边**就是**那个 机制,而 `std-freestanding` 自己已经在用(`[feature-deps]` 里的 `^0.2.0`)。 我把「描述符里的注释」与「依赖边」混成了一件事。 收回之后取舍**相反**:改选独立成包。决定性的不是体积(0.9 MB 对 893 MB 两边 都不痛),而是另外两点——它是我们自己能做完的(载荷打包脚本不在本仓库), 并且它把这件事放回了本次实施已证明正确的位置:**目标需要什么由目标解析, 而不由宿主的编译器顺带提供**,与 C 库经 `[target.X].sysroot` 解析同构。 顺带回答了「freestanding 支持应当与标准库无关」:拆成接口 / 配置 / 头从哪来 三层之后,只有中间一层与实现有关,而且很小(libc++ 合成 `__config_site`, libstdc++ 一个宏、实测 29/34)。Windows 的问题在第三层,与用哪个标准库无关。 **openarch 第 3 节改为已完成**:trap 与 cpu 两个接口连同两个后端已实现 (0.3.1),并补上三层目录树(abi / spec / backends)与它逼出的接口变化。 ⭐ 记下门槛产出的第三条发现:`trap_frame` 必须带 `instr_len`——rv64gc 的 `c.ebreak` 是两字节,按 4 推进会落进下一条指令中间,而 aarch64 只有一种指令 宽度、永远暴露不了它。 **x86_64 采纳「先在临时 PR 的 CI 上跑通五条腿再收录」**:GitHub 托管的 runner 恰好覆盖本索引服务的五个宿主,可以在同一个 PR 的矩阵里一次跑出来。构建失败 在那里只是一个红叉,而不是一个已发布却装不上的包;而且它把 Windows 那条最难 的腿的风险前置。
1 parent 3799a44 commit 08f3d0b

1 file changed

Lines changed: 216 additions & 85 deletions

File tree

0 commit comments

Comments
 (0)