作者 | 德

翻译者 |平川县

策展 |甲基 ***

锈蚀1.80稳定下来的。使用这两种新类型,开发人员可以将数据的初始化推迟到之一次访问。此版本提供了对打开隔间的支持以及一些相关的 lint 警告。为了与 C23 兼容,此版本允许使用不带命名参数的可变函数。此外,它还稳定了许多 API。

而且,您可以延迟共享数据的初始化,这是线程安全的。同样,and(支持共享数据的一次性初始化,在 Rust 1.70 中是稳定的)也可以用于延迟初始化,只是不太符合人体工程学。

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

use std::sync::LazyLock;
static G_INT: LazyLock = LazyLock::new(|| 100);
fn main() { let x = *G_INT; // 初始化发生在这里 // ...}

在语法中,您可以定义一个值,而无需显式初始化它。相反,您可以使用 ::() 函数:

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

sum 的用途与 Lazy* 不同,它们用于确保值仅初始化一次。当使用它们进行延迟初始化时,您需要在访问它们的任何地方使用相同的初始化语句1.80,这很麻烦。在这 4 种类型中,您可以在大多数情况下安全使用一种;如果您想消除任何与并发相关的开销,您可以使用它;并允许您灵活处理初始化逻辑,以支持更复杂的用例。

该语言的另一个有用的补充是支持模式匹配中的间隔间隔。在 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引入了两个新的 lints:AND,当现有代码处于开放间隔模式时,它可以检测错误。

Rust 1.80 还对语言、编译器和标准库进行了许多其他更改。一个小而值得注意的新功能是支持没有命名参数的 。这相当于删除了不允许此类函数的静态检查,使语言更接近支持语法的 C23。

要了解有关 Rust 1.80 中的所有新功能和稳定性的更多信息,请查看官方发行说明。

原文链接:

未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处天心神途传奇手游发布网

原文地址:《1.80 Rust 1.80 为 Lazy Statics 提供了稳定的支持,并支持在模式匹配中使用开放间隔》发布于:2024-08-14

发表评论

表情:
验证码
评论列表 (暂无评论,27人围观)

还没有评论,来说两句吧...