Rust 1.80.0 发布


Rust 1.80.0 稳定版现已发布,主要带来以下变化:

LazyCellLazyLock

新的“lazy”类型将值的初始化延迟到首次访问,它们类似于1.70 中稳定的OnceCellOnceLock类型,但单元格中包含了初始化函数。这完成了从流行的和板条箱中采用到标准库中的功能的稳定化。完成了从lazy_staticonce_cellcrates 到标准库中所采用功能的稳定化。

LazyLock 是线程安全选项,适用于static values 等地方。

use std::sync::LazyLock;
use std::time::Instant;

static LAZY_TIME: LazyLock<Instant> = LazyLock::new(Instant::now);

fn main() {
let start = Instant::now();
std::thread::scope(|s| {
s.spawn(|| {
println!("Thread lazy time is {:?}", LAZY_TIME.duration_since(start));
});
println!("Main lazy time is {:?}", LAZY_TIME.duration_since(start));
});
}

LazyCell 缺乏线程同步,因此没有实现static所需的 Sync,但仍可用于thread_local! statics。Rust团队表示,根据线程安全的需要,这两种类型也可用于其他数据结构,因此 lazy initialization 在任何地方都可用。

Checked cfg names and values

在 1.79 中,rustc稳定了一个--check-cfgflag,现在 Cargo 1.80 正在对其知道的所有cfg名称和值启用这些检查(除了来自rustc的众所周知的名称和值)。包括来自Cargo.toml的功能名称以及来自构建脚本的新cargo::rustc-check-cfgoutput。

unexpected_cfgs会被 warning-by-default unexpected_cfgs lint 报告,用于捕获拼写错误或其他错误配置。例如,在具有可选rayon依赖项的项目中,此代码配置了错误的feature值:

fn main() {
println!("Hello, world!");

#[cfg(feature = "crayon")]
rayon::join(
|| println!("Hello, Thing One!"),
|| println!("Hello, Thing Two!"),
);
}
warning: unexpected `cfg` condition value: `crayon`
 --> src/main.rs:4:11
|
4 | #[cfg(feature = "crayon")]
| ^^^^^^^^^^--------
| |
| help: there is a expected value with a similar name: `"rayon"`
|
= note: expected values for `feature` are: `rayon`
= help: consider adding `crayon` as a feature in `Cargo.toml`
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
= note: `#[warn(unexpected_cfgs)]` on by default

无论实际的rayon功能是否启用,都会报告相同的警告。

还可以使用Cargo.toml清单中的[lints]表来扩展自定义cfg的已知名称和值列表。rustc会自动提供警告中使用的语法。

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(foo, values("bar"))'] }

可以在之前的博客文章中阅读有关此功能的更多信息。

Exclusive ranges in patterns

Rust ranged 模式现在可以使用 exclusive endpoints,写成a..b..b,类似于Range 和 RangeTo表达式类型。例如,以下模式现在可以在一个模式的终点和下一个模式的起点使用相同的常量:

pub fn size_prefix(n: u32) -> &'static str {
const K: u32 = 10u32.pow(3);
const M: u32 = 10u32.pow(6);
const G: u32 = 10u32.pow(9);
match n {
..K => "",
K..M => "k",
M..G => "M",
G.. => "G",
}
}

Exclusive ranges 一直以来作为一个不稳定的功能提供。Rust 团队表示,阻碍因素在于它们可能会增加混乱并增加模式中出现 off-by-one errors 的可能性。在 Rust 1.80 中,exhaustiveness checking 得到了增强,可以更好地检测模式匹配中的差距,新的 lintnon_contiguous_range_endpointsoverlapping_range_endpoints将有助于检测在哪些情况下需要将 exclusive 模式切换为 inclusive 模式,反之亦然。

Rust 1.80 还稳定了许多 API,详情可查看官方公告。


相關推薦

2022-08-13

Boost 是一套用于 C++ 编程语言的库,为线性代数、伪随机数生成、多线程、图像处理、正则表达式和单元测试等任务和结构提供支持。它包含了 164 个单独的库(截至 1.76 版)。 已知问题 这些是库的作者提出的补丁,由于发现

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 的实际硬件