Rust 团队很高兴地宣布新版本 Rust 1.73.0。Rust 是一门赋予每个人构建可靠且高效软件能力的编程语言。
如果您之前通过 rustup 安装了 Rust,您可以通过以下命令获取 1.73.0:
$ rustup update stable
如果您尚未安装,您可以从我们网站上的相应页面获取 rustup,并在 GitHub 上查看 1.73.0 的详细发行说明。
如果您想通过测试未来版本来帮助我们,您可以考虑在本地更新以使用 beta 通道 (rustup default beta) 或 nightly 通道 (rustup default nightly)。请报告您可能遇到的任何 bug!
1.73.0 stable 版本有什么新特性
更清晰的 panic 消息
默认 panic 处理器产生的输出已更改,将 panic 消息放在单独一行,而不是用引号包裹。这可以使 panic 消息更容易阅读,示例如下:
fn main() {
let file = "ferris.txt";
panic!("oh no! {file:?} not found!");
}Rust 1.73 之前的输出thread 'main' panicked at 'oh no! "ferris.txt" not found!', src/main.rs:3:5Rust 1.73 开始的输出thread 'main' panicked at src/main.rs:3:5:
oh no! "ferris.txt" not found!当消息很长、包含嵌套引号或跨越多行时,这特别有用。
此外,assert_eq 和 assert_ne 产生的 panic 消息也已修改,移动了自定义消息(第三个参数)并删除了一些不必要的标点,如下所示:
fn main() {
assert_eq!("🦀", "🐟", "ferris is not a fish");
}Rust 1.73 之前的输出thread 'main' panicked at 'assertion failed: `(left == right)`
left: `"🦀"`,
right: `"🐟"`: ferris is not a fish', src/main.rs:2:5Rust 1.73 开始的输出thread 'main' panicked at src/main.rs:2:5:
assertion `left == right` failed: ferris is not a fish
left: "🦀"
right: "🐟"线程局部变量初始化
正如RFC 3184 中提议的,LocalKey<Cell<T>> 和 LocalKey<RefCell<T>> 现在可以直接通过 get()、set()、take() 和 replace() 方法进行操作,而无需像处理一般 LocalKey 那样跳入 with(|inner| ...) 闭包。LocalKey<T> 是 thread_local! 静态变量的类型。
这些新方法使常用代码更简洁,并避免在创建新线程时为 thread_local! 中指定的默认值运行额外的初始化代码。
thread_local!
稳定的 API
- 无符号
{integer}::div_ceil - 无符号
{integer}::next_multiple_of - 无符号
{integer}::checked_next_multiple_of std::ffi::FromBytesUntilNulErrorstd::os::unix::fs::chownstd::os::unix::fs::fchownstd::os::unix::fs::lchownLocalKey::<Cell<T>>::getLocalKey::<Cell<T>>::setLocalKey::<Cell<T>>::takeLocalKey::<Cell<T>>::replaceLocalKey::<RefCell<T>>::with_borrowLocalKey::<RefCell<T>>::with_borrow_mutLocalKey::<RefCell<T>>::setLocalKey::<RefCell<T>>::takeLocalKey::<RefCell<T>>::replace
这些 API 现在在 const 上下文中稳定
其他变更
查看 Rust、Cargo 和 Clippy 中的所有变更。
1.73.0 的贡献者
许多人齐心协力创建了 Rust 1.73.0。没有你们所有人,我们不可能做到。衷心感谢!