宣布 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 频道 (rustup default beta) 或 nightly 频道 (rustup default nightly)。请 报告 你可能遇到的任何错误!

1.62.0 稳定版有哪些新内容

cargo add

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

例如

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

有关更多信息,请参阅 cargo 文档

#[default] 枚举变体

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

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

    Something(T),
}

目前,只有 “unit” 变体(没有字段的变体)允许标记为 #[default]。更多信息请参阅此功能的 RFC

Linux 上更轻薄、更快速的互斥锁

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

例如,互斥锁实现为 40 字节,并且无法移动。这迫使标准库为每个使用 pthreads 的平台的新互斥锁在幕后分配一个 Box

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

这是提高 Rust 锁类型效率的长期努力的一部分,其中包括之前在 Windows 上的改进,例如取消装箱其原语。你可以在 跟踪问题 中阅读有关该工作的更多信息。

裸机 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

你可以在 Embedded Rust book 中阅读更多关于使用 no_std 进行开发的信息。

稳定的 API

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

其他更改

Rust 1.62.0 版本中还有其他更改。查看 RustCargoClippy 中的更改内容。

1.62.0 的贡献者

许多人齐心协力创建了 Rust 1.62.0。没有你们大家,我们不可能做到。谢谢!