Rust 1.98.0 发布解读:代数浮点方法与缓冲整数格式化稳定
Rust 团队于 2026 年 8 月 20 日发布 1.98.0。本版本为 f32/f64 带来可启用激进优化的「代数」运算方法,为整数格式化提供绕过动态分派的缓冲路径,并稳定了一批标准库 API。
核心新能力
代数浮点方法:f32 和 f64 新增 algebraic_add、algebraic_sub、algebraic_mul、algebraic_div、algebraic_rem 方法。浮点运算不满足结合律(如 a + b + c + d 必须按左结合顺序求值),但用代数方法链式调用时,编译器可以自由重排(例如并行计算部分和),并更容易做循环向量化——优化空间与 C 系语言的 -ffast-math 类似。这些方法不确定(编译器可自由选择优化),但不会造成未定义行为。
缓冲整数格式化 format_into:所有原生整数类型新增 format_into 方法,接受 &mut NumBuffer<Self> 参数(容量足够容纳任何取值十进制表示的不透明缓冲),返回借用自缓冲的 &str。它绕过了缓冲式 write! 格式化的大量动态分发,性能接近 itoa——官方基准显示 format_into 与 itoa 表现相当,可望成为这类第三方依赖的标准替代。
ManuallyDrop 与 Box 交互修复的正式保证:此前编译器曾把「移动已 drop 的 ManuallyDrop<Box<_>>」视为未定义行为;Rust 1.96 已修复,1.98 更新文档并给出稳定保证(RFC 3336),该写法今后不会成为 UB。
新增稳定 API 摘要
str::substr_range、[T]::subslice_range、[T]::strip_circumfix、str::strip_circumfixcore::fmt::NumBuffer、<{integer}>::format_into{fN}::algebraic_add/sub/mul/div/remNonZero<{integer}>::from_str_radixString::from_utf16le/from_utf16le_lossy/from_utf16be/from_utf16be_lossyAtomic<T>::from_mut、Atomic<T>::get_mut_slice、Atomic<T>::from_mut_slicestd::process::CommandArgs的Send/Syncstd::range::legacy
适用场景
- 数值计算、科学计算与高性能循环中需要对浮点运算做重排/向量化的场景,可改用代数方法(注意非确定性);
- 高频整数格式化的热路径(日志、序列化、网络协议)可用
format_into消除动态分发开销; - 依赖
itoa等格式化库的项目可评估迁移到标准库实现。