Rust 1.91 发布:ARM Windows 正式跻身顶级支持,悬空指针警告上线

Rust 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 系统用户提供最高级别的保障,这使 Rust 编程语言对 ARM 支持的级别与其他常见操作系统和架构保持一致。Rust 1.91 为 64 位 ARM/AArch64 上的 Windows 提供一级支持,也意味着新版本将提供预构建的二进制文件。

这意味着搭载高通骁龙 X Elite 等 ARM 芯片的Windows笔记本、平板,终于可以像 x86-64 Linux 或 macOS 一样,获得 Rust 官方的全力保障。无论是开发本地应用、跨平台工具,还是构建系统级服务,你都可以放心使用 Rust,再也不用担心"编译能过,运行就崩"的尴尬局面。这对推动ARM生态的开发者工具链建设,意义重大!相当奈斯!

添加针对局部变量中悬空原始指针的 lint 规则

虽然 Rust 的借用检查器(borrow checker)可以有效防止返回悬空引用(dangling references),但它不会跟踪原始指针 (raw pointers),因为原始指针属于 unsafe 代码范畴,编译器默认你"知道自己在干什么"。

然而,现实是,很多开发者在写 unsafe 代码时,还是会不小心返回指向局部变量的原始指针。

例如,类似这样的代码:

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

这段看起来好像没问题?但其实,函数返回后,局部变量x就会被销毁,返回的指针就变成了"悬空指针"。虽然这段代码本身不触发 unsafe 行为(因为没解引用),但一旦调用方在外部解引用,就会导致未定义行为,轻则程序崩溃,重则安全漏洞。

在此版本中,添加了一个默认警告的 lint,用于检查函数返回的指向局部变量的原始指针。

rust 复制代码
warning: a dangling pointer will be produced because the local variable <code>x</code> will be dropped
 --> src/lib.rs:3:5
  |
1 | fn f() -> *const u8 {
  |           --------- return type of the function is <code>*const u8</code>
2 |     let x = 0;
  |         - <code>x</code> 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 <code>u8</code> will be deallocated
    at the end of the function because nothing is referencing it as far as the type system is
    concerned
  = note: <code>#[warn(dangling_pointers_from_locals)]</code> on by default

其实,这个新 lint 叫做dangling_pointers_from_locals,默认开启,级别为warn。它代码本身并不危险,因为它没有执行任何危险操作,也不会阻止你编译,只是会提醒你一下。

如果你确实需要返回原始指针(比如在FFI接口中),可以通过显式标注关闭警告:

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

但请务必确保调用方不会在函数返回后解引用该指针,否则仍属未定义行为。未来,Rust团队还计划引入更多机制,帮助开发者更安全地编写 unsafe 代码------毕竟,真正的"零成本抽象",不仅要高效,更要安全!

平台支持

  • 将 aarch64-pc-windows-msvc 提升至 Tier 1 支持
  • 将 aarch64-pc-windows-gnullvm 和 x86_64-pc-windows-gnullvm 提升至 Tier 2 级别支持,并提供主机工具( host tools)。注意:llvm-tools 和 MSI 安装程序目前缺失,将在未来版本中添加。

总结

随着 Rust 1.91 的发布,aarch64-pc-windows-msvc 获得 Tier 1 级目标平台认证,并拥有相应的宿主工具,这意味着搭载 MSVC 的 ARM64 Windows 系统"保证"可以作为完全受支持的平台运行。也意味着 Rust 项目会提供官方二进制版本,并在每次更改后运行自动化测试以确保构建和测试通过,同时支持在ARM64 Windows 机器上原生运行诸如 npm rustc cargo npm 之类的开发工具。实际上,开发者现在可以放心地将 ARM64 Windows 设备(例如 Windows on ARM 笔记本电脑)用作编译目标和开发平台,并获得与 x86_64 Windows 和 ARM64 macOS 等成熟平台相同的支持级别。

相关链接

相关推荐
用户8356290780516 小时前
Python创建PDF文档:解锁高效PDF创建的能力
后端·python
golang学习记6 小时前
FastAPI + SQLModel 实战:一个模型搞定数据库与 API
后端
oak隔壁找我6 小时前
Spring Boot Starter 入门教程
java·后端
Data_Adventure7 小时前
Java 与 TypeScript 的核心对比
前端·后端
Data_Adventure7 小时前
从前端到 Java 后端:一份详细转型路线指南
前端·后端
绝无仅有7 小时前
某游戏大厂计算机网络面试问题深度解析(一)
后端·面试·架构
shepherd1117 小时前
破局延时任务(下):Spring Boot + DelayQueue 优雅实现分布式延时队列(实战篇)
java·spring boot·后端
绝无仅有7 小时前
某游戏大厂分布式系统经典实战面试题解析
后端·面试·程序员
F_Director7 小时前
Webpack性能优化的理论和实践
前端·webpack·性能优化