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