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 等成熟平台相同的支持级别。

相关链接

相关推荐
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰5 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝5 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
千里马学框架5 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
胡写代码6 天前
别再前后端各写一套表单校验了
java·后端
大勇前进6 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu6 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile6 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白806 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙6 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端