Rust 1.74.0 发布


Rust 1.74.0 稳定版已正式发布,主要带来以下变化:

通过 Cargo 进行 Lint 配置

正如 RFC 3389 所提议,Cargo.tomlmanifest 现在支持一个[lints]表来配置来自编译器和其他工具的 lints 的报告级别(禁止、拒绝、警告、允许)。因此,不要使用-F/-D/-W/-A设置 RUSTFLAGS(这会影响整个构建过程),或者使用 crate-level 的属性,例如:

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

现在可以将这些写入 package manifest 中以供 Cargo 处理:

[lints.rust]
unsafe_code = "forbid"

[lints.clippy]
enum_glob_use = "deny"

这些也可以在[workspace.lints]表中配置,然后像许多其他工作区设置一样由[lints] workspace = true继承。在决定哪些 crates 需要重建时,Cargo 还将跟踪这些设置的更改。

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

Cargo Registry Authentication

此版本中还包含两个相关的 Cargo 功能:credential providers 和 authenticated private registries。

Credential providers 允许配置 Cargo 如何获取注册表的凭证。Built-in providers 用于 Linux、macOS 和 Windows 上特定于操作系统的安全秘密存储。此外,可以编写自定义 providers 来支持存储或生成令牌的任意方法。使用安全的 credential provider 可以降低注册表令牌泄漏的风险。

Registries 现在可以选择要求对所有操作进行身份验证,而不仅仅是发布。这使得 private Cargo registries 能够提供更安全的 crates 托管。使用 private registries 需要配置 credential provider。

有关更多信息,可参阅 Cargo 文档。

Projections in opaque return types

有关返回“return type cannot contain a projection or Self that references lifetimes from a parent scope”错误信息的问题现在已经解决。编译器现在允许在 opaque return types 中提及Self和关联类型,例如async fn-> impl Trait。即使你对"projection"之类的术语一无所知,这种功能也能让 Rust 更接近你所期望的工作方式。

不过该功能目前有一个不稳定的 feature gate,因为它的实现最初没有正确处理 captured lifetimes。有关更多技术细节,可参阅 stabilization pull request。示例:

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> { /* ... */ }
}

Stabilized APIs

  • 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 contexts 中是稳定的:

  • core::mem::transmute_copy
  • str::is_ascii
  • [u8]::is_ascii

兼容性说明

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

其他变化

查看 Rust、Cargo 和 Clippy 中发生的所有变化。

详情可查看官方公告


相關推薦

2023-07-18

近日,Rust开源社区发布1.71.0版本,实现对龙架构(LoongArch)指令集的原生支持。 龙架构操作系统发行版和开发者可基于上游社区源代码构建或直接下载Rust开源社区发布的龙架构二进制版本。Rust开发者将在龙架构平台上获得良

2023-11-18

过通常的批准流程(例如语言 FCP)才能出现在规范的已发布(非草案)版本中。 语言和规范团队应努力拥有至少一名共同成员(例如 Felix)充当联络人,以帮助确保我们对次要变更与重大变更的理解保持同步。 目标 规范

2023-08-12

Rust通用代码生成器莲花尝鲜版七发布最新视频,赢得高冷的Rust公主的垂青 Rust通用代码生成器莲花尝鲜版七已发布最新介绍视频,详细解释了sqlx从0.3.5升级到0.7.1和消除90%的编译警告的具体情况。并且详细解释了Rust代码生成物

2023-08-02

rust-foundation-report-security-initiative-progress Rust 基金会发布了首份安全计划报告,详细介绍了最近的 Rust 安全重点领域、里程碑和即将推出的计划。Rust 基金会的安全计划于 2022 年 9 月创建,旨在支持和推进 Rust 编程语言生态系统内

2023-06-22

调解团队成员)、@Mark-Simulacrum(基金会核心项目主管,发布团队负责人)、@rylev(基金会核心项目主管)、@technetos(调解团队成员)和@yaahc(基金会合作项目主管)共同撰写。 而 Rust 项目的大部分发展和维护工作(例如编译

2021-11-24

Rust 审核团队 (Moderation Team) 昨日发布公告称,他们已集体辞职且即刻生效。团队成员 Andrew Gallant 表示此举是为了抗议 Rust 核心团队 (Core Team) 不对除自己以外的任何人负责。 Andrew Gallant 在公告中写道,由于核心团队在组织

2023-04-27

第一个官方 GCC 13 版本即将发布,但 GCC 的 Rust 前端项目 gccrs 却不会如期出现在此版本中。 去年 12 月,Gccrs 被批准合并到 GCC 主线,所有 gccrs 代码也都被合并到了 GCC 13 上游代码库中。但时至今日,编译器仍未就支持 Rust 做好

2022-09-18

将目标合并到上游的最低分类级别。但 Tier-3 目标在 Rust 发布渠道中缺乏官方编译器构建,缺乏 Rust持续集成 (CI) 保证,并迫使用户使用 nightly/unstable 的编译器构建。 David 希望将 Rust UEFI target 提升到 Tier 2,这样他们就可以

2023-04-29

,微软 Azure 首席技术官 Mark Russinovich 还曾在社交平台上发布动态呼吁,开发人员应该更多的使用 Rust 而不是 C/C++ 来启动新项目。 另一方面,虽然用 Rust 重写 Windows 不会很快发生,但微软对 Rust 的支持或使开源社区受益。开

2024-08-18

标,代表预计将产生最广泛整体影响的目标。包括: 发布 Rust 2024 版本。2024 版计划进行的修改包括:通过调整捕获行为,支持-> impl Trait 和 async fn;通过保留gen keyword,允许在未来添加(async)生成器,以及更改

2024-04-04

的 Rust 代码正准备升级到 Rust 1.78,该版本将在一个月后发布为稳定版。 虽然Rust 1.78要到5月初才会发布,不过由米格尔-奥赫达(Miguel Ojeda)领导的Rust Linux内核开发人员已经在为下一次升级做准备了。 随着向 Rust 1.78 的转变,

2023-03-26

Rust 团队于近日发布了 Rust 1.68.1 新版本,1.68.1 是一个错误修复版本,主要更新内容如下: Rust 1.68.1 稳定版主要包含对 Rust 的 CI 构建 Windows MSVC 编译器方式的改变,不再为 Rust 代码启用 LTO。 目前认为这对 ThinLTO 的广泛使用没

2023-06-06

动程序。 据介绍,长期内核开发者 Fujita Tomonori 在周日发布了这组补丁,包括提供网络设备驱动程序的 Rust 抽象和    初始的 Rust 虚拟驱动程序,以帮助审查早期代码。到目前为止,网络子系统中 Rust 的实际硬件

2024-09-26

直播亮点 Rust 的起源及关键里程碑,概述 Rust 语言自发布以来的一些重要版本和特性更新。 Rust 是怎么实现内存安全的,为什么会取代 C/C++ ? 除了操作系统之外,Rust 还适用哪些开发领域?其优势与挑战是什么? 从技术