宣布 Rust 1.71.0

2023 年 7 月 13 日 · Rust 发布团队

Rust 团队很高兴宣布 Rust 的新版本 1.71.0。Rust 是一种编程语言,它使每个人都能构建可靠高效的软件。

如果您通过 rustup 安装了先前版本的 Rust,您可以使用以下命令获取 1.71.0

$ rustup update stable

如果您还没有它,您可以从我们网站上的相应页面获取 rustup,并查看 GitHub 上1.71.0 的详细发布说明

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

1.71.0 稳定版中的新内容

C-unwind ABI

1.71.0 稳定了 C-unwind(以及其他以 -unwind 为后缀的 ABI 变体1)。

未强制展开(典型情况)的行为在RFC 中提出的此功能的表格中指定。总结一下

每个 ABI 大致等同于没有 -unwind 的相同 ABI,除了使用 -unwind 时,行为被定义为在展开操作(panic 或 C++ 样式异常)跨越 ABI 边界时是安全的。对于 panic=unwind,这是一种有效的方式,可以使来自一种语言的异常在另一种语言中展开堆栈,而不会终止进程(只要异常在它起源的相同语言中被捕获);对于 panic=abort,这通常会立即中止进程。

对于此初始稳定化,没有对现有 ABI(例如 "C")进行更改,并且跨越它们的展开仍然是未定义的行为。未来的 Rust 版本将修改这些 ABI 以匹配 RFC 中指定的行为,作为稳定此功能的最后一步(通常在边界处中止)。鼓励用户开始在其代码中使用新的展开 ABI 变体,以在需要跨越 ABI 边界展开时保持未来兼容性。

调试器可视化属性

1.71.0 稳定了对新属性 #[debug_visualizer(natvis_file = "...")]#[debug_visualizer(gdb_script_file = "...")] 的支持,该属性允许将 Natvis 描述和 GDB 脚本嵌入到 Rust 库中,以在检查这些库创建的数据结构时改进调试器输出。Rust 本身已经为标准库打包了类似的脚本一段时间,但此功能使库作者能够为最终用户提供类似的体验。

有关使用详细信息,请参阅参考

raw-dylib 链接

在 Windows 平台上,Rust 现在支持使用来自动态库的函数,而无需在构建时提供这些库,使用 #[link] 的新选项 kind="raw-dylib”

这避免了要求用户安装这些库(特别是对于交叉编译来说很困难),并且避免了必须在板条箱中提供库的存根版本以进行链接。这简化了提供 Windows 库绑定的板条箱。

Rust 还支持通过序数而不是命名符号绑定到 DLL 提供的符号,使用新的 #[link_ordinal] 属性。

升级到 musl 1.2

先前宣布,Rust 1.71 将 musl 版本更新到 1.2.3。大多数用户应该不会受到此更改的影响。

常量初始化的线程局部变量

Rust 1.59.0 在标准库中稳定了 const 初始化的线程局部变量支持,这允许更优化的代码生成。但是,直到现在,此功能在发布说明和文档中都缺失了。请注意,此稳定化不会使 const { ... } 在其他上下文中成为有效的表达式或语法;这是一个独立的,目前不稳定的功能

use std::cell::Cell;

thread_local! {
    pub static FOO: Cell<u32> = const { Cell::new(1) };
}

稳定化的 API

这些 API 现在在常量上下文中是稳定的

其他更改

查看RustCargoClippy 中的所有更改。

1.71.0 的贡献者

许多人共同创建了 Rust 1.71.0。没有你们,我们无法做到。 感谢!

  1. 稳定化的 ABI 列表可以在稳定化报告中找到