本期检索说明

先读取 content/collections/deep-radar 截至 2026-09-06 的全部原文链接,并按 URL、标题与技术问题语义去重。最近 24 小时内,达到“实测数据、源码或汇编证据、原理剖析、工程迁移价值”全部门槛的材料只有 Rust 编译器领域两组公开评审:一组追踪 sanitizer 计算进入高频查询后的性能回归,另一组用成对消融实验拆解闭包别名语义与 LLVM 属性的成本。

两项修改截至截稿均未合入:PR #162371 正在评审,PR #162357 与 #162361 都是 Draft 性能实验。本文只报告公开 patch 与 rustc-perf 结果,不把实验分支写成稳定语义。Java/JVM、Kotlin、Zig 与 Linux 本窗口没有发现同时满足四项红线且未被历史报告收录的新材料,因此不以发布说明或浅层教程补位。

主题 原始发布日期 一手来源与交叉验证 截稿状态 推荐强度
缓存 Session::sanitizers() 的合并结果 2026-09-06 20:43(中原标准时间) rustc PR #162371 / 回归来源 #161953 / rustc-perf / 源码 patch Open,未合入 必读
闭包 MaybeDangling 与 LLVM noalias 消融实验 2026-09-06 16:06(中原标准时间) rustc PR #162357、#162361 / 语义变更 #160745 / rustc-perf / Miri 与 codegen patch Draft,未合入 必读

01 · rustc:把 sanitizer 集合从全局热路径搬回 Session 初始化

原文与日期: Kobzol,2026-09-06 20:43(中原标准时间);rust-lang/rust PR #162371。性能回归可回溯到已合入的 PR #161953,源码 patch 与两次 rustc-perf 运行构成前后对照。

为什么值得读: PR #161953 为了让 Rust 的 sanitizer 默认值覆盖规则与 Clang 一致,把原来一次位或操作改成 combine_with_defaults:遍历互斥 sanitizer 对,优先保留命令行显式选项。逻辑本身很小,但 Session::sanitizers() 会被 fewer_names 等 codegen 路径反复调用;后者在决定每个全局符号地址、每种 LLVM 类型时都可能执行。一次“常数很小”的集合计算因此被调用频率放大,rollup 拆分后的 rustc-perf 显示主基准指令数平均回退 1.3%。

核心技术结论: sanitizer 集合只依赖构建 Session 时已经确定的命令行选项与 target 默认值,生命周期内不会改变。正确的优化边界不是继续微调位集合循环,而是在 build_session 中计算一次,将结果作为 SanitizerSet 字段驻留;所有热路径读取都退化为一次 Copy 返回。

关键变化只有一个缓存字段和一次初始化:

Rust
pub struct Session {
    // ...
    sanitizers: SanitizerSet,
}

let sanitizers = sopts.unstable_opts.sanitizer
    .combine_with_defaults(target.options.default_sanitizers);

pub fn sanitizers(&self) -> SanitizerSet {
    self.sanitizers
}

最有价值的实验、源码与 benchmark 细节: 前序 PR #161953 的拆分测量覆盖 rustc-perf 主、次基准:主基准指令数平均回退 1.3%,区间 0.2%–2.7%,共 32 个显著回退;次基准平均回退 1.5%,区间 0.2%–5.5%,共 40 个。与此同时,Max RSS 在两个主样本上改善 2.9%–11.6%,说明不能只凭内存下降就接受编译吞吐回退。

缓存 patch 的新一轮测量将主基准指令数平均改善 1.5%,区间 0.2%–2.6%,覆盖 28 个主样本;次基准平均改善 1.6%,区间 0.1%–5.2%,覆盖 37 个样本,只剩两个次要样本回退 0.1%–0.2%。主样本 Max RSS 另有一个 2.5% 改善,但次要样本仍出现 2.1%–6.5% 回退;bootstrap 基本持平,478.023 秒变为 478.147 秒(+0.03%),产物从 404.16 MiB 降到 403.53 MiB(-0.15%)。这些数据说明修复主要消除了运行指令开销,而不是靠缩短 bootstrap 或大幅减少产物体积制造假象。

