【Rust日报】2026-10-13 Rust 1.100 将在 11 月 12 日发布,建议先测 beta
内容提要
Rust 1.100 将于 11 月 12 日发布,never type 稳定和 Cargo target 目录调整带来较大破坏性变更,建议先进行 beta 测试。此外,ngx_mbrotli 通过线程池将 Nginx Brotli 吞吐提升至 16 倍;hotpath 可将函数指标接入 Grafana;还有文章可视化讲解 crossbeam-epoch 的延迟回收与标记指针。
延伸解读
升级前必做:用 beta 测试提前暴露破坏
Rust 1.100 计划于 2026 年 11 月 12 日发布,作者建议升级前至少运行一次 cargo +beta test。因为 never type 稳定和 Cargo target 目录调整会带来比普通小版本更大的破坏面,依赖中的代码也可能受影响。提前在 beta 上测试,能帮助你在正式发布前发现并修复问题,避免生产环境升级时被动。
Crater 报告:回归数据有误报,不能全信
Crater 报告显示 beta-1.100-4 测试了 3639 个 crate,标出 790 个回归 crate,其中 128 个是 root crate。但作者明确指出这份名单存在误报,且没有覆盖全部破坏。因此,报告只能作为参考线索,不能替代你自己项目的实际测试。建议结合自身依赖和构建流程,重点验证 never type 和 target 目录相关改动。
ngx_mbrotli:线程池提升吞吐,但需权衡内存与压缩率
ngx_mbrotli 用 Rust 重写 Nginx Brotli 模块,兼容现有配置,并可将压缩放到 Nginx 线程池。基准显示 1 worker 加 4 线程时,level 1 到 6 吞吐是 google/ngx_brotli 的 3.7 到 4.9 倍,level 9 达 5 到 16 倍。但分段并行会多用内存,压缩率也会略差。使用前需确认 Nginx 编译时带 --with-threads,且 Rust 版本不低于 1.89。
hotpath 与 crossbeam-epoch:可观测性与底层回收的实用参考
hotpath 可将函数级指标接入 Prometheus 和 Grafana,默认在 6772 端口提供 /metrics,覆盖 SQL 耗时、N+1、HTTP 调用、内存分配、锁竞争等。crossbeam-epoch 的可视化文章则解释如何推迟 drop 以及用指针低位标记删除,实现一次 CAS 同时更新指针和状态。两者分别对性能观测和无锁数据结构理解有参考价值。
Q&A
Rust 1.100 什么时候发布?为什么建议先测 beta?
Rust 1.100 计划于 2026 年 11 月 12 日发布。建议先测 beta 是因为该版本为了新功能改了语言细节,破坏面比普通小版本更大,依赖里的代码也可能受影响,升级前至少跑一次 cargo +beta test。
Rust 1.100 有哪些主要破坏性变更?
主要破坏来自两处:一是 never type 稳定后,2021 及更早 edition 里部分原先推断成 () 的类型会改成 !,Infallible 会变成 never type 的别名,之前在 stable 上用不受支持办法引用 never type 的代码也会坏;二是 Cargo target 目录布局调整,最终产物路径不变,但依赖中间文件固定位置的工具和 build script 会失败。
ngx_mbrotli 如何提升 Nginx Brotli 吞吐?效果如何?
ngx_mbrotli 是用 Rust 写的 Nginx Brotli 模块,基于 ngx-rust 和纯 Rust 编码器 mbrotli。它可以把压缩放到 Nginx 线程池,不占 worker 的事件循环,需要 Nginx 带 --with-threads 并配置 brotli_thread_pool。基准测试显示,1 个 worker 加 4 个线程时,85 KB 到 1 MB 的响应在 level 1 到 6 的吞吐是 google/ngx_brotli 的 3.7 到 4.9 倍,level 9 是 5 到 16 倍。
hotpath 如何将函数指标接入 Grafana?
打开 hotpath-prometheus feature 后,进程默认在 6772 端口提供 /metrics。文章示例使用 hotpath 0.28,指标里能看到 hotpath 0.28.3 和 rustc 1.98.0。样例数据来自 hotpath-backend 这个 Axum 服务,文章按 SQL 查询汇总耗时占比,并给出 p95 超过 500ms 的慢查询筛选。同一套指标还覆盖按 Axum 路由看 SQL 时间和 N+1、HTTP 调用开销、每次请求的内存分配、channel 和锁竞争,以及 Tokio worker 和每线程 CPU。
crossbeam-epoch 如何解决延迟回收和标记指针问题?
crossbeam-epoch 处理两件事:读线程还在用节点时推迟 drop,以及在一次 CAS 里同时改指针和删除标记。文中把 crossbeam 的三块对应到标准库:Owned<T> 类似 Box<T>,Atomic<T> 类似 AtomicPtr<T>,Shared<'a, T> 是绑在 Guard 上的借用。8 字节对齐的指针低位空着,crossbeam 用这些位在同一个字里放删除标记,这样一次 CAS 就能同时更新指针和状态。
Crater 对 Rust 1.100 beta 的测试结果如何?
Crater 报告 beta-1.100-4 测了 3639 个 crate,对照 1.99.0-beta.8 和 1.100.0-beta.1,标出 790 个回归 crate,其中 128 个是 root crate。作者写明这份名单有误报,也没有覆盖全部破坏。