Rust 团队很高兴宣布 Rust 的新版本 1.62.0。Rust 是一种编程语言,它使每个人都能构建可靠且高效的软件。
如果您之前通过 rustup 安装了 Rust 的旧版本,可以使用以下命令获取 1.62.0
$ rustup update stable
如果您还没有安装,可以从我们网站上的相应页面 获取 rustup
,并查看 GitHub 上的 1.62.0 的详细发布说明。
如果您想通过测试未来的版本来帮助我们,可以考虑将本地更新到 beta 频道 (rustup default beta
) 或 nightly 频道 (rustup default nightly
)。请 报告您遇到的任何错误!
1.62.0 稳定版中的新内容
cargo add
您现在可以使用 cargo add
从命令行直接添加新的依赖项。此命令支持指定特性和版本。它还可以用于修改现有依赖项。
例如
cargo add log
cargo add serde --features derive
cargo add nom@5
有关更多信息,请参阅 cargo 文档。
#[default]
枚举变体
如果您指定了默认变体,现在可以在枚举上使用 #[derive(Default)]
。例如,到目前为止,您必须手动为该枚举编写 Default
实现
#[derive(Default)]
enum Maybe<T> {
#[default]
Nothing,
Something(T),
}
从现在开始,只有“单元”变体(没有字段的变体)才能标记为 #[default]
。有关此功能的更多信息,请参阅 RFC。
Linux 上更轻薄、更快的互斥锁
以前,Mutex
、Condvar
和 RwLock
在 Linux 上由 pthreads 库支持。pthreads 锁支持比 Rust API 本身更多的功能,包括运行时配置,并且旨在用于在静态保证比 Rust 提供的更少的语言中使用。
例如,互斥锁实现为 40 字节,不能移动。这迫使标准库在幕后为使用 pthreads 的平台上的每个新互斥锁分配一个 Box
。
Rust 的标准库现在在 Linux 上附带了这些锁的基于原始 futex 的实现,它非常轻量级,不需要额外的分配。在 1.62.0 中,Mutex
在 Linux 上只需要 5 字节用于其内部状态,尽管这可能会在将来的版本中发生变化。
这是为了提高 Rust 锁类型的效率而进行的一项长期努力的一部分,其中包括以前在 Windows 上的改进,例如取消其原语的装箱。您可以在 跟踪问题 中阅读有关该努力的更多信息。
x86_64
目标
裸机 现在更容易为 x86_64
构建无操作系统二进制文件,例如在编写内核时。 x86_64-unknown-none
目标 已提升至 第 2 层,可以使用 rustup 安装。
$ rustup target add x86_64-unknown-none
$ rustc --target x86_64-unknown-none my_no_std_program.rs
您可以在 嵌入式 Rust 手册 中阅读有关使用 no_std
进行开发的更多信息。
稳定化的 API
以下方法和特征实现现已稳定
bool::then_some
f32::total_cmp
f64::total_cmp
Stdin::lines
windows::CommandExt::raw_arg
impl<T: Default> Default for AssertUnwindSafe<T>
From<Rc<str>> for Rc<[u8]>
From<Arc<str>> for Arc<[u8]>
FusedIterator for EncodeWide
- aarch64 上的 RDM 内在函数
其他更改
Rust 1.62.0 版本中还有其他更改。查看 Rust、Cargo 和 Clippy 中的更改。
1.62.0 的贡献者
许多人共同创建了 Rust 1.62.0。没有你们,我们不可能做到。 谢谢!