适合的工程师背景: 维护编译器、JIT、运行时配置对象,或正在排查“单次计算很便宜、全局性能却明显下降”的热路径回归工程师。

预计阅读收益: 约 30–40 分钟;可以迁移一套实用判断:先确认值在会话期是否不变,再用调用频率而不是函数体大小判断是否缓存,并同时保留指令数、RSS、bootstrap 与产物体积的正负指标。

02 · rustc:用两组消融实验拆开闭包安全语义与 LLVM 优化收益

原文与日期: Ralf Jung,2026-09-06 16:06(中原标准时间);PR #162357 与 16:58 发布的 PR #162361。原始语义修改来自 PR #160745,三者将语言/内存模型动机、codegen patch、Miri 测试和 rustc-perf 串成完整证据链。

为什么值得读: #160745 让闭包、协程和协程闭包像 MaybeDangling 一样处理捕获字段:移动这些匿名类型时,不再因隐式 retag 要求其内部引用继续可解引用。它修复了线程 spawn 与可移动 generator 已知的细微 soundness 问题,但也会让 LLVM 端的指针失去 noaliasreadonly 与 dereferenceable 等优化信息。两份新 PR 没有直接猜测回归来源,而是分别撤掉整个 codegen 修补、仅对闭包恢复 noalias,形成可解释的消融实验。

核心技术结论: 第一组实验移除 ty_and_layout_pointee_info_at 中对 is_like_maybe_dangling() 的修补,使指针再次携带安全性和可解引用大小信息;第二组只把闭包、协程从 is_like_maybe_dangling 的 codegen 判定中排除,恢复引用捕获的 LLVM alias 属性,同时保留其余语义与 Miri 方向。两组测量都得到约 0.3% 的主基准指令改善,说明回归主要来自放弃别名/解引用属性,而不是新增类型判定本身。

第一组消融删掉的核心逻辑是:

Rust
if this.ty.is_like_maybe_dangling() {
    result = Some(PointeeInfo {
        safe: None,
        size: Size::ZERO,
        align: info.align,
    });
}

第二组则只移除:

Rust
ty::Closure(..) | ty::Coroutine(..)
    | ty::CoroutineClosure(..) => true,

最有价值的实验、源码与 benchmark 细节: 完整撤掉 codegen 修补的 #162357 在 75 个主样本上得到平均 -0.3% 指令数,区间 -0.7% 至 -0.2%;20 个次样本同为平均 -0.3%,只有 3 个次样本回退 0.3%。cycles 的单个主样本改善 2.7%,单个次样本改善 3.6%;bootstrap 从 478.423 秒降至 476.031 秒(-0.50%),产物仅缩小 0.01%。

只给闭包引用恢复别名属性的 #162361 得到几乎同样的信号:67 个主样本指令平均 -0.3%,区间 -0.7% 至 -0.2%;19 个次样本平均 -0.3%,但仍有 4 个次样本回退 0.3%–0.4%。Max RSS 一边出现主样本 -4.5%,另一边两个次样本回退 2.5%–4.5%;cycles 也同时出现 -2.4% 与 +3.2%。bootstrap 从 478.283 秒降至 476.002 秒(-0.48%),产物从 403.38 MiB 降到 403.31 MiB。

最重要的不是 0.3% 本身,而是工程决策仍未结束:直接恢复属性可能重新引入 #160745 要消除的别名模型陷阱。#162361 的 CI 还暴露了 Miri 用例失败,涉及 movable generator、MaybeDangling 与 scoped thread 等路径;因此该 PR 保持 Draft,数据只用于定位成本,不能被当作可直接合入的性能修复。

适合的工程师背景: 熟悉 Rust unsafe/别名模型、Miri、LLVM IR 属性,或需要在内存安全语义与后端优化之间做定量权衡的编译器工程师。

