Rust 1.91.0 发布:新增平台支持与安全增强

Rust 1.91.0 发布

2025 年 10 月 30 日 · Rust 发布团队

Rust 团队很高兴宣布 Rust 1.91.0 新版本的发布。Rust 是一种编程语言,旨在让每个人都能构建可靠且高效的软件。

如果您已通过 rustup 安装了旧版 Rust,可以通过以下命令获取 1.91.0 版本:

bash 复制代码
$ rustup update stable

如果尚未安装 rustup,可以从我们网站的相应页面获取,并查看 1.91.0 的详细发布说明。

如果您希望通过测试未来版本来帮助我们,可以考虑在本地更新以使用 beta 频道(rustup default beta)或 nightly 频道(rustup default nightly)。请报告您可能遇到的任何错误!

1.91.0 稳定版中的新内容

aarch64-pc-windows-msvc 现为 Tier 1 平台

Rust 编译器支持多种目标平台,但 Rust 团队无法为所有平台提供相同级别的支持。为了明确标记每个平台的支持程度,我们采用了分级系统:

  • Tier 3 目标:编译器在技术上支持,但我们不检查其代码是否构建或通过测试,并且不提供预构建二进制文件作为发布的一部分。
  • Tier 2 目标:保证能够构建,我们提供预构建二进制文件,但不在这些平台上执行测试套件:生成的二进制文件可能无法工作或可能存在错误。
  • Tier 1 目标:提供最高级别的支持保证,我们在编译器每次合并更改时在这些平台上运行完整的测试套件。同时提供预构建二进制文件。

Rust 1.91.0 将 aarch64-pc-windows-msvc 目标提升为 Tier 1 支持,为运行 Windows 的 64 位 ARM 系统用户带来我们的最高保证。

新增针对局部变量悬空原始指针的 lint 检查

虽然 Rust 的借用检查器防止返回悬空引用,但它不跟踪原始指针。在此版本中,我们添加了一个默认警告的 lint,用于检查从函数返回的局部变量原始指针。例如,类似以下的代码:

rust 复制代码
fn f() -> *const u8 {
    let x = 0;
    &x
}

现在会产生 lint 警告:

vbnet 复制代码
warning: a dangling pointer will be produced because the local variable `x` will be dropped
 --> src/lib.rs:3:5
  |
