Rust 团队很高兴地宣布 Rust 的新版本 1.74.0。Rust 是一种编程语言,使每个人都能构建可靠和高效的软件。
如果您通过 rustup 安装了以前版本的 Rust,您可以通过以下方式获得 1.74.0:
rustup update stable
如果您还没有它,您可以从我们网站上的相应页面获取 rustup
,并在 GitHub 上查看 1.74.0 的详细发行说明。
如果您想通过测试未来的版本来帮助我们,可以考虑在本地更新以使用 beta 频道 () 或夜间频道 ()。请报告您可能遇到的任何错误!rustup default beta
rustup default nightly
1.74.0 稳定版中的内容
通过 Cargo 进行 Lint 配置
如 RFC 3389 中所建议, 清单现在支持一个表来配置 来自编译器的 lint 的报告级别(禁止、拒绝、警告、允许)和 其他工具。因此,与其使用 /// 进行设置,不如使用 ///, 会影响整个构建,或者使用板条箱级别的属性,例如:Cargo.toml
[lints]
RUSTFLAGS
-F
-D
-W
-A
#![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 功能: 凭据 提供程序和经过身份验证的私有注册表。
凭证提供程序允许配置 Cargo 如何获取凭证 注册表。内置提供程序可用于特定于操作系统的安全机密存储 在 Linux、macOS 和 Windows 上。此外,自定义提供程序可以写入 支持存储或生成令牌的任意方法。使用安全 凭据提供程序可降低注册表令牌泄漏的风险。
注册表现在可以选择要求对所有操作进行身份验证,而不是 只是发布。这使私人货物登记处能够提供更安全的服务 托管板条箱。使用私有注册表需要配置 凭据提供程序。
有关详细信息,请参阅 Cargo 文档。
不透明返回类型中的投影
如果您曾经收到过“返回类型不能包含 投影或引用父范围的生存期“,您可以 现在高枕无忧了!编译器现在允许提及和 不透明返回类型中的关联类型,如 和 。 这种特性使 Rust 更接近你所期望的工作方式,即使你对“投影”等行话一无所知。Self
Self
async fn
-> impl Trait
此功能具有不稳定的功能门,因为它的实现 最初没有正确处理捕获的生命周期,而一旦 修复了它,有时间确保它是健全的。有关更多技术细节, 请参阅稳定拉取请求,其中描述了以下内容 现在允许的示例:
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
core::num::Saturating
impl From<io::Stdout> for std::process::Stdio
impl From<io::Stderr> for std::process::Stdio
impl 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_unchecked
std::ffi::OsString::into_encoded_bytes
std::ffi::OsStr::from_encoded_bytes_unchecked
std::ffi::OsStr::as_encoded_bytes
std::io::Error::other
impl TryFrom<char> for u16
impl<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。没有你们所有人,我们不可能做到这一点。谢谢!