本期检索说明
先读取 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,而正确性依赖于节点数组在索引生命周期内不可变。
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(),保持诊断与非平凡推理语义。
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 元起。
| 类别 | 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 验证,不能用“理论上少做工作”代替测量。