|
|
|
@ -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<T> {
|
|
|
|
|
#[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` 进行开发的信息。
|