Merge pull request #948 from AllanDowney/patch1

add 1.62 release note
pull/953/head
Sunface 2 years ago committed by GitHub
commit ce15261638
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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)

@ -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` 进行开发的信息。
Loading…
Cancel
Save