1 | fn f() -> *const u8 {
  |           --------- return type of the function is `*const u8`
2 |     let x = 0;
  |         - `x` is part the function and will be dropped at the end of the function
3 |     &x
  |     ^^
  |
  = note: pointers do not have a lifetime; after returning, the `u8` will be deallocated
    at the end of the function because nothing is referencing it as far as the type system is
    concerned
  = note: `#[warn(dangling_pointers_from_locals)]` on by default

请注意,上述代码本身并不不安全,因为它没有执行任何危险操作。只有在函数返回后解引用原始指针才是不安全的。我们预计未来的 Rust 版本将增加更多功能,帮助开发者安全地与原始指针以及更广泛的不安全代码进行交互。

稳定的 API

  • Path::file_prefix
  • AtomicPtr::fetch_ptr_add
  • AtomicPtr::fetch_ptr_sub
  • AtomicPtr::fetch_byte_add
  • AtomicPtr::fetch_byte_sub
  • AtomicPtr::fetch_or
  • AtomicPtr::fetch_and
  • AtomicPtr::fetch_xor
  • {integer}::strict_add
  • {integer}::strict_sub
  • {integer}::strict_mul
  • {integer}::strict_div
  • {integer}::strict_div_euclid
  • {integer}::strict_rem
  • {integer}::strict_rem_euclid
  • {integer}::strict_neg
  • {integer}::strict_shl
  • {integer}::strict_shr
  • {integer}::strict_pow
  • i{N}::strict_add_unsigned
  • i{N}::strict_sub_unsigned
  • i{N}::strict_abs
  • u{N}::strict_add_signed
  • u{N}::strict_sub_signed
  • PanicHookInfo::payload_as_str
  • core::iter::chain
  • u{N}::checked_signed_diff
  • core::array::repeat
  • PathBuf::add_extension
  • PathBuf::with_added_extension
  • Duration::from_mins
  • Duration::from_hours
  • impl PartialEq<str> for PathBuf
  • impl PartialEq<String> for PathBuf
  • impl PartialEq<str> for Path
  • impl PartialEq<String> for Path
  • impl PartialEq<PathBuf> for String
  • impl PartialEq<Path> for String
  • impl PartialEq<PathBuf> for str
  • impl PartialEq<Path> for str
  • Ipv4Addr::from_octets
  • Ipv6Addr::from_octets
  • Ipv6Addr::from_segments
  • impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
  • impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
  • impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
  • Cell::as_array_of_cells
  • u{N}::carrying_add
  • u{N}::borrowing_sub
  • u{N}::carrying_mul
  • u{N}::carrying_mul_add
  • BTreeMap::extract_if
  • BTreeSet::extract_if
  • impl Debug for windows::ffi::EncodeWide<'_>
  • str::ceil_char_boundary
  • str::floor_char_boundary
  • impl Sum for Saturating<u{N}>
  • impl Sum<&Self> for Saturating<u{N}>
  • impl Product for Saturating<u{N}>
  • impl Product<&Self> for Saturating<u{N}>

以下先前稳定的 API 现在在常量上下文中也稳定:

  • <[T; N]>::each_ref
  • <[T; N]>::each_mut
  • OsString::new
  • PathBuf::new
  • TypeId::of
  • ptr::with_exposed_provenance
  • ptr::with_exposed_provenance_mut

平台支持

  • aarch64-pc-windows-msvc 提升为 Tier 1。
  • aarch64-pc-windows-gnullvmx86_64-pc-windows-gnullvm 提升为 Tier 2,并提供主机工具。
  • 注意:llvm-tools 和 MSI 安装程序目前缺失,但将在未来版本中添加。

有关 Rust 分级平台支持的更多信息,请参阅 Rust 的平台支持页面。

其他更改

查看 Rust、Cargo 和 Clippy 中的所有更改。

1.91.0 的贡献者

许多人共同创建了 Rust 1.91.0。没有大家的共同努力,我们无法完成这项工作。谢谢!

相关推荐
小易测试笔记12 分钟前
芯片ESD测试仪是什么?主要有哪几种不同类型?
人工智能
counting money19 分钟前
Spring AI Alibaba 从入门到实战:构建企业级 AI 应用
java·人工智能·spring
科技每日热闻19 分钟前
AI 赋能财务资金管理、风险预警、经营数据分析,合适的云上财务智能 Agent 有哪些?—— 优先采用 Amazon Quick 四链路解决方案
人工智能·ai·数据挖掘·数据分析
Linguwen24 分钟前
外贸GEO06|AI搜索引擎怎么工作?理解原理才能做好优化
人工智能·搜索引擎
DS随心转APP27 分钟前
生成word文档的DeepSeek底层解码与“AI导出鸭”工程化方案:一份技术架构师的全维度测评
人工智能·ai·chatgpt·word·deepseek·ai导出鸭
小猴子下山12331 分钟前
2026年无锡滨湖区健康管理公司解析:全周期服务与细胞技术如何匹配需求
人工智能·精选
武子康33 分钟前
Pi 怎样决定模型看见什么:AGENTS.md、SYSTEM.md 与 Skills 的加载边界
人工智能·llm·agent
深念Y36 分钟前
Opencode Event 表写入优化方案
数据库·人工智能·ai·node.js·bug·优化·opencode
橘和柠37 分钟前
YOLOv8 目标检测:从训练到部署全流程(接单高频需求)
人工智能
招风的黑耳39 分钟前
我国牵头制定智慧城市国际标准发布:从“跟跑“到“领跑“,意味着什么?
人工智能·智慧城市