Rust 1.17.0发布
如果你之前已经通过 rustup 安装过 Rust,你可以使用以下命令获取 1.71.0 版本:
rustup update stable
如果你还没有安装 rustup,你可以在我们的网站上找到相应的页面来下载 rustup,并在 GitHub 上查看 1.71.0 版本的详细发布说明。
如果你愿意帮助我们测试未来的版本,你可以考虑本地升级到 beta 频道(使用 rustup default beta
命令)或者 nightly 频道(使用 rustup default nightly
命令)。如果你遇到任何 bug,请向我们报告!
1.71.0 版本的新特性 C-unwind ABI
1.71.0 版本稳定了 C-unwind(和其他 -unwind 后缀的 ABI 变体)。
对于非强制性的 unwinding(通常情况)的行为,在提出这个特性的 RFC 中有一个表格进行了规定。总结一下:
每种 ABI 主要等同于同名但不带 -unwind
后缀的 ABI,唯一的区别是带有 -unwind
后缀的 ABI 在跨越 ABI 边界的 unwinding 操作(panic 或者 C++ 风格的异常)发生时,其行为被定义为安全的。对于 panic=unwind
,这是一种有效的方式,可以让来自一个语言的异常在另一个语言的堆栈中进行 unwinding,而不需要终止进程(只要异常在发起它的那个语言中被捕获);对于 panic=abort
,这通常会立即终止进程。
在这个初始的稳定化阶段,对现有的 ABI(例如 "C")没有做出任何改变,跨越它们的 unwinding 仍然是未定义行为。未来的 Rust 发布版会修改这些 ABI 以匹配 RFC 中指定的行为,作为稳定化这个特性的最后一步(通常会在边界处 abort)。我们鼓励用户在他们的代码中开始使用新的 unwind ABI 变体,以便他们在需要跨越 ABI 边界进行 unwinding 时可以做到未来兼容。
调试器可视化属性
1.71.0 版本稳定了对一种新属性的支持,#[debug_visualizer(natvis_file = "...")]
和 #[debug_visualizer(gdb_script_file = "...")]
,这允许将 Natviz 描述和 GDB 脚本嵌入到 Rust 库中,以改进在检查由这些库创建的数据结构时的调试器输出。Rust 本身已经为标准库打包了类似的脚本,但这个特性使得库作者能够为最终用户提供类似的体验。
详情请查看参考文档。
raw-dylib
链接
在 Windows 平台上,Rust 现在支持使用动态库中的函数,而不需要在构建时就有这些库,使用 #[link] 的新选项 kind="raw-dylib"
。
这避免了用户需要安装这些库(特别是对于交叉编译来说比较困难),也避免了必须在 crate 中提供库的存根版本来进行链接。这简化了为 Windows 库提供绑定的 crate。
Rust 还支持使用新的 #[link_ordinal]
属性,通过序号而不是命名符号来绑定 DLL 提供的符号。
升级到 musl 1.2
如之前公告,Rust 1.71 更新了 musl 版本到 1.2.3。大多数用户不应该受此更改影响。
Const 初始化的线程局部变量
Rust 1.59.0 在标准库中稳定了 const 初始化线程局部变量的支持,这允许更优的代码生成。然而,直到现在,这个特性在发布说明和文档中都被遗漏了。注意,这个稳定化并没有在其他上下文中让const { ... }
成为一个有效的表达式或语法;那是一个单独的,目前还不稳定的特性。
例如:
use std::cell::Cell; thread_local! { pub static FOO: Cell<u32> = const { Cell::new(1) }; }