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)。请报告您可能遇到的任何bug!
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”)不会发生变化,跨ABI的反卷仍然是未定义的行为。未来的Rust版本将修改这些ABI,以符合RFC中指定的行为,作为稳定该功能的最后一部分(通常在边界处终止)。我们鼓励用户开始在他们的代码中使用新的unwind ABI变体,以便在将来需要跨越ABI边界进行unwind时能够保持稳定。
调试器可视化属性
1.71.0稳定了对新属性#[debug_visualizer(natvis_file = “…”)] 和#[debug_visualizer(gdb_script_file = “…”)] 的支持,它允许将Natviz描述和GDB脚本嵌入到Rust库中,从而在检查这些库创建的数据结构时改善调试器输出。Rust本身为标准库打包类似的脚本已经有一段时间了,但是这个特性使得库作者能够为最终用户提供类似的体验。
详细用法请参见参考资料。
raw-dylib链接
在Windows平台上,Rust现在支持使用动态库中的函数,而不需要这些库在构建时可用,使用#[link]新的kind=”raw-dylib “选项。
这避免了要求用户安装这些库(对于交叉编译来说尤其困难),也避免了在crates中提供库的存根版本来进行链接。这简化了提供Windows库绑定的crates。
Rust还支持使用新的#[link_ordinal]属性,通过序号而不是命名的符号来绑定DLL提供的符号。
升级到musl 1.2
正如之前所宣布的,Rust 1.71将musl版本升级到1.2.3。大多数用户应该不会受此影响。
常量初始化线程局部
Rust 1.59.0稳定了标准库中的常量初始化线程局部支持,这使得代码生成更加优化。然而,直到现在,这个特性在发布说明和文档中都没有被提及。请注意,这一稳定化并不会使 const { …} 在其他上下文中是有效的表达式或语法;这是一个独立的、目前还不稳定的特性。
使用 std::cell::Cell;
thread_local!
pub static FOO:Cell<u32> = const { Cell::new(1) };
}
Stabilized APIs
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...)
(array to N-tuple for N in 1..=12)From<(T...)> for [T; N]
(N-tuple to array for N in 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。没有你们,我们无法完成。感谢你们