Posted in

Rust 1.80 添加延迟类型_AI阅读总结 — 包阅AI

包阅导读总结

1. 关键词:Rust 1.80、Lazy Statics、开区间、初始化、lint 警告

2. 总结:Rust 1.80 提供 Lazy Statics 稳定支持,稳定了 LazyCell 和 LazyLock 用于延迟数据初始化,支持模式匹配中的开区间,引入相关 lint 警告,还支持不带命名参数的可变函数,稳定许多 API 并带来诸多变更。

3. 主要内容:

– Rust 1.80 版本

– 稳定支持 Lazy Statics

– 稳定 LazyCell 和 LazyLock,可延迟数据初始化

– LazyLock 线程安全,OnceCell 和 OnceLock 也能延迟初始化

– 支持模式匹配中的开区间

– 引入新 lint 降低“差一错误”可能性

– 语言变更

– 支持不带命名参数的可变函数,更接近 C23

– 稳定许多 API ,还有其他变更,详情见官方发布说明

思维导图:

文章地址:https://mp.weixin.qq.com/s/zkNdujL6tKrEFPVxwpi8hQ

文章来源:mp.weixin.qq.com

作者:InfoQ 中文

发布时间:2024/8/11 2:09

语言:中文

总字数:1157字

预计阅读时间:5分钟

评分:88分

标签:Rust,编程语言,延迟初始化,模式匹配,并发编程


以下为原文内容

本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com

Rust 1.80 稳定了LazyCellLazyLock。借助这两个新类型,开发人员可以将数据的初始化延迟到第一次访问时。该版本提供了对开区间的支持以及一些相关的 lint 警告。为了与 C23 兼容,该版本允许使用不带命名参数的可变函数。此外,它还稳定了许多 API。

LazyCellLazyLock可以延迟共享数据的初始化,其中LazyLock是线程安全的。类似地,OnceCellOnceLock(支持共享数据的一次性初始化,在 Rust 1.70 中已稳定)也可以用于延迟初始化,只是不那么符合人体工程学。

以下代码使用LazyLock定义一个延迟初始化的全局变量:

use std::sync::LazyLock;
static G_INT: LazyLock<u8> = LazyLock::new(|| 100);
fn main() { let x = *G_INT; }

OnceLock的语法中,你定义一个值而不显式地对其进行初始化。取而代之,你可以在第一次访问它时使用OnceLock::get_or_init()函数:

use std::sync::OnceLock;
static G_INT: OnceLock<u8> = OnceLock::new();
fn main() { let x = *G_INT.get_or_init(|| 100); }

OnceLockOnceCell的用途与Lazy*不同,它们是为了确保一个值只初始化一次。使用它们延迟初始化时,你需要在访问它们的每个地方都使用相同的初始化语句,这很麻烦。在这 4 种类型中,LazyLock是你在大多数情况下都可以安全地使用的一种类型;如果你想要消除任何与并发相关的开销,则可以使用LazyCellOnceLockOnceCell可以方便你灵活地处理初始化逻辑,支持更复杂的用例。

该版本还对该语言做了另外一项有用的补充,就是在模式匹配中支持开区间。在 1.80 版本之前,Rust 只支持闭区间,写为a..=b..=b。现在,你也可以使用a..b..b了。有了这项支持,你可以这样写:

    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",    }

为了降低“差一错误”的可能性,Rust 1.80 引入了两个新的 lint:non_continuous_range_endpointsoverlapping_range_endpoints,它们可以在现有代码采用开区间模式时检测错误。

Rust 1.80 还在语言、编译器和标准库中引入了许多其他的变更。一个很小但值得注意的新特性是,支持不带命名参数的可变函数。这相当于删除了一个不允许此类函数的静态检查,使得该语言更接近支持该语法的 C23。

要了解关于 Rust 1.80 中所有新功能和稳定性的详细信息,可以查阅官方的发布说明。

原文链接:

https://www.infoq.com/news/2024/08/rust-1-80-lazy-globals/

声明:本文为 InfoQ 翻译,未经许可禁止转载。