本期检索说明
先读取 content/collections/deep-radar 截至 2026-09-29 的全部原文链接,并按 URL、标题与实现机制去重。最近 24 小时找到两项同时给出实测数据、完整源码差异与可迁移机制:Java CLDR 时区名称格式化为不存在的 dstOffset 建立负缓存,以及 rustc builtin macro 的路径构造 API 消除临时 Vec。Kotlin/Native 的 Float.ulp / Double.ulp 补丁虽在最近 7 天补充了跨三平台 benchmark,但相同原文 URL 已进入 9 月 24 日去重清单,因此不重复收录;Zig 与 Linux 没有新的候选同时满足三条红线。
两项 PR 截稿时都仍在开放评审。本文只评价公开 patch 与作者/官方性能系统给出的实验,不把它们写成已发布能力。rustc 项目的可靠主指标没有显著 primary 样本,只有 7 个 secondary 样本平均改善 0.2%,并伴随 RSS 回退;它入选的重点是“让 API 形状阻止临时分配”的工程方法,而不是把微小数字包装成普遍加速。
| 主题 | 原始发布日期 | 一手来源与交叉验证 | 截稿状态 | 推荐强度 |
|---|---|---|---|---|
CLDR dstOffset 缺失项负缓存 |
2026-09-30 06:50(中原标准时间) | OpenJDK PR #33133 / 完整 core-libs patch / JBS / JMH 风格分配与延迟结果 | Draft,尚未完成评审 | 强烈推荐,重点看 negative caching 与哨兵值 |
rustc builtin macro 路径构造去临时 Vec |
2026-09-29 20:47(中原标准时间) | Rust PR #163485 / 27 文件完整 patch / rustc-perf / try CI | 开放评审,尚未合入 | 推荐,重点看 API 约束与多指标边界 |
01 · JVM:给“不存在的 CLDR 数据”也建立缓存
原文与日期: Naoto Sato,2026-09-30 06:50(中原标准时间);OpenJDK PR #33133、完整源码 patch 与 JDK-8392996。
为什么值得读: 这是 negative caching 的一个极小但完整的生产案例。时区名称格式化会查询 metazone.dstoffset.<TZID>;大多数时区没有显式 DST offset,旧路径每次都重新选择 CLDR provider、规范化时区 ID、构造资源 key,再做一次注定返回 null 的查找。普通缓存若只能保存非空结果,对最常见的“缺失”状态反而完全无效。
核心技术结论: 补丁在 TimeZoneNameUtility 增加 ConcurrentHashMap<String, String>,以原始 TZID 为键。computeIfAbsent 只在首次查询时访问 LocaleResources;真实值原样保存,不存在则保存空字符串哨兵。对调用者返回时再把空串翻译回 null,因此外部语义不变,但“没有数据”从重复 I/O/资源树遍历变成一次计算后的稳定状态。
private static final Map<String, String> cachedExplicitDstOffsets =
new ConcurrentHashMap<>();
var dstOffset = cachedExplicitDstOffsets.computeIfAbsent(tzid, key -> {
var value = localeResources.getTimeZoneNames(
"metazone.dstoffset." + canonicalTZID(key).orElse(key));
return value == null ? "" : value;
});
return dstOffset.isEmpty() ? null : dstOffset;最有价值的实验、源码与 benchmark 细节: 作者在 macOS 上复测 JBS 中的格式化用例。New York 从 303.9 B/op, 191.7 ns/op 降到 32.0 B/op, 90.6 ns/op:分配下降 89.47%,耗时下降 52.74%,约 2.12×。Vancouver 从 240.0 B/op, 216.8 ns/op 降到 88.0 B/op, 118.4 ns/op:分配下降 63.33%,耗时下降 45.39%,约 1.83×。
源码证据只有 15 行新增、5 行删除,关键不在容器本身,而在空值表示:ConcurrentHashMap 不能保存 null,若直接返回 null,computeIfAbsent 下一次仍会重新计算;空字符串哨兵才让缺失结果真正进入缓存。边界同样要保留:公开结果只有一台 Mac、两个时区和单组数据,没有置信区间、冷启动成本或缓存增长压力;PR 仍是 draft。
适合的工程师背景: 维护 JDK locale/time-zone、资源包缓存,或正在排查“查不到却反复查”的配置、DNS、schema 与 metadata 热路径的 Java/JVM 工程师。
预计阅读收益: 约 20–30 分钟;能学到如何在不改变 null API 契约的前提下缓存缺失状态,并用 B/op 与 ns/op 同时验证查找链和分配链是否真正被截断。
02 · Rust:让路径构造 API 从类型上拒绝临时 Vec
原文与日期: Rust compiler 团队,2026-09-29 20:47(中原标准时间);Rust PR #163485、完整源码 patch 与 rustc-perf 对比。
为什么值得读: builtin macro 扩展器大量构造短路径,例如 $crate::option::Option::Some。旧 API 的 std_path(&[Symbol]) -> Vec<Ident> 与 path(..., Vec<Ident>) 迫使每次调用先创建堆 Vec,随后又把元素搬到 AST 的 ThinVec<PathSegment>。补丁不靠调用者自律,而是重塑 API:数组、切片和标准库符号数组直接实现 ToPath,把“临时收集再转换”从合法的默认写法中移除。
核心技术结论: 新的 StdPath<const N: usize>([Symbol; N]) 保留编译期长度,ToPath 分别为 StdPath<N>、[Ident; N] 与 &[Ident] 生成最终 Path。调用点从 vec![...] 或 &[...] -> Vec 改成固定数组;标准库路径直接预留 N + 1 个 PathSegment,一次填入 $crate 与其余段。补丁同时抽出 expr_call_intrinsic、item_fn、pat_ident_sym 等 helper,减少重复 AST 样板。
pub struct StdPath<const N: usize>(pub [Symbol; N]);
pub fn std_path<const N: usize>(&self, components: [Symbol; N]) -> StdPath<N> {
StdPath(components)
}
pub fn path(&self, span: Span, components: impl ToPath) -> Path {
self.path_all(span, components, vec![])
}
let some = cx.std_path([sym::option, sym::Option, sym::Some]);最有价值的实验、源码与 benchmark 细节: 完整改动覆盖 27 个文件,新增 260 行、删除 291 行。rustc-perf 的可靠指标 instructions:u 没有显著 primary 变化;7 个 secondary 改善样本平均 -0.2%,范围 -0.3%..-0.2%,没有显著指令数回退。bootstrap 从 491.711 s 到 491.207 s,下降 0.10%;artifact 体积基本不变。
负向数据更值得看:最大 RSS 有 1 个 primary 样本回退 +2.2%,3 个 secondary 回退平均 +3.6%(+3.4%..+3.8%);也有 primary -0.9% 和 secondary -2.3% 的改善样本。cycles 没有相关结果。因此最稳妥的结论只是“短路径构造的 API 与分配模型更直接,并在少量次级样本中减少指令”,不能外推为 rustc 全局 wall-clock 或内存改善。
适合的工程师背景: 熟悉 rustc AST expansion、derive/builtin macro,或正在设计高频 builder API、希望用 const generics 与 trait 把临时分配从接口层消掉的编译器/基础库工程师。
预计阅读收益: 约 30–45 分钟;能学到如何把性能约束编码进 API 类型,而不是靠 code review 逐个发现 vec![],以及如何在微小正向指标旁保留 RSS 回退和统计显著性边界。
中国大陆 ToC 硬件价格观察
数据口径
窗口为 2026-09-01 至 2026-09-30,单位人民币,六类硬件固定同一 SKU。今天通过公开比价页的实时渲染结果复核到 CPU、GPU、主板、HDD、SSD 五类报价;DRAM 页面仍明确显示“暂无报价”,因此不新增点。重复价格作为真实采样保留,用来区分“已复核横盘”和“未取得数据”。SSD 只采用当前 2TB 规格的全网比价栏,不采用跨容量聚合的“¥819 起”。
| 类别 | 9 月 30 日可复核价 | 30 日窗口内真实走势 | 建议 |
|---|---|---|---|
| CPU | Ryzen 7 9800X3D,京东 ¥2,679 | 9/3 ¥2,599 → 9/9 ¥2,449 → 9/23–24 ¥2,579 → 9/29 ¥2,619 → 9/30 ¥2,679 | 观望;单日上涨 2.29%,比窗口低点高 9.39% |
| GPU | MSI RTX 5070 VENTUS 3X 12G,亚马逊中国 ¥4,464.34 | 9/7–9/30 多次实时复核均为 ¥4,464.34 | 刚需可比价后入手;单一渠道横盘不等于全市场没有促销 |
| 主板 | ASUS TUF B850M-PLUS WIFI7,天猫 ¥1,299 | 9/2–9/30 多次复核均为 ¥1,299 | 刚需可入;公开最低价稳定,但下单前核对店铺与售后 |
| 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/30 多次复核均为 ¥1,849 | 容量刚需可买;先核对型号、五年保修与数据恢复服务 |
| SSD | ZHITAI Ti600 2TB,京东 ¥1,799 | 9/2 ¥1,919 → 9/23–9/30 ¥1,799 | 观望或确认结算价后入手;可比价下降 6.25%,但聚合栏可能滞后 |
价格来源: 9800X3D、MSI RTX 5070 VENTUS 3X、ASUS TUF B850M-PLUS WIFI7、Kingston FURY DDR5-6000 32GB、IronWolf Pro 8TB、ZHITAI Ti600 2TB。
判断依据
CPU 是今天唯一变价 SKU,公开最低报价从 ¥2,619 上升到 ¥2,679;没有新数据支持“继续下跌”。GPU、主板、HDD 与 SSD 只是同一公开渠道再次横盘,不能外推为整个中国零售市场稳定。SSD 页面头部仍显示跨容量聚合的“¥819 起”,但 2TB 规格全网比价为 ¥1,799,两种口径不能混用。DRAM 固定 SKU 继续缺价。本期购买建议只依据可复核价格序列,不引用未核实的新品或产能传闻。
其它你可能关心的
- OpenJDK RISC-V:让 atomic add/xchg 使用编译器内存序而不是前后双
fence - Rust:并行化 AST → HIR lowering 的实验及其全局性能回退
- Tokio codec:解释如何真正归还
BytesMut容量
本期结论
两篇材料共同说明:最容易被忽略的成本往往藏在“没有结果”和“只用一下”的对象里。CLDR 补丁让缺失资源成为可缓存状态,在两个时区样本中把耗时降低 45.39%–52.74%;rustc 补丁让固定长度路径直接流入最终 AST 容器,避免短命 Vec,但公开可靠收益只有次级样本平均 0.2%,RSS 还出现最高 3.8% 的显著回退。前者是明确的热路径修复,后者更像值得复用的 API 设计实验;两者都不应越过当前单机、样本与评审状态的边界。