发布 Rust 1.62.0

2022 年 6 月 30 日 · Rust 发布团队

Rust 团队很高兴地宣布新版本的 Rust,1.62.0。Rust 是一门赋能每个人构建可靠且高效软件的编程语言。

如果你之前已经通过 rustup 安装了 Rust,你可以使用以下命令获取 1.62.0:

$ rustup update stable

如果你还没有安装,可以从我们网站的对应页面获取 rustup,并在 GitHub 上查阅 1.62.0 的详细发布说明

如果你想通过测试未来版本来帮助我们,可以考虑在本地更新使用 beta channel (rustup default beta) 或 nightly channel (rustup default nightly)。请报告你可能遇到的任何 bug!

1.62.0 stable 中有什么?

cargo add

你现在可以使用 cargo add 直接从命令行添加新的依赖项。此命令支持指定特性(features)和版本。它也可以用于修改现有依赖项。

例如

cargo add log
cargo add serde --features derive
cargo add nom@5

更多信息请参阅 Cargo 文档

#[default] 枚举变体

如果你指定一个默认变体,现在可以在枚举上使用 #[derive(Default)]。例如,到目前为止,你必须手动为这个枚举编写 Default 实现

#[derive(Default)]
enum Maybe<T> {
    #[default]
    Nothing,

    Something(T),
}

目前,只有“单元”变体(即没有字段的变体)允许被标记为 #[default]。此特性的更多信息可在相应的 RFC 中找到。

Linux 上更精简、更快的 Mutex

以前,Linux 上的 MutexCondvarRwLock 是由 pthreads 库支持的。pthreads 锁支持比 Rust API 本身更多的功能,包括运行时配置,并且它们被设计用于静态保证少于 Rust 的语言。

例如,mutex 的实现大小为 40 字节,并且不能移动。这迫使标准库在使用 pthreads 的平台上为每个新的 mutex 在幕后分配一个 Box

Rust 的标准库现在在 Linux 上附带了一个基于原始 futex 的这些锁的实现,它非常轻量,不需要额外的分配。在 1.62.0 中,Mutex 在 Linux 上只需要 5 字节用于其内部状态,尽管这在未来版本中可能会改变。

这是改进 Rust 锁类型效率的长期工作的一部分,其中包括之前在 Windows 上进行的改进,例如解除对其原语的装箱(unboxing)。你可以在跟踪 Issue 中阅读更多关于这项工作的信息。

裸机 x86_64 目标

现在为 x86_64 构建无操作系统的二进制文件更容易了,例如在编写内核时。x86_64-unknown-none 目标已升级到 Tier 2,并且可以使用 rustup 安装。

$ rustup target add x86_64-unknown-none
$ rustc --target x86_64-unknown-none my_no_std_program.rs

你可以在嵌入式 Rust 书籍中阅读更多关于使用 no_std 进行开发的信息。

稳定化的 API

以下方法和 trait 实现现已稳定化

其他变更

Rust 1.62.0 版本中还有其他变更。查看 RustCargoClippy 中的变化。

1.62.0 的贡献者

许多人共同努力促成了 Rust 1.62.0 的发布。没有你们,我们不可能做到。感谢你们!