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 边界之间展开,则鼓励用户开始在其代码中使用新的 unwind 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”
选项。
这避免了用户安装这些库(对于交叉编译尤其困难),并避免了在 crate 中附带库的存根版本以进行链接。 这简化了提供 Windows 库绑定的 crate。
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
CStr::is_empty
BuildHasher::hash_one
NonZeroI*::is_positive
NonZeroI*::is_negative
NonZeroI*::checked_neg
NonZeroI*::overflowing_neg
NonZeroI*::saturating_neg
NonZeroI*::wrapping_neg
Neg for NonZeroI*
Neg for &NonZeroI*
From<[T; N]> for (T...)
(数组到 N 元组,N 的范围为 1..=12)From<(T...)> for [T; N]
(N 元组到数组,N 的范围为 1..=12)windows::io::AsHandle for Box<T>
windows::io::AsHandle for Rc<T>
windows::io::AsHandle for Arc<T>
windows::io::AsSocket for Box<T>
windows::io::AsSocket for Rc<T>
windows::io::AsSocket for Arc<T>
这些 API 现在在 const 上下文中是稳定的
<*const T>::read
<*const T>::read_unaligned
<*mut T>::read
<*mut T>::read_unaligned
ptr::read
ptr::read_unaligned
<[T]>::split_at
其他变更
查看 Rust、Cargo 和 Clippy 中的所有变更。
1.71.0 版本的贡献者
许多人齐心协力创建了 Rust 1.71.0 版本。 没有大家,我们不可能做到。谢谢!