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 稳定版中的新功能

通过 Cargo 进行 Lint 配置

正如 RFC 3389 中提出的那样,Cargo.toml 清单现在支持一个 [lints] 表来配置编译器和其他工具的 lint 报告级别(forbid、deny、warn、allow)。因此,无需使用 -F/-D/-W/-A 设置 RUSTFLAGS,这会影响整个构建,也无需使用 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”的错误,那么您现在可以放心了!编译器现在允许在不透明返回类型(例如 async fn-> impl Trait)中提及 Self 和关联类型。这种功能使 Rust 更接近您可能期望的工作方式,即使您不了解“投影”之类的术语。

此功能有一个不稳定的特性门,因为它的实现最初没有正确处理捕获的生命周期,并且一旦修复,就会留出时间来确保其可靠性。有关更多技术细节,请参阅稳定化拉取请求,其中描述了以下现在都允许的示例:

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。没有你们大家,我们不可能做到这一点。谢谢!