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 级别的属性,例如:
你现在可以在你的包清单文件中编写这些配置,由 Cargo 进行处理:
[]
= "forbid"
[]
= "deny"
这些配置也可以在 [workspace.lints] 表中进行设置,然后像许多其他工作空间设置一样,通过 [lints] workspace = true 进行继承。Cargo 在决定哪些 crate 需要重新构建时,也会跟踪这些设置的变化。
更多信息请参阅 Cargo 参考手册中关于 lints 和 workspace.lints 的章节。
Cargo 注册表认证
此版本还包含另外两个相关的 Cargo 特性:凭据提供者和认证的私有注册表。
凭据提供者允许配置 Cargo 如何获取注册表的凭据。内置的提供者支持在 Linux、macOS 和 Windows 上进行操作系统特定的安全密文存储。此外,还可以编写自定义提供者来支持任意的存储或生成令牌的方法。使用安全的凭据提供者可以降低注册表令牌泄露的风险。
注册表现在可以选择性地要求对所有操作进行认证,而不仅仅是发布。这使得私有的 Cargo 注册表能够提供更安全的 crate 托管服务。使用私有注册表需要配置凭据提供者。
更多信息请参阅 Cargo 文档。
不透明返回类型中的投影
如果你曾收到过“返回类型不能包含引用父作用域生命周期的投影或 Self”的错误,那么你现在可以安心了!编译器现在允许在不透明返回类型中提及 Self 和关联类型,例如 async fn 和 -> impl Trait。即使你对“投影”这样的术语一无所知,这个特性也能让 Rust 的行为更接近你可能预期的工作方式。
此功能之前有一个不稳定的特性门(feature gate),因为其实现最初未能正确处理捕获的生命周期;修复后,经过了一段时间的测试以确保其健全性。有关更多技术细节,请参阅 稳定化拉取请求,其中描述了现在都已允许的以下示例:
;
// Opaque return types that mention `Self`:
// Opaque return types that mention an associated type:
稳定化的 API
core::num::Saturatingimpl From<io::Stdout> for std::process::Stdioimpl From<io::Stderr> for std::process::Stdioimpl From<OwnedHandle> for std::process::Child{Stdin, Stdout, Stderr}impl From<OwnedFd> for std::process::Child{Stdin, Stdout, Stderr}std::ffi::OsString::from_encoded_bytes_uncheckedstd::ffi::OsString::into_encoded_bytesstd::ffi::OsStr::from_encoded_bytes_uncheckedstd::ffi::OsStr::as_encoded_bytesstd::io::Error::otherimpl TryFrom<char> for u16impl<T: Clone, const N: usize> From<&[T; N]> for Vec<T>impl<T: Clone, const N: usize> From<&mut [T; N]> for Vec<T>impl<T, const N: usize> From<[T; N]> for Arc<[T]>impl<T, const N: usize> From<[T; N]> for Rc<[T]>
这些 API 现在在 const 上下文中是稳定的
兼容性说明
- 如之前宣布,Rust 1.74 提高了对 Apple 平台的要求。最低版本现在是:
- macOS: 10.12 Sierra (首次发布于 2016 年)
- iOS: 10 (首次发布于 2016 年)
- tvOS: 10 (首次发布于 2016 年)
其他变化
查看 Rust、Cargo 和 Clippy 中的所有变化。
1.74.0 的贡献者
许多人共同努力创造了 Rust 1.74.0。没有你们所有人,我们不可能完成它。感谢!