Rust 团队很高兴地宣布新版本的 Rust,1.62.0。Rust 是一门赋能每个人构建可靠且高效软件的编程语言。
如果你之前已经通过 rustup 安装了 Rust,你可以使用以下命令获取 1.62.0:
$ rustup update stable
如果你还没有安装,可以从我们网站的对应页面获取 rustup,并在 GitHub 上查阅 1.62.0 的详细发布说明。
如果你想通过测试未来版本来帮助我们,可以考虑在本地更新使用 beta channel (rustup default beta) 或 nightly channel (rustup default nightly)。请报告你可能遇到的任何 bug!
1.62.0 stable 中有什么?
cargo add
你现在可以使用 cargo add 直接从命令行添加新的依赖项。此命令支持指定特性(features)和版本。它也可以用于修改现有依赖项。
例如
cargo add log
cargo add serde --features derive
cargo add nom@5
更多信息请参阅 Cargo 文档。
#[default] 枚举变体
如果你指定一个默认变体,现在可以在枚举上使用 #[derive(Default)]。例如,到目前为止,你必须手动为这个枚举编写 Default 实现
目前,只有“单元”变体(即没有字段的变体)允许被标记为 #[default]。此特性的更多信息可在相应的 RFC 中找到。
Linux 上更精简、更快的 Mutex
以前,Linux 上的 Mutex、Condvar 和 RwLock 是由 pthreads 库支持的。pthreads 锁支持比 Rust API 本身更多的功能,包括运行时配置,并且它们被设计用于静态保证少于 Rust 的语言。
例如,mutex 的实现大小为 40 字节,并且不能移动。这迫使标准库在使用 pthreads 的平台上为每个新的 mutex 在幕后分配一个 Box。
Rust 的标准库现在在 Linux 上附带了一个基于原始 futex 的这些锁的实现,它非常轻量,不需要额外的分配。在 1.62.0 中,Mutex 在 Linux 上只需要 5 字节用于其内部状态,尽管这在未来版本中可能会改变。
这是改进 Rust 锁类型效率的长期工作的一部分,其中包括之前在 Windows 上进行的改进,例如解除对其原语的装箱(unboxing)。你可以在跟踪 Issue 中阅读更多关于这项工作的信息。
裸机 x86_64 目标
现在为 x86_64 构建无操作系统的二进制文件更容易了,例如在编写内核时。x86_64-unknown-none 目标已升级到 Tier 2,并且可以使用 rustup 安装。
$ rustup target add x86_64-unknown-none
$ rustc --target x86_64-unknown-none my_no_std_program.rs
你可以在嵌入式 Rust 书籍中阅读更多关于使用 no_std 进行开发的信息。
稳定化的 API
以下方法和 trait 实现现已稳定化
bool::then_somef32::total_cmpf64::total_cmpStdin::lineswindows::CommandExt::raw_argimpl<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 的发布。没有你们,我们不可能做到。感谢你们!