写点什么

Rust 1.80 提供 Lazy Statics 稳定支持,并支持在模式匹配中使用开区间

  • 2024-08-23
    北京
  • 本文字数:1060 字

    阅读完需:约 3 分钟

Rust 1.80 提供 Lazy Statics 稳定支持,并支持在模式匹配中使用开区间

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/

2024-08-23 08:009800

评论 1 条评论

发布
用户头像
用游戏rust的logo作为文章配图,搞笑的吧
2024-08-28 19:52 · 上海
回复
没有更多了
发现更多内容

【每日学点HarmonyOS Next知识】Web交互、列表拖拽、横屏后布局、Event序列问题、Scroll与Web组合

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】 状态变量、公共Page、可见区域变化回调、接收参数、拖拽排序控件

轻口味

HarmonyOS HarmonyOS NEXT

YashanDB实例启停

YashanDB

数据库 yashandb

VMware ESXi 8.0U2d macOS Unlocker & OEM BIOS 标准版和厂商定制版

sysin

esxi

VMware ESXi 6.7U3v macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版

sysin

esxi

AI大模型本地化部署的优化

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

有必要使用 Oracle 向量数据库吗?

秃头小帅oi

卸载YashanDB服务端

YashanDB

数据库 yashandb

芯盾时代移动办公融合解决方案

芯盾时代

远程办公 iam 统一身份管理平台

【每日学点HarmonyOS Next知识】多继承、swiper容器、事件传递、滚动安全区域、提前加载网络图片

轻口味

HarmonyOS HarmonyOS NEXT

培训中心教务系统(源码+文档+讲解+演示)

深圳亥时科技

YashanDB归档管理

YashanDB

数据库 yashandb

从文件到块: 提高 Hugging Face 存储效率

伤感汤姆布利柏

AI大模型本地化部署的运营

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

【每日学点HarmonyOS Next知识】获取组件尺寸、无埋点方案、海报组件、路由表、文字渐变效果

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】状态栏控制、片段按钮点击回调、绘制组件、取消按钮与输入框对齐、父调子组件方法

轻口味

HarmonyOS HarmonyOS NEXT

大模型本地化部署的应用场景

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

使用 XDP 和 IPVS 实现 QUIC 负载均衡

EMQ映云科技

负载均衡 QUIC协议

洗鞋小程序(源码+文档+讲解+演示)

深圳亥时科技

YashanDB字符集配置

YashanDB

数据库 yashandb

淘宝图片搜索商品列表API接口全攻略

tbapi

淘宝API 淘宝拍立淘接口 淘宝图片搜索API

YashanDB参数配置

YashanDB

数据库

【最新版】计算机二级Python题库及满分代码

大头博士先生

【每日学点HarmonyOS Next知识】列表匀速滑动、判断页面是否在路由栈、导航栏顶部加一条横线、滑动冲突、进度条自定义圆角大小

轻口味

HarmonyOS HarmonyOS NEXT

AI 大模型本地化部署的调试

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版

sysin

esxi

智慧党建系统(源码+文档+讲解+演示)

深圳亥时科技

Rust 1.80 提供 Lazy Statics 稳定支持,并支持在模式匹配中使用开区间_编程语言_Sergio De Simone_InfoQ精选文章