编程 Rust 1.98.0 发布解读:代数浮点方法与缓冲整数格式化稳定

2026-09-09 08:01:13

Rust 1.98.0 发布解读:代数浮点方法与缓冲整数格式化稳定

Rust 团队于 2026 年 8 月 20 日发布 1.98.0。本版本为 f32/f64 带来可启用激进优化的「代数」运算方法,为整数格式化提供绕过动态分派的缓冲路径,并稳定了一批标准库 API。

核心新能力

代数浮点方法f32f64 新增 algebraic_addalgebraic_subalgebraic_mulalgebraic_divalgebraic_rem 方法。浮点运算不满足结合律(如 a + b + c + d 必须按左结合顺序求值),但用代数方法链式调用时,编译器可以自由重排(例如并行计算部分和),并更容易做循环向量化——优化空间与 C 系语言的 -ffast-math 类似。这些方法不确定(编译器可自由选择优化),但不会造成未定义行为。

缓冲整数格式化 format_into:所有原生整数类型新增 format_into 方法,接受 &mut NumBuffer<Self> 参数(容量足够容纳任何取值十进制表示的不透明缓冲),返回借用自缓冲的 &str。它绕过了缓冲式 write! 格式化的大量动态分发,性能接近 itoa——官方基准显示 format_intoitoa 表现相当,可望成为这类第三方依赖的标准替代。

ManuallyDrop 与 Box 交互修复的正式保证:此前编译器曾把「移动已 drop 的 ManuallyDrop<Box<_>>」视为未定义行为;Rust 1.96 已修复,1.98 更新文档并给出稳定保证(RFC 3336),该写法今后不会成为 UB。

新增稳定 API 摘要

  • str::substr_range[T]::subslice_range[T]::strip_circumfixstr::strip_circumfix
  • core::fmt::NumBuffer<{integer}>::format_into
  • {fN}::algebraic_add/sub/mul/div/rem
  • NonZero<{integer}>::from_str_radix
  • String::from_utf16le / from_utf16le_lossy / from_utf16be / from_utf16be_lossy
  • Atomic<T>::from_mutAtomic<T>::get_mut_sliceAtomic<T>::from_mut_slice
  • std::process::CommandArgsSend/Sync
  • std::range::legacy

适用场景

  • 数值计算、科学计算与高性能循环中需要对浮点运算做重排/向量化的场景,可改用代数方法(注意非确定性);
  • 高频整数格式化的热路径(日志、序列化、网络协议)可用 format_into 消除动态分发开销;
  • 依赖 itoa 等格式化库的项目可评估迁移到标准库实现。

来源:Announcing Rust 1.98.0

复制全文 生成海报 Rust 编程语言 浮点运算 性能

推荐文章

程序员茄子在线接单