Rust 1.100 将在 11 月 12 日发布,建议先测 beta
这是 noop_noob 发在 r/rust 的帖子,提醒 Rust 1.100 的破坏面。Rust 1.100 计划在 2026 年 11 月 12 日发布。作者建议升级前至少跑一次 cargo +beta test。帖子写明,1.100 为了新功能改了语言细节,破坏面会比普通小版本更大,依赖里的代码也可能受影响。
破坏主要来自两处。never type 稳定后,2021 及更早 edition 里,一部分原先推断成 () 的类型会改成 !。Infallible 会变成 never type 的别名。之前在 stable 上用不受支持的办法引用 never type 的代码也会坏。相关改动在 https://github.com/rust-lang/rust/pull/155499 ,Waffle 的讲解在 https://youtu.be/3jM4cnEVrLc 。另一处是 Cargo target 目录布局调整。最终产物路径不变,依赖中间文件固定位置的工具和 build script 会失败。说明见 https://blog.rust-lang.org/2026/03/13/call-for-testing-build-dir-layout-v2/ ,改动在 https://github.com/rust-lang/cargo/pull/17354 。
Crater 报告 beta-1.100-4 测了 3639 个 crate,对照 1.99.0-beta.8 和 1.100.0-beta.1,标出 790 个回归 crate,其中 128 个是 root crate。作者写明这份名单有误报,也没有覆盖全部破坏。报告地址是 https://crater-reports.s3.amazonaws.com/beta-1.100-4/index.html 。
原文链接:https://www.reddit.com/r/rust/comments/1x3yz9i/psa_incoming_breakage_in_1100_test_your_code_on/
4 线程把 Nginx Brotli 吞吐提到 16 倍
ngx_mbrotli 是用 Rust 写的 Nginx Brotli 模块,基于 ngx-rust 和纯 Rust 编码器 mbrotli。它按 google/ngx_brotli 的模块、指令和默认值做替换,现有配置可以继续用。动态压缩和预压缩 .br 打进同一个动态库,一行 load_module 同时加载。
压缩可以放到 Nginx 线程池,不占 worker 的事件循环。Nginx 需要带 --with-threads。配置 brotli_thread_pool 后,响应按段切开,再在线程池上并行压缩。README 的基准是 1 个 worker 加 4 个线程,85 KB 到 1 MB 的响应在 level 1 到 6 的吞吐是 google/ngx_brotli 的 3.7 到 4.9 倍,level 9 是 5 到 16 倍。分段并行会多用内存,压缩率也会差一点。构建需要 Rust 1.89 或更新版本。仓库地址是 https://github.com/M-Compressors/ngx_mbrotli ,编码器仓库是 https://github.com/M-Compressors/mbrotli 。
原文链接:https://github.com/M-Compressors/ngx_mbrotli
hotpath 把函数指标接到 Grafana
这是 hotpath-rs 的文章,作者 pawurb 在 2026 年 10 月 12 日发布,说明怎么把函数级性能指标接到 Prometheus 和 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。
原文链接:https://hotpath.rs/blog/rust-performance-grafana
可视化 crossbeam 的 epoch 回收
这是一篇拆解 crossbeam-epoch 的可视化文章,发在作者的个人站,系列第三篇。前两篇分别写无锁栈的 ABA 问题,以及用 Loom 去抓 ABA。这一篇写 crossbeam-epoch 怎么处理两件事:读线程还在用节点时怎么推迟 drop,以及怎么在一次 CAS 里同时改指针和删除标记。
文中把 crossbeam 的三块对应到标准库。Owned<T> 类似 Box<T>,Atomic<T> 类似 AtomicPtr<T>,Shared<'a, T> 是绑在 Guard 上的借用。8 字节对齐的指针低位空着,crossbeam 用这些位在同一个字里放删除标记,这样一次 CAS 就能同时更新指针和状态。示例代码在 https://github.com/sofiabelen/visualizing-crossbeam-epoch 。
原文链接:https://sofiabelen.github.io/projects/visualizing-crossbeam-epoch-based-reclamation/
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论