diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 753d6402..e29057bc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -341,4 +341,4 @@ - [1.59](appendix/rust-versions/1.59.md) - [1.60](appendix/rust-versions/1.60.md) - [1.61](appendix/rust-versions/1.61.md) - + - [1.62](appendix/rust-versions/1.62.md) diff --git a/src/appendix/rust-versions/1.62.md b/src/appendix/rust-versions/1.62.md new file mode 100644 index 00000000..a8de75e2 --- /dev/null +++ b/src/appendix/rust-versions/1.62.md @@ -0,0 +1,60 @@ +# 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](https://github.com/AllanDowney) + +通过 [rustup](https://www.rust-lang.org/tools/install) 安装的同学可以使用以下命令升级到 1.62 版本: + +```shell +$ rustup update stable +``` + +## Cargo add + +现在可以使用 `cargo add` 直接从命令行添加新的依赖项。此命令支持指定功能和版本。它还可以用来修改现有的依赖关系。 + +例如: + +```rust +$ cargo add log +$ cargo add serde --features derive +$ cargo add nom@5 +``` + +有关更多信息,请参阅 [cargo 文档](https://doc.rust-lang.org/nightly/cargo/commands/cargo-add.html)。 + +## `#[default]` 枚举变量 + +如果指定枚举默认变量,现在可以使用 `#[derive(Default)]`。例如,到目前为止,您必须手动为此枚举写入 `Default` : + +```rust +#[derive(Default)] +enum Maybe { + #[default] + Nothing, + Something(T), +} +``` + +到目前为止,只允许将“单元”变量(没有字段的变量)标记为#[default]。[RFC](https://rust-lang.github.io/rfcs/3107-derive-default-enum.html) 中提供了有关此功能的更多信息。 + +## 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 上的改进,如取消绑定其原语。您可以在[跟踪问题](https://github.com/rust-lang/rust/issues/93740)中了解更多有关这方面的信息。 + +## 裸机 `x86_64` 构架 + +现在更容易为 `x86_64` 构建无操作系统的二进制文件,例如在编写内核时。`x86_64-unknown-none` 构架已升级到第 2 层,可以用 `rustup` 安装。 + +```rust +$ rustup target add x86_64-unknown-none +$ rustc --target x86_64-unknown-none my_no_std_program.rs +``` + +您可以在 [Embedded Rust book](https://docs.rust-embedded.org/book/intro/no-std.html) 中阅读更多关于使用 `no_std` 进行开发的信息。