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
)。请报告您遇到的任何错误!
1.73.0 稳定版中的新功能
更清晰的恐慌消息
默认恐慌处理程序生成的输出已更改,将恐慌消息放在单独的行上,而不是用引号将其括起来。这可以使恐慌消息更易于阅读,如以下示例所示
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:5
Rust 1.73 及更高版本中的输出thread 'main' panicked at src/main.rs:3:5:
oh no! "ferris.txt" not found!
这在消息很长、包含嵌套引号或跨越多行时尤其有用。
此外,assert_eq
和 assert_ne
生成的恐慌消息已修改,移动了自定义消息(第三个参数)并删除了一些不必要的标点符号,如下所示
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:5
Rust 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! {
static THINGS: Cell<Vec<i32>> = Cell::new(Vec::new());
}
fn f() {
// before:
THINGS.with(|i| i.set(vec![1, 2, 3]));
// now:
THINGS.set(vec![1, 2, 3]);
// ...
// before:
let v = THINGS.with(|i| i.take());
// now:
let v: Vec<i32> = THINGS.take();
}
稳定的 API
- 无符号
{integer}::div_ceil
- 无符号
{integer}::next_multiple_of
- 无符号
{integer}::checked_next_multiple_of
std::ffi::FromBytesUntilNulError
std::os::unix::fs::chown
std::os::unix::fs::fchown
std::os::unix::fs::lchown
LocalKey::<Cell<T>>::get
LocalKey::<Cell<T>>::set
LocalKey::<Cell<T>>::take
LocalKey::<Cell<T>>::replace
LocalKey::<RefCell<T>>::with_borrow
LocalKey::<RefCell<T>>::with_borrow_mut
LocalKey::<RefCell<T>>::set
LocalKey::<RefCell<T>>::take
LocalKey::<RefCell<T>>::replace
这些 API 现在在 const 上下文中稳定
其他更改
1.73.0 的贡献者
许多人共同创建了 Rust 1.73.0。没有你们,我们无法做到。 感谢!