Rust 新版解读 | 1.62 | 重点: Cargo add,#[default] 枚举变量,Linux 上更薄更快的 Mutex,裸机 x86_64 构架

原文链接: https://blog.rust-lang.org/2022/06/30/Rust-1.62.0.html 翻译 by :AllanDowney

通过 rustup 安装的同学可以使用以下命令升级到 1.62 版本:

$ rustup update stable

Cargo add

现在可以使用 cargo add 直接从命令行添加新的依赖项。此命令支持指定功能和版本。它还可以用来修改现有的依赖关系。

例如:

#![allow(unused)]
fn main() {
$ cargo add log
$ cargo add serde --features derive
$ cargo add nom@5
}

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

#[default] 枚举变量

如果指定枚举默认变量,现在可以使用 #[derive(Default)]。例如,到目前为止,您必须手动为此枚举写入 Default

#![allow(unused)]
fn main() {
#[derive(Default)]
enum Maybe<T> {
    #[default]
    Nothing,
    Something(T),
}
}

到目前为止,只允许将“单元”变量(没有字段的变量)标记为#[default]。RFC 中提供了有关此功能的更多信息。

Linux 上更薄更快的 Mutex

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

例如,Mutex 实现是 40 个字节,不能被移动(move)。这迫使标准库在后台为使用 pthreads 的平台的每个新 Mutex 分配一个 Box

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

这是提高 Rust 的锁类型效率的长期努力的一部分,包括以前在 Windows 上的改进,如取消绑定其原语。您可以在跟踪问题中了解更多有关这方面的信息。

裸机 x86_64 构架

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

#![allow(unused)]
fn main() {
$ rustup target add x86_64-unknown-none
$ rustc --target x86_64-unknown-none my_no_std_program.rs
}

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