Rust 资讯:Rust 1.74.0 正式版发布

Rust 资讯:Rust 1.74.0 正式版发布

Rust 团队日前发布了 Rust 的新版本 ------ 1.74.0 正式版,Rust 是一种强大的编程语言,使开发者能够构建可靠、高效的软件。这个新版本带来了几个重要的功能和改进。以下是重点总结:

关于 1.74.0 有关新特性可查看:blog.rust-lang.org/2023/11/16/...

如果已经安装了以前版本的 Rust,可以通过以下命令升级到 1.74.0 版本:

$ rustup update stable

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

1.74.0 稳定版中有什么

通过 Cargo 进行 Lint 配置

根据 RFC 3389的建议,Rust 1.74.0 引入了一项新功能,允许通过 Cargo.toml 文件进行 Lint 配置。现在,清单中的 lints 表支持设置来自编译器和其他工具的 Lint 报告级别(forbid、deny、warn、allow),这提供了更细粒度的控制,有助于提高代码质量。不再需要通过设置 RUSTFLAGS 为 -F/-D/-W/-A 来影响整个构建 ,或者使用 crate-level 属性(如下所示):

rust 复制代码
#![forbid(unsafe_code)]
#![deny(clippy::enum_glob_use)]

您现在可以将这些写入包清单中以供 Cargo 处理:

toml 复制代码
[lints.rust]
unsafe_code = "forbid"

[lints.clippy]
enum_glob_use = "deny"

这些设置也可以在 [workspace.lints] 表中配置,然后通过 [lints] workspace = true 继承。Cargo 在决定需要重新构建哪些 crate 时,还将跟踪这些设置的更改。

有关更多详细信息,请参阅 Cargo 参考手册的 lintsworkspace.lints 部分。

Cargo 注册表认证

此版本包含了两个重要的 Cargo 功能:凭据提供者经过身份验证的私有注册表(registry)

凭据提供者允许配置 Cargo 获取注册表(registry)凭据的方式,并为 Linux、macOS 和 Windows 提供了内置的安全密钥存储提供者。此外,还可以编写自定义提供者以支持各种存储或生成令牌的方法。另外,还可以编写自定义提供程序来支持存储或生成令牌的任意方法。使用安全凭据提供程序可降低注册表令牌泄漏的风险。

现在,注册表(registry)可以选择在所有操作中要求身份验证,而不仅仅是发布操作。这使得私有 Cargo 注册表能够更安全地托管 crates。使用私有注册表需要配置凭据提供程序,这提高了私有 Cargo 注册表(registry)的安全性。

有关更多详细信息,请参阅 Cargo 文档

不透明返回类型中的投影

如果你曾经收到过下面这个错误:

rust 复制代码
return type cannot contain a projection or Self that references lifetimes from a parent scope

那么现在可以不用担心了,Rust 1.74.0 对不透明返回类型进行了改进,编译器现在允许在不透明的返回类型(如 async fn-> impl Trait )中使用Self 和关联类型。这种特性使 Rust 更接近你所期望的工作方式,即使你没有听说过"投影"这个术语。

该功能以前具有不稳定的功能开关(Unstable Feature Gate),因为其最初的实现无法正确处理捕获的生命期,在修复了捕获的生命期处理后,该功能被给予时间来确保其健全性。

有关更多技术细节,请参阅请参阅稳定拉取请求,其中描述了现在允许的以下示例:

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,包括 core::num::Saturatingstd::process::{Stdio, Child} 的转换方法,以及 std::ffi::OsStringstd::ffi::OsStr 的各种方法。这些稳定的 API 为开发者提供了更可靠和可预测的行为。

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

兼容性说明

  • Rust 1.74 提高了对 Apple 平台的最低要求。现在最低版本是:

    • macOS:10.12 Sierra(2016 年首次发布)
    • iOS:10(2016 年首次发布)
    • tvOS:10(2016 年首次发布)

开发者在目标平台上开发时,应确保满足新的要求。

其他变化

了解更多有关RustCargoClippy,的所有变化的详细信息,请参阅完整的发布说明

致敬贡献者

许多人齐心协力创建了 Rust 1.74.0。没有你们所有人,我们不可能做到这一点。谢谢所有人

官方资料

关于1.74.0 升级的更多信息,可以查阅:

相关推荐
老王生涯10 分钟前
rust开发环境配置-Windows & GNU
开发语言·windows·rust
Yeauty14 分钟前
自建 HLS 第一问:fMP4 还是 TS?用 Rust 在进程内把两种都跑出来
开发语言·后端·rust
Flynt2 小时前
我用Biome替换ESLint+Prettier在项目上踩了不少坑
rust·eslint·前端工程化
Yeauty2 小时前
2026 年在 Rust 里处理音视频,该走哪条路?
rust·ffmpeg·音视频·视频
TDengine (老段)20 小时前
TDengine Go 与 Rust 连接器 — 高性能异步访问
大数据·数据库·物联网·golang·rust·时序数据库·tdengine
魔力女仆1 天前
【RUST AI】把 TTS 搬进浏览器:kokoroi-rs 的 WASM 实践
人工智能·rust·wasm
米尔的可达鸭1 天前
UDP 通信深度实验:从 Windows FastPath 到 ICMP 端口不可达的完整排查
windows·websocket·网络协议·rust·udp·wireshark·tcpdump
jinshw1 天前
自己实现GIS配图软件(二)
前端·后端·rust
行走的陀螺仪1 天前
从 nvm 到 fnm:更快、更省心的 Node.js 版本管理器迁移指南
rust·node.js·nvm·fnm
逻极2 天前
Rust 从入门到精通:内存安全与高性能系统编程实战
rust·系统编程·性能·内存安全