本期检索说明

先读取 content/collections/deep-radar 截至 2026-10-15 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时内,Rust 编译器出现两项同时具备源码 diff、rustc-perf 实测与原理证据的新工作:一项压缩增量依赖图反向索引,另一项减少新 trait solver 的无效深度求解。两者均未在既往报告出现。

Java/JVM 当天新候选以正确性修复与清理为主,缺少可复核的性能数据;Kotlin 新候选没有同时给出定量 benchmark 与源码级根因;Zig 与 Linux 也没有满足“实测 + 源码 + 原理”三项标准的新材料。因此本期仅收录 2 篇 Rust,一并保留负向指标,不把局部样本改善写成全局编译加速。两项 PR 截稿时都仍在开放评审,其中 Sized 快路径已被标记 perf-regression,结论尚未收敛。

主题 原始发布日期 一手来源与交叉验证 截稿状态 推荐强度
增量依赖图反向索引只保存节点编号 2026-10-15 23:52(中原标准时间) rust-lang/rust PR #164370 / 完整 diff / rustc-perf 开放评审、perf-regression 强烈推荐,重点看“省 key”怎样影响 RSS、hash lookup 与碰撞语义
Sized/MetaSized 显然成立时跳过深度求解 2026-10-15 17:27(中原标准时间) rust-lang/rust PR #164349 / 完整 diff / 两轮 rustc-perf 开放评审、perf-regression 推荐作为性能实验案例,重点看混合结果与回退边界

01 · rustc:反向索引不再复制每个依赖节点的 fingerprint

原文与日期: Charlie Marsh,2026-10-15 23:52(中原标准时间);rust-lang/rust PR #164370、完整源码 diff 与 rustc-perf 对比。

为什么值得读: 增量编译加载旧依赖图时,DepNode 数组已经保存 PackedFingerprint,旧反向索引却再把同一个 fingerprint 复制进 UnhashMap<PackedFingerprint, SerializedDepNodeIndex>。节点越多,这份重复 key 越接近纯内存税。补丁的工程价值不在“换一种 HashMap”,而在把稳定数据留在唯一所有者中,让索引只保存紧凑编号;这是编译器 query cache、符号表和运行时 side table 都能迁移的布局优化。

核心技术结论: LazyKindIndex.map 改为 HashTable<SerializedDepNodeIndex>。建表时仍以 PackedFingerprint 的 Unhasher 结果定位 bucket,但 entry 只写入节点编号;比较与 rehash closure 再通过 nodes[index].key_fingerprint 读取唯一 fingerprint。查询同样先计算目标 hash,再用节点数组中的 fingerprint 判等。内存收益来自删掉每个 entry 的重复 key,而正确性依赖于节点数组在索引生命周期内不可变。

Rust
map.entry(
    fingerprint_hash(node.key_fingerprint),
    |&index| nodes[index].key_fingerprint == node.key_fingerprint,
    |&index| fingerprint_hash(nodes[index].key_fingerprint),
).insert(idx);

最有价值的实验、源码与 benchmark 细节: 作者先在 uv 与 Ruff 的 warm cargo check 上测到峰值 RSS 下降 2.46%–3.94%,同时指令数约增加 0.50%。随后官方 rustc-perf 给出更完整的截面:

指标 primary 结果 负向/边界
instructions 2 个改善样本平均 -0.5%,范围 -0.8%~-0.3% 无 primary 回退;1 个 secondary 回退 +0.3%
max RSS 103 个改善样本平均 -3.9%,范围 -7.3%~-1.9% 3 个 secondary 回退平均 +4.0%
cycles 32 个改善样本平均 -3.0%,范围 -5.5%~-1.4% 3 个 secondary 回退平均 +7.9%
bootstrap / artifact 492.307 → 489.186 秒,-0.63% 工具链产物 407.14 → 409.25 MiB,+0.52%

源码还专门构造 (1, 2) 与 (2, 1) 两个 fingerprint,使其得到相同 hash,验证表仍以完整 fingerprint 区分碰撞;SideEffect 重复节点继续采用最后一个 index,其他 kind 的重复 fingerprint 仍触发 panic。这个测试比单看 RSS 更有迁移价值:把 key 移出 hash entry 后,必须显式证明碰撞、重复 key 和对象生命周期语义没有被布局优化破坏。

适合的工程师背景: 熟悉 rustc 增量编译、依赖图、hash table 内存布局,或正在压缩大型编译器/运行时索引的工程师。

预计阅读收益: 约 35–50 分钟;能掌握如何把重复 key 改为间接索引、怎样用 rustc-perf 同时核对 RSS 与 CPU 代价,以及应为碰撞和重复项补哪些回归测试。

02 · rustc 新 trait solver:显然 Sized 时不再深度解析整个目标

原文与日期: Amir Hossein,2026-10-15 17:27(中原标准时间);rust-lang/rust PR #164349、完整源码 diff、trait-system-refactor #291 与 第二轮 rustc-perf。

为什么值得读: 新 trait solver 的 Sized/MetaSized fast path 原本先对整个 goal predicate 执行 deeply_resolve_ignoring_regions(),再判断 self type 是否显然有固定大小。数组、元组等类型即使仅看外层结构就能得出结论,仍反复递归解析内部 inference variables。补丁把便宜的结构性判定放到深度求解之前,是典型的“用充分条件保护昂贵通用路径”;但实测同时出现改善与回退,恰好展示编译器 fast path 不能只凭直觉验收。

核心技术结论: 对正向 Sized/MetaSized goal,代码先映射到 SizedTraitKind;若 predicate 含非 region inference variable、没有 error,且 self_ty.has_trivial_sizedness() 已能证明成立,就直接返回 Outcome::TriviallyHolds。error taint、非显然 Sized 或其他复杂 goal 仍走旧的深度解析和 sizedness_fast_path(),保持诊断与非平凡推理语义。

