作者 | 德
翻译者 |平川县
策展 |甲基 ***
锈蚀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





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