Skip to contents

做了什么

  • 八条契约全落地(探针为可测试载体,零真实算法内核——M1s 才进 kernel 导出): | # | 契约 | 落地 | |—|—|—| | 1 | 无状态 | 全导出一次进出,无句柄/.state(D12) | | 2 | column-major | 非对称 golden 往返探测器(位置加权校验和),Rust 单测 + R 双向测试 exact identical | | 3 | NA/NaN | R validator 第一层(msuiter_error_na + i/j)+ Rust debug_assert/显式扫描第二层 | | 4 | 索引 | i32→i64 显式 + bounds check,越界 Err 非 panic | | 5 | 错误 | Result<_, MsError> 仅边界转 condition(class msuiter_error_rust);panic 经 catch_unwind → 整调用报错无部分结果 | | 6 | 并发 | per-call ThreadPool;每 item 独立 PCG64 流 + 按索引定序拼接;threads∈{1,4,16,NULL} 输出 identical()(1000 items 真实 FFI 断言) | | 7 | 中断 | 主线程 chunk 边界 R_CheckUserInterrupt + worker 仅见 AtomicBool;机制级测试(真实 Ctrl-C 场景留 CI/U-M0-07) | | 8 | 构建 | build.rs 经 $RUSTC 记录真实编译工具链;rayon 启用并钉版 1.10.0(≥1.11 需 rustc 1.80,延续 ADR 0002 §4 纪律) |
  • ms_sitrep()(@export):R/包版本、真实 Rust 工具链、线程配置、refdb/options,缺失项如实 “not yet available”。
  • vignettes/articles/ffi-surface.qmd 建立(冻结工件):导出清单/明细表/冻结协议 + 漂移守卫测试(清单 ↔︎ 生成 wrappers 集合逐项比对,仓库守卫语义)。
  • 电池:cargo test stable 与 1.71.0 各 34 passed;testthat 750 PASS;check 0/0/1 NOTE。

关键决策(契约引用)

  • 审核修正(P1 联合项):本单元 vendor 新增 rayon+rayon-core 而未按 ADR 0002 §2 自身纪律追加记录 → 已重测三口径(未压缩 12,526,058 / tar 16,516,096 / xz 1,407,588,xz 增量 +282,452 B ≈ +0.27 MB,仍 ≪ CRAN 5MB 线),ADR 0002 增”增量记录”表,tools/vendor.sh --check 基线常量同步,实测绿。
  • 审核修正(P2):interrupt probe 线程池原用 0(rayon 默认)绕过 option 解析 → 签名加 n_threads,R 包装统一走 .ms_resolve_threads(),ffi-surface.md 签名同步。
  • 错误协议形态偏离(已记录于 ffi-surface.md):R 侧 rlang::abort 上下文字段名用 context(rlang 保留 c 承载子 condition,字面 c= 被劫持),与 U-M0-03 msuiter_abort 的 cnd$msuiter_error 形态并存;M1s 内核进场前统一为共享 helper(U-M1s-09 承接)。
  • 探针单元用纯整数运算——线程不变性在 M0 层面回避了浮点归约顺序问题(probes.rs 明文声明),内核级不变性(含浮点)按计划 U-M1s-05 承接。

审核(第 1 轮)

REVISE → 条件转 PASS(同 U-M0-04:P1 = vendor 基线,机械验证闭环)。审核员确认:线程不变性真测(非同义反复)、探针无玩具内核伪装(scope creep 反向为零)、750/34×2/0-0-1NOTE 声称数字与实测零偏差。

遗留

  • PR 模板 FFI-surface 检查项 → U-M0-08;ms_*_rust kernel 导出 + panic-hook 端到端演示 + 真实中断 CI 场景 → M1s/U-M0-07。
  • condition.rs i64→i32 截断与注册表 S7 私有 attr 两个”注释兜底”细节,内核进场时加固。