预计阅读收益: 约 50–70 分钟;最大的收获是消融实验设计:把“类型分类成本”和“丢失后端语义信息的成本”分开测,再用 Miri 失败阻止性能数字越过 soundness 红线。

中国大陆 ToC 硬件价格观察

数据口径

窗口为 2026-08-09 至 2026-09-07,单位人民币。本期重新打开六个固定 SKU 页面,CPU、GPU、主板、HDD、SSD 均取得可复核当前报价,因此即使价格未变也写入 9 月 7 日采集点;DRAM 页面本次返回错误,只保留 9 月 6 日最近真实点。折线只连接真实观测,不插值,也不把采集时间写成商家实际调价时间。

中国大陆六类 PC 硬件公开价格事件

类别 固定样本与最新可复核价 30 日窗口内真实走势 建议
CPU Ryzen 7 9800X3D,9/7 ¥2,639 9/4 ¥2,597.15 → 9/5 ¥2,599 → 9/6、9/7 ¥2,639 观望;从近期低点反弹 1.61% 后横盘,非刚需可等 ¥2,600 附近
GPU MSI RTX 5070 VENTUS 3X 12G,9/7 ¥4,464.34 8/29 与 9/7 均 ¥4,464.34;京东同时为 ¥7,299 谨慎观望;新增点确认聚合低价未变,但渠道差异过大,不能代表主流自营成交价
主板 ASUS TUF B850M-PLUS WIFI7,9/7 ¥1,299 8/31 ¥1,449 → 9/2 至 9/7 多次复核均 ¥1,299 可入手;降价 10.35% 后连续横盘,短期继续下探证据不足
DRAM Kingston FURY Beast DDR5-6000 32GB,最近点 9/6 ¥3,900 9/5 ¥3,860 → 9/6 ¥3,900;9/7 页面不可用 刚需小量买;高位窄幅震荡,今天没有新报价支持趋势变化
HDD IronWolf Pro 8TB ST8000NE001,9/7 ¥1,849 9/1、9/6、9/7 均 ¥1,849 可按容量需求购买;三次真实采样确认横盘,留意最低价渠道与保修
SSD ZHITAI Ti600 2TB,9/7 页面最低 ¥749 9/5、9/6、9/7 均 ¥749;京东同时为 ¥1,889 谨慎核对后入手;连续三日可见,但必须确认容量选择、店铺和保修

价格来源: 9800X3DMSI RTX 5070 VENTUS 3XASUS TUF B850M-PLUS WIFI7Kingston FURY DDR5-6000 32GBIronWolf Pro 8TBZHITAI Ti600 2TB

判断依据

9 月 7 日公开页面显示:9800X3D 京东最低 ¥2,639;RTX 5070 聚合最低 ¥4,464.34、京东 ¥7,299;B850M-PLUS WIFI7 天猫最低 ¥1,299;IronWolf Pro 8TB 最低 ¥1,849;Ti600 页面最低 ¥749、京东 ¥1,889。五类新增采样均未发生日变价,说明当前信号是横盘,而非缺少采集。

GPU 与 SSD 都存在很大的渠道价差,故只记录页面事件,不把最低价外推成全市场成交价。DRAM 页面在本次采集返回错误,按“缺数据不补点”的规则保留 9 月 6 日价格。购买建议只基于固定 SKU 的真实价格序列与渠道差异,没有加入无法核验的产能传闻。

本期结论

两篇材料共同展示了编译器性能工程的证据边界:一个只在初始化时变化的 sanitizer 集合被放进高频 codegen 查询后,足以造成平均 1.3% 指令回归,而一次会话级缓存可取得约 1.5% 的反向改善;闭包 MaybeDangling 语义则以约 0.3% 指令成本换取更稳健的别名模型,消融实验能定位代价,却不能绕开 soundness。硬件部分新增五类 9 月 7 日真实横盘点,DRAM 因来源故障明确留空。