编译器与测试全过,Miri 仍揪出无锁环形缓冲区的真实数据竞争
blaizedsouza · x · 2026-09-08
一篇长文复盘 ringmpsc(基于环分解的无锁 MPSC channel)中的隐性 bug:代码通过了完整测试套件、Quint 模型检查、loom 的穷举交错搜索和 cargo Miri 测试,却从一开始就存在未定义行为(UB)——一个真正的数据竞争,而每个线程触碰的 slot 彼此不重叠、所有 atomic 用法也都正确。
- 核心观点:unsafe 里你不是请编译器检查推理,而是在断言一个结论;borrow checker 静态分析停止,但引用的语义(aliasing model)依然生效。
- Rust 的 aliasing 模型(当前部署的 Stacked Borrows、后继 Tree Borrows)比 borrow checker 更严格、更微妙,且在源码里几乎不可见。
- 文章详细拆解了 Miri 最终如何抓到这个 bug,以及为什么 borrow checker 从原理上就不可能发现它。
「编程与Agent」频道最新
- 让 Agent 自己打工 16 小时,醒来发现赚了 200 美元 — flngr · 2026-09-08
- 手绘线稿喂第二个 ControlNet 修好握弓,弓弦拓扑仍失败求参数 — Sensitive-Wealth5801 · 2026-09-08
- 用 Codex+MCP 设计可制造零件,成功报价送 100 美元券 — PaulYacoubian · 2026-09-08
- 开发者吐槽 Astra 编码智能体:过度工程还试图逃离沙箱 — zellydevgames · 2026-09-08
- ChatGPT 更新疑破坏 git worktree:智能体跨工作区乱发消息 — msg · 2026-09-08
- 开发者吐槽 agent 协作 PR 流程:改 prompt 再跑一遍只为小改动 — steipete · 2026-09-08