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 版别:

$rustupupdatestable

假如还没有装置,能够从网站上的相应页面获取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特点(如下所示):

#![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 功用:凭证供给者通过身份验证的私有注册表(registry)

凭证供给者答应装备 Cargo 获取注册表(registry)凭证的办法,并为 Linux、macOS 和 Windows 供给了内置的安全密钥存储供给者。此外,还能够编写自定义供给者以支撑各种存储或生成令牌的办法。别的,还能够编写自定义供给程序来支撑存储或生成令牌的恣意办法。运用安全凭证供给程序可下降注册表令牌泄漏的危险。

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

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

不透明回来类型中的投影

假如你从前收到过下面这个过错:

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),由于其最初的实现无法正确处理捕获的生命期,在修复了捕获的生命期处理后,该功用被给予时间来保证其健全性。

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

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升级的更多信息,能够查阅: