【Rust日报】2026-09-10 Rustls 十周年与 0.24 展望

💡 原文中文,约3000字,阅读约需8分钟。
📝

内容提要

Rustls 回顾十年:2016 年首发,2024 年 0.23 版已支持 FIPS、ECH 与后量子密码,0.24 版将引入外部缓冲、异步握手与独立 CryptoProvider,之后推进 1.0。Cargo 团队迎新,Dongpo、Ross 加入,Eric 卸任。自定义分配器稳定化接近完成,MVP 包含 Allocator 与 Box/Vec 的 _in API。Watermelon 合法着法生成器达到约 4.75 亿 nodes/s。

🔎

延伸解读

Rustls 0.24 的架构调整与 1.0 路线

Rustls 0.24 计划引入外部缓冲、异步握手 session types 和独立的 CryptoProvider crate,这些改动旨在提升性能与灵活性。外部缓冲允许明文就地解密,减少拷贝;异步握手拆分步骤,支持异步/阻塞驱动;CryptoProvider 独立后,主 crate 不再用 feature 选择后端,用户可按需引入 rustls-aws-lc-rs 或 rustls-ring。0.24 稳定后,团队将推进长期稳定的 1.0 API,值得关注其迁移成本。

Cargo 团队更替与构建系统演进

Cargo 团队迎来 Dongpo 和 Ross,Eric Huss 卸任。Dongpo 将外部实验的 cargo info 合入内置命令,完成了近十年的功能请求;Ross 深入构建产物管理与缓存,推动新的 build directory layout 并主持 cross-workspace caching 目标。新任 co-leads 为 Jacob Finkelman 和 Weihang Lo。这些变动可能影响 Cargo 的未来方向,尤其是构建缓存和跨工作区协作的改进。

自定义分配器稳定化:MVP 范围与限制

自定义分配器稳定化接近完成,MVP 包含 Allocator trait 的 allocate/deallocate 以及 Box::new_in、Vec::new_in 等 API,目标支持 dyn 兼容。但首批稳定刻意收窄:多数容器方法未纳入,Clone 与释放底层内存的组合可能不健全,因此讨论引入 unsafe marker AllocatorClone;Pin 与协方差问题指向 StaticAllocator,MVP 暂不包含 Box::pin_in。这为后续扩展留下空间。

Watermelon 着法生成器的性能与设计

Watermelon 合法着法生成器达到约 4.75 亿 nodes/s,其设计注重安全与性能。局面用 8 个 u64 位板表示,走法编码为 16 位 Move,MoveList 栈上存储避免堆分配。生成路径按颜色 monomorphize,滑动子力用 PEXT 查表,并统一计算 checkmask 与 pinmask 裁剪着法。该生成器可独立使用,为 Rust 国际象棋引擎开发提供了高效基础组件。

Q&A

Rustls 0.24 版本计划引入哪些主要新特性?

Rustls 0.24 计划引入外部缓冲(TlsInputBuffer,支持明文就地解密、减少拷贝)、面向 async 的握手 session types(服务器步骤如 NeedsInput → Accepted → VerifyClientIdentity → Complete,可异步/阻塞/完成式驱动)、握手后 SendTraffic / ReceiveTraffic 拆分以实现全双工与更低争用,以及将 CryptoProvider 拆分为独立 crate(如 rustls-aws-lc-rs、rustls-ring),主 crate 不再用 feature 选择 provider。

Rustls 项目在 0.23 版本中已经支持了哪些重要功能?

Rustls 0.23 于 2024 年 2 月 29 日发布,该系列已有 43 次非破坏性发布,并落地了 FIPS 密码学选项、证书压缩、Encrypted ClientHello (ECH)、后量子密码以及性能改进。

Cargo 团队最近有哪些人员变动?

Dongpo Liu(0xPoe)和 Ross Sullivan(ranger-ross)加入 Cargo 团队;Eric Huss(ehuss)卸任。新任 co-leads 为 Jacob Finkelman(Eh2406)与 Weihang Lo(weihanglo)。

自定义分配器稳定化的当前 MVP 包含哪些 API?

当前 MVP 形态与 nightly 接近:Allocator 核心表面主要是 allocate / deallocate;容器侧先支持 Box::new_in,以及 Vec::new_in、with_capacity_in、allocator、raw/parts 与 with_allocator 拆解等 API。目标是一开始就让 Allocator 可 dyn 兼容,例如 Vec::new_in(Arc<dyn Allocator>)。

Watermelon 合法着法生成器的性能如何?

Watermelon 合法着法生成器达到约 4.75 亿 nodes/s。

Watermelon 如何表示棋盘和走法?

局面用 bitboard 表示:6 个兵种位板 + 2 个颜色位板,共 8 个 u64、64 字节,并对齐 64 字节。走法编码为 16 位 Move(from/to 各 6 位 + flags);MoveList 在栈上最多存 271 个合法着法,避免堆分配。

🏷️

标签

➡️

继续阅读