本期检索说明
先读取 content/collections/deep-radar 截至 2026-09-27 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时只有两项同时给出实测数据、源码级差异、原理解释与可迁移工程结论:rustc bootstrap 把动态库 LTO 配置扩展到 Cranelift/GCC codegen backend,以及浮点解析测试按目标浮点类型裁剪大整数幂缓存。两项均为开放 PR、尚未合入主线;本文只评价公开 patch、CI 与作者给出的实验,不把它们写成已发布能力。Java/JVM、Kotlin、Zig 与 Linux 的新候选缺少公开 benchmark 或完整机制证据,因此不为数量凑数。
| 主题 | 原始发布日期 | 一手来源与交叉验证 | 截稿状态 | 推荐强度 |
|---|---|---|---|---|
| LTO 覆盖 Cranelift/GCC codegen backend | 2026-09-28 02:20(中原标准时间) | Rust PR #163412 / 完整 bootstrap patch / rustc-perf 全量比较 / try CI | 开放评审,尚未合入 | 强烈推荐,重点看吞吐、RSS 与 bootstrap 的取舍 |
| 浮点解析测试按类型裁剪幂缓存 | 2026-09-27 20:27(中原标准时间) | Rust PR #163402 / 完整 patch / armhf QEMU OOM / 峰值内存复测 | 开放评审,尚未合入 | 强烈推荐,重点看缓存键域与大数对象成本 |
01 · Rust:让 Cranelift 与 GCC codegen backend 也吃到动态库 LTO
原文与日期: Rust compiler 团队,2026-09-28 02:20(中原标准时间);Rust PR #163412、完整源码 patch 与 rustc-perf 对比。
为什么值得读: 这不是“打开一个编译参数”那么简单,而是一例典型的构建图配置遗漏:bootstrap 原先只给主 rustc Cargo build 应用动态库 LTO,Cranelift 与 GCC backend 却由独立 build step 编译,因而绕过同一套 -Zdylib-lto、-Clto 与 bitcode 配置。补丁把已有逻辑抽成共享 helper,再从三个构建入口调用,展示了如何让优化策略沿构建图传播,而不是在每个 backend 里复制条件分支。
核心技术结论: apply_dylib_lto 以 build compiler、stage 和配置决定是否启用 LTO。Thin/Fat 模式分别传入 -Clto=thin/fat,并同时启用 -Zdylib-lto 与 -Cembed-bitcode=yes;关闭时明确传 -Clto=off。Cranelift/GCC backend 的 Cargo invocation 在设置 target 与 rustflags 后复用同一 helper,避免主编译器与外置 backend 的策略漂移。
fn apply_dylib_lto(builder: &Builder<'_>, build_compiler: Compiler, cargo: &mut Cargo) {
// 根据 stage 与配置追加 -Zdylib-lto、-Clto={thin,fat}
// 以及 -Cembed-bitcode=yes;关闭时追加 -Clto=off。
}
apply_dylib_lto(builder, build_compiler, &mut cargo);最有价值的实验、源码与 benchmark 细节: 完整 rustc-perf 中,56 个 primary 指令数改善样本平均下降 0.6%,范围为 -1.4% 到 -0.3%,没有 primary 指令数回退;99 个 secondary 改善样本同样平均 -0.6%,但保留了 1 个 +0.5% 的 secondary 回退。cycles 的 primary 全体平均下降 0.7%:150 个改善样本平均 -0.9%,26 个回退样本平均 +0.7%。
代价不能省略。primary 最大 RSS 全体平均增加 0.5%:75 个回退样本平均 +0.9%、最高 +2.1%,同时有 21 个改善样本;bootstrap 时间从 488.457 s 增到 494.139 s,慢 1.16%。最终 artifact 仅从 406.36 MiB 降到 406.31 MiB,约 -0.01%。因此这是一项小幅、广覆盖的编译吞吐优化,而不是无代价的普遍提速;它改善的是带这些 backend 的编译器自身,不代表 Cranelift/GCC 为用户程序生成的代码自动变快。
适合的工程师背景: 维护 rustc bootstrap、rustc_codegen_cranelift、rustc_codegen_gcc,或需要在多阶段、多后端构建系统里统一 LTO/PGO 配置的编译器基础设施工程师。
预计阅读收益: 约 30–45 分钟;能学到如何定位构建图中未继承优化配置的边缘节点,并用 instructions、cycles、RSS、bootstrap 时间与产物体积共同评价 LTO,而不是只挑一项正向指标。
02 · Rust:把 2.1 GiB 浮点测试幂表压到 16 MiB
原文与日期: Rust compiler 团队,2026-09-27 20:27(中原标准时间);Rust PR #163402、完整源码 patch 与触发调查的 Rust PR #162934。
为什么值得读: 这是“预计算缓存为什么会反噬测试基础设施”的极端样本。旧代码为每种浮点类型缓存 -(2 << 15)..=(2 << 15) 的所有 2^n,还为 half ULP 维护第二份 2^(n-1) 表。BigRational 的分子或分母会随 |n| 增长,因而单表约占 512 MiB;f32 与 f64 测试一起运行时,峰值达到 2.1 GiB,并在只有 1 GiB 内存的 armhf QEMU CI 上 OOM。
核心技术结论: 缓存键域应由消费者的可达状态决定。补丁分别根据 EXP_BIAS 与 MAN_BITS 计算该浮点类型真正需要的指数范围,只缓存 exp_min..=exp_max;half ULP 直接索引相邻的 exp - 1 项,不再保存第二份大对象表。核心变化只有 10 行新增、33 行删除,却同时消除了过宽域和重复派生数据。
let exp_min = -(F::EXP_BIAS + F::MAN_BITS).to_signed();
let exp_max = (F::EXP_BIAS - F::MAN_BITS).to_signed();
let powers_of_two = (exp_min..=exp_max)
.map(|n| (n, two.pow(n)))
.collect();
let half_ulp = &consts.powers_of_two[&(exp - 1)];最有价值的实验、源码与 benchmark 细节: 作者定位到 test-float-parse/src/validate.rs 中两份巨大 HashMap<i32, BigRational>:每种浮点类型两张表各约 512 MiB,导致 f32/f64 unit tests 峰值为 2.1 GiB。按类型裁剪指数区间并复用相邻项后,峰值降为 16 MiB,约下降 99.3%,量级上约缩小 134 倍。直接触发点是 PR #162934 在 test-armhf-gnu 的 1 GiB QEMU 环境里失败,这让优化目标不是抽象的“少分配”,而是恢复低内存架构 CI 的可运行性。
边界也很清楚:这是标准库浮点解析验证工具的内存优化,不改变 str::parse::<f32/f64>() 的运行时速度,也没有给出 wall-clock 提升。其可迁移价值在于大整数、大有理数与高精度数值代码:缓存项成本会随键值增长时,“条目数看起来不多”并不等于空间线性且可控;相邻可推导值也不应重复物化。
适合的工程师背景: 维护 Rust 标准库数值测试、任意精度算术、编译器 CI,或正在排查预计算表和 memoization 导致内存峰值的工程师。
预计阅读收益: 约 20–35 分钟;能学到如何从 OOM 反推缓存的真实对象成本、用类型参数收紧键域,并区分测试基础设施收益与生产运行时收益。
中国大陆 ToC 硬件价格观察
数据口径
窗口为 2026-08-30 至 2026-09-28,单位人民币,六类硬件固定同一 SKU。今天通过公开比价页的实时渲染结果复核到 CPU、GPU、主板、HDD、SSD 五类报价;DRAM 页面仍明确显示“暂无报价”,因此不新增点。重复价格作为真实采样保留,用来区分“已复核横盘”和“未取得数据”。SSD 只采用当前 2TB 规格的全网比价栏,不采用跨容量聚合的“¥819 起”。
| 类别 | 9 月 28 日可复核价 | 30 日窗口内真实走势 | 建议 |
|---|---|---|---|
| CPU | Ryzen 7 9800X3D,京东 ¥2,619 | 9/3 ¥2,599 → 9/9 ¥2,449 → 9/23–24 ¥2,579 → 9/25–28 ¥2,619 | 观望或接近前低时入手;比窗口低点高 6.94%,连续四日横盘 |
| GPU | MSI RTX 5070 VENTUS 3X 12G,亚马逊中国 ¥4,464.34 | 9/7–9/28 十三个真实点均为 ¥4,464.34 | 刚需可比价后入手;该渠道横盘,但与国内自营售后口径不可等同 |
| 主板 | ASUS TUF B850M-PLUS WIFI7,天猫 ¥1,299 | 8/31 ¥1,449 → 9/2–9/28 ¥1,299 | 刚需可入;较窗口首点低 10.35%,多次复核横盘 |
| DRAM | 暂无报价;最后可复核 9/9 ¥3,900 | 9/2 ¥3,900 → 9/5 ¥3,860 → 9/6–9/9 ¥3,900 | 观望;固定 SKU 缺价,不用其他容量、颗粒或时序替代 |
| HDD | IronWolf Pro 8TB ST8000NE001,i百联 ¥1,849 | 9/1–9/28 十三个真实点均为 ¥1,849 | 容量刚需可买;先核对型号、五年保修与数据恢复服务 |
| SSD | ZHITAI Ti600 2TB,京东 ¥1,799 | 9/2 ¥1,919 → 9/23–28 ¥1,799 | 观望;可比价下降 6.25%,但 9/26 公开爆料为 ¥1,889,需核对实际可下单价 |
价格来源: 9800X3D、MSI RTX 5070 VENTUS 3X、ASUS TUF B850M-PLUS WIFI7、Kingston FURY DDR5-6000 32GB、IronWolf Pro 8TB、ZHITAI Ti600 2TB。
判断依据
五个可报价 SKU 今天均与昨日持平,没有新的连续下跌信号。CPU 仍高于 9 月 9 日低点;GPU 是亚马逊中国渠道价,主板与 HDD 长时间横盘;SSD 的 2TB 比价栏为 ¥1,799,但同页 9 月 26 日京东爆料为 ¥1,889,说明聚合栏与实际活动价可能存在时差。DRAM 固定 SKU 继续缺价。基于这些证据,本期不把横盘解释成全市场稳定,也不预测继续下跌。
其它你可能关心的
- OpenJDK:修复 ReservedStackAccess 后保护区未重新设为 guard
- Rust Polonius:把 type test 约束纳入 loan liveness
- Tokio:修复
join!/try_join!与Infallible的 unreachable_code
本期结论
两项改动都在修正“主路径之外的隐性成本”。LTO 补丁让独立 codegen backend 不再漏掉主 rustc 已有的优化配置,以平均 0.6% 的指令数改善换来约 0.5% 的 RSS 增长和 1.16% 的 bootstrap 变慢;浮点测试补丁则用真实可达指数域替代过宽常量范围,并删掉可由相邻项推导的第二张表,把峰值从 2.1 GiB 降到 16 MiB。共同的工程原则是:配置和缓存都必须沿真实依赖图建模,不能假设旁路构建或“保险式预计算”没有成本。