在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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:0010395

评论 1 条评论

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

观测云,全球领先的监控观测平台亮相亚马逊云科技中国峰会!

观测云

观测云

融云开源 MCP Server,让大模型轻松调用 IM 能力

融云 RongCloud

TortoiseSVN使用-合并分支代码

刘大猫

svn tortoiseSVN 版本控制器 合并分支代码 合并分支

【HarmonyOS5】DevEco Studio 使用指南:代码阅读与编辑功能详解

颜颜yan_

HarmonyOS DevEco Studio Harmony5

华南会议|嘉宾阵容揭秘,邀您共享 2025 Altair 区域技术大会华南站

Altair RapidMiner

AI HPC 数字孪生 仿真 CAE

一文掌握 HarmonyOS5 模拟器与真机调试技巧

颜颜yan_

架构 Harmony5

盘点几款支持“私有化部署”的低代码平台,看看你都用过哪一款

优秀

低代码平台 私有化部署

《HarmonyOSNext超强指南:3D解剖工程结构+三大包选型绝招!》

Turing_010

如何将SeaTunnel MySQL-CDC与Databend 高效整合?格式与方案全解析

白鲸开源

融云开源 MCP Server

融云 RongCloud

HSP与HAR:HarmonyOSNext共享包开发终极指南

Turing_010

HarmonyOSNext一看就懂!ArkUI弹出框全方位攻略:从自定义到固定,玩转弹窗不迷糊!

Turing_010

【HarmonyOS 5】鸿蒙CodeGenie AI辅助编程工具详解

GeorgeGcs

鸿蒙 HarmonyOS HarmonyOS NEXT 实践分享

日志易 ELK 国产替代:自主可控+性能跃升,信创背景下的企业数字化转型优选

日志易

#日志易 #ELK #ELK国产化替代 #日志分析

从MaxCompute到Milvus:通过DataWorks进行数据同步,实现海量数据高效相似性检索

阿里云大数据AI技术

人工智能 数据库 数据分析 数据处理 检索引擎

免费个人博客搭建,使用vuepress和plume主题在github上搭建一个免费的个人博客

小焱

个人博客 个人网站

《HarmonyOSNext的ForEach数组渲染の核心玩法与避坑指南》

Turing_010

HarmonyOSNext动画:一学就会的“动感魔法”指南!

Turing_010

《HarmonyOSNext弹窗:ComponentContent动态玩转企业级弹窗》

Turing_010

【生产实践】Dolphinscheduler集群部署后Web控制台不能登录的问题解决了!

白鲸开源

开源 大数据任务调度 部署 Apache DolphinScheduler

HarmonyOSNext的ArkUI状态管理核心逻辑

Turing_010

真金白银扶持新质商家,拼多多在为下一个十年布局

Alter

比亚迪座舱接入通义大模型,未来将联合打造更多AI智能座舱场景

科技汇

语音独角兽 ElevenLabs 创始人:人性中的不完美,恰是人愿意互动的关键;秘塔「今天学点啥」:解析复杂内容语音讲解丨日报

RTE开发者社区

ETLCloud中数据生成规则使用技巧

谷云科技RestCloud

数据处理 API ETL 数据集成 数据生成

时代变了,我选择ApiFox替代Postman

空城机

前端 Apifox API 接口

JWTの求生记录

空城机

前端 JWT

活动报名|北京新质人才嘉年华暨 GTN,你想要的高质量科创社交派对!6.13,北京

RTE开发者社区

【Gartner权威解答】:合格CTO必懂的开源软件十大热点问题

白鲸开源

基于昇腾适配电力潮流计算模型PowerFlowNet

Splendid2025

昇腾 深度学习、 AI for Science

《HarmonyOSNext属性动画实战手册:让UI丝滑起舞的魔法指南》

Turing_010

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