摘要:即可升级到 1.87.0。如未安装,可在官网的 appropriate page on our website 获取 rustup,并阅读 detailed release notes for 1.87.0。
2025 年 5 月 15 日 · Rust 发布团队
在荷兰乌得勒支举办的 “10 Years of Rust” 庆典现场 ,Rust 团队高兴地宣布:Rust 1.87.0 正式发布!
今天的发布日恰逢 Rust 1.0 发布整整十周年!
感谢过去和现在无数为 Rust 做出贡献的伙伴们。愿 Rust 再迎来几十年的辉煌!
按照自 1.0 以来从未间断的六周固定节奏,本次稳定版包含过去 beta 分支的全部改动。
如果你已经通过 rustup 安装了旧版 Rust,只需执行:
$ rustup update stable #技术分享即可升级到 1.87.0。如未安装,可在官网的 appropriate page on our website 获取 rustup,并阅读 detailed release notes for 1.87.0。
如果想提前帮忙测试未来版本,可以将默认工具链切到 beta(rustup default beta)或 nightly(rustup default nightly)。发现问题请随时反馈!
1.87 为标准库加入了匿名管道接口,并与 std::process::Command 的输入/输出方法打通。将 stdout 与 stderr 合流,如下所示就变得相当简单,而以前要么用额外线程,要么依赖平台专用函数。
use std::process::Command;use std::io::Read;let (mut recv, send) = std::io::pipe?;let mut command = Command::new("path/to/bin") .stdout(send.try_clone?) .stderr(send) .spawn?;let mut output = Vec::new; recv.read_to_end(&mut output)?;assert!(command.wait?.success);安全调用架构内建函数(Safe architecture intrinsics) 此前因“需要目标 CPU 特性”而被标记为 unsafe 的大部分 std::arch 内建函数,如今在启用了相应特性的代码中可 直接以安全代码调用。下面这段用 AVX2 手写数组求和的示例,核心循环已无需 unsafe:
#![forbid(unsafe_op_in_unsafe_fn)]use std::arch::x86_64::*;fn sum(slice: &[u32]) -> u32 { #[cfg(target_arch = "x86_64")] if is_x86_feature_detected!("avx2") { return unsafe { sum_avx2(slice) }; }slice.iter.sum }# [target_feature(enable = "avx2")]fn sum_avx2(slice: &[u32]) -> u32 { let (prefix, middle, tail) = unsafe { slice.align_to:: };let mut sum = prefix.iter.sum:: + tail.iter.sum::;let mut base = _mm256_setzero_si256; for e in middle { base = _mm256_add_epi32(base, *e); }let base: [u32; 8] = unsafe { std::mem::transmute(base) }; sum += base.iter.sum::;sum }内联汇编 asm! 现可跳转至 Rust 代码中的标号块,使得在内核或硬件交互场景下的低级优化更灵活:
unsafe { asm!( "jmp {}", label { println!("Jumped from asm!"); } );}详细说明参见 the reference。
在 trait 定义中精确捕获泛型 / 生命周期(+
本版本稳定了在 trait 方法返回类型为 impl Trait 时,显式指定应捕获的泛型与生命周期:
trait Foo { fn method(&'a self) -> impl Sized;fn precise(&'a self) -> impl Sized + use;}-
这些以前稳定的 API 现在在 const 上下文中也很稳定:
Tier 2 目标 i586-pc-windows-msvc 已被移除。它与更常用的 Tier 1 目标 i686-pc-windows-msvc 的唯一区别是 不要求 SSE2,但 Windows 10(所有 windows 目标的最低系统要求,win7 目标除外)本身就需要 SSE2。
请将原有项目迁移至 i686-pc-windows-msvc。详见 Major Change Proposal。
其它改动 更多 Rust / Cargo / Clippy 变化请查看 everything that changed in Rust, Cargo, and Clippy。
1.87.0 的贡献者 众多贡献者共同缔造了 Rust 1.87.0。没有你们就没有今天的发布,衷心感谢!
来源:墨码行者