发布 Rust 1.74.0

2023 年 11 月 16 日 · Rust 发布团队

Rust 团队很高兴宣布 Rust 的新版本 1.74.0。Rust 是一门赋予每个人构建可靠且高效软件能力的编程语言。

如果你之前通过 rustup 安装了 Rust,可以通过以下命令获取 1.74.0:

$ rustup update stable

如果你还没有安装,可以在我们的网站上从相应的页面获取 rustup,并在 GitHub 上查看 1.74.0 的详细发布说明

如果你想通过测试未来的版本来帮助我们,可以考虑在本地更新以使用 beta 通道 (rustup default beta) 或 nightly 通道 (rustup default nightly)。请报告你可能遇到的任何错误!

1.74.0 stable 版本包含的内容

通过 Cargo 配置 Lint

根据 RFC 3389 的提议,Cargo.toml 清单文件现在支持一个 [lints] 表,用于配置来自编译器和其他工具的 lint 报告级别(forbid, deny, warn, allow)。因此,不再需要通过设置会影响整个构建的 RUSTFLAGS-F/-D/-W/-A,或者使用 crate 级别的属性,例如:

#![forbid(unsafe_code)]
#![deny(clippy::enum_glob_use)]

你现在可以在你的包清单文件中编写这些配置,由 Cargo 进行处理:

[lints.rust]
unsafe_code = "forbid"

[lints.clippy]
enum_glob_use = "deny"

这些配置也可以在 [workspace.lints] 表中进行设置,然后像许多其他工作空间设置一样,通过 [lints] workspace = true 进行继承。Cargo 在决定哪些 crate 需要重新构建时,也会跟踪这些设置的变化。

更多信息请参阅 Cargo 参考手册中关于 lintsworkspace.lints 的章节。

Cargo 注册表认证

此版本还包含另外两个相关的 Cargo 特性:凭据提供者和认证的私有注册表。

凭据提供者允许配置 Cargo 如何获取注册表的凭据。内置的提供者支持在 Linux、macOS 和 Windows 上进行操作系统特定的安全密文存储。此外,还可以编写自定义提供者来支持任意的存储或生成令牌的方法。使用安全的凭据提供者可以降低注册表令牌泄露的风险。

注册表现在可以选择性地要求对所有操作进行认证,而不仅仅是发布。这使得私有的 Cargo 注册表能够提供更安全的 crate 托管服务。使用私有注册表需要配置凭据提供者。

更多信息请参阅 Cargo 文档

不透明返回类型中的投影

如果你曾收到过“返回类型不能包含引用父作用域生命周期的投影或 Self”的错误,那么你现在可以安心了!编译器现在允许在不透明返回类型中提及 Self 和关联类型,例如 async fn-> impl Trait。即使你对“投影”这样的术语一无所知,这个特性也能让 Rust 的行为更接近你可能预期的工作方式。

此功能之前有一个不稳定的特性门(feature gate),因为其实现最初未能正确处理捕获的生命周期;修复后,经过了一段时间的测试以确保其健全性。有关更多技术细节,请参阅 稳定化拉取请求,其中描述了现在都已允许的以下示例:

struct Wrapper<'a, T>(&'a T);

// Opaque return types that mention `Self`:
impl Wrapper<'_, ()> {
    async fn async_fn() -> Self { /* ... */ }
    fn impl_trait() -> impl Iterator<Item = Self> { /* ... */ }
}

trait Trait<'a> {
    type Assoc;
    fn new() -> Self::Assoc;
}
impl Trait<'_> for () {
    type Assoc = ();
    fn new() {}
}

// Opaque return types that mention an associated type:
impl<'a, T: Trait<'a>> Wrapper<'a, T> {
    async fn mk_assoc() -> T::Assoc { /* ... */ }
    fn a_few_assocs() -> impl Iterator<Item = T::Assoc> { /* ... */ }
}

稳定化的 API

这些 API 现在在 const 上下文中是稳定的

兼容性说明

  • 之前宣布,Rust 1.74 提高了对 Apple 平台的要求。最低版本现在是:
    • macOS: 10.12 Sierra (首次发布于 2016 年)
    • iOS: 10 (首次发布于 2016 年)
    • tvOS: 10 (首次发布于 2016 年)

其他变化

查看 RustCargoClippy 中的所有变化。

1.74.0 的贡献者

许多人共同努力创造了 Rust 1.74.0。没有你们所有人,我们不可能完成它。感谢!