Rust
if goal.predicate.has_non_region_infer()
    && !goal.predicate.references_error()
    && self_ty.has_trivial_sizedness(self.tcx, sizedness)
{
    Outcome::TriviallyHolds
} else {
    // 保留 deeply_resolve_ignoring_regions + 通用 fast path
}

最有价值的实验、源码与 benchmark 细节: 作者做了两轮 perf;后续改动没有改善结果,已回退到较小补丁。第二轮数据显示:

指标 改善 回退/限制
instructions 1 个 primary 样本 -0.7%;7 个 secondary 平均 -0.8% 3 个 secondary 平均 +0.2%;没有广泛 primary 信号
max RSS 2 个 primary 平均 -2.4%,范围 -3.7%~-1.1% 2 个 secondary 平均 +3.7%,范围 +3.2%~+4.3%
cycles 1 个 secondary -11.7% 2 个 secondary 平均 +4.5%;无 primary 有效结果
bootstrap / artifact 工具链产物只增加 0.01% bootstrap 490.736 → 496.921 秒,回退 1.26%

第一轮也只出现 1 个 primary instruction 改善样本(-0.7%),说明方向虽合理,收益集中在触发该 goal 形态的工程;PR 因此仍带 perf-regression,不应概括成 rustc 全局提速。最可迁移的不是 0.7% 本身,而是实验纪律:保留通用 fallback、做第二轮消融、撤销没有改善结果的 follow-up,并把 bootstrap、RSS 与 cycles 的反向变化一并呈现。

适合的工程师背景: 熟悉 rustc 新 trait solver、canonicalization/inference variable,或在编译器中设计 fast path 与消融实验的工程师。

预计阅读收益: 约 30–45 分钟;能理解 Sized 结构性判定为何可早于深度解析,并学会怎样判断“局部路径少做工作”是否真的转化成稳定的全局收益。

中国大陆 ToC 硬件价格观察

数据口径

窗口为 2026-09-17 至 2026-10-16,单位人民币,六类硬件固定同一 SKU。今天通过公开比价页实时渲染结果复核 CPU、GPU、主板、HDD、SSD 五类报价;DRAM 页面仍显示“暂无报价”,因此不新增点。重复价格作为真实采样保留,用来区分“已复核横盘”和“未取得数据”。SSD 只记录固定 2TB 规格全网比价,不采用跨容量 819 元起;主板继续采用当前规格 ¥1,298,不采用系列 1,169 元起。

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

类别 10 月 16 日可复核价 30 日窗口内真实走势 建议
CPU Ryzen 7 9800X3D,京东 ¥2,609 9/17 ¥2,619 → 9/23 ¥2,579 → 10/1–8 ¥2,694–2,699 → 10/9–16 ¥2,609 可关注但不追价;连续八日横盘,仍比窗口低点高 ¥30
GPU MSI RTX 5070 VENTUS 3X 12G,亚马逊中国 ¥4,464.34 9/17–10/16 多次实时复核均为 ¥4,464.34 刚需可比价后入手;单渠道横盘不足以代表整个零售市场
主板 ASUS TUF B850M-PLUS WIFI7,当前规格 ¥1,298 10/12–14 的 ¥1,169 为系列起价;10/15–16 当前规格均为 ¥1,298 观望并核对完整型号;当前规格已连续两日一致
DRAM 暂无报价;最后可复核 9/9 ¥3,900 本窗口没有可比报价 观望;不以其他容量、颗粒或时序替代固定 SKU
HDD IronWolf Pro 8TB ST8000NE001,京东 ¥3,550 9/17–10/15 ¥1,849 → 10/16 ¥3,550,单日 +92.0% 明确观望;旧最低渠道退出后只剩高价样本,不能把它解释为机械盘行业普涨
SSD ZHITAI Ti600 2TB,京东 ¥1,699 9/23–10/11 ¥1,799 → 10/12–13 ¥1,739 → 10/14 ¥1,799 → 10/15–16 ¥1,699 可入手或继续比价;连续两日维持窗口低点

价格来源: 9800X3D、MSI RTX 5070 VENTUS 3X、ASUS TUF B850M-PLUS WIFI7、Kingston FURY DDR5-6000 32GB、IronWolf Pro 8TB、ZHITAI Ti600 2TB。

判断依据

CPU、GPU、主板与 SSD 今日都与昨日同口径报价一致。Ti600 2TB 连续两日 ¥1,699,仍是窗口低点;若容量与保修符合需求,可把它作为当前比价锚点,但两天的单渠道价格仍不足以推断 NAND 原厂趋势。HDD 的固定 8TB SKU 从 i百联 ¥1,849 变为京东 ¥3,550,涨幅 92.0%;页面型号、容量与 CMR 规格没有变化,主要信号是低价渠道消失而非行业成本一天翻倍,因此建议观望并寻找同型号其他授权渠道。DRAM 固定 SKU 继续缺价,走势图保留真实空白尾段。本期没有加入未经核实的新品或产能消息。

本期结论

两项工作都在减少“为了快速查询而复制或解析的信息”:依赖图用节点编号间接读取唯一 fingerprint,trait solver 用外层类型结构跳过不必要的递归求解。前者换来稳定、广泛的 RSS 降幅,但要承担间接访存与少量 secondary 回退;后者只在少数目标上看到改善,bootstrap 反而回退 1.26%。这正是本期最有价值的工程结论:fast path 或紧凑布局必须同时用源码不变量、定向样本和全局 benchmark 验证,不能用“理论上少做工作”代替测量。