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
库支持 Mutex
、Condvar
和 RwLock
。 pthreads 锁
支持比 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
进行开发的信息。