写点什么

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

评论 1 条评论

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

Swish :通过手势来控制mac应用窗口

Rose

AI写代码时代,赢的不是写得快的企业,而是懂这个规则的...

安势信息

AI 软件供应链 软件供应链安全 AI编码 AI 编码隐患

一文秒懂SaaS、CRM、OA、ERP、MES、WMS、HR

优秀

SaaS CRM ERP mes

ERP、OMS、WMS为什么需要对接快递API接口?

快递鸟

配货准:隐藏在商品计划中的利润增长密码

第七在线

前端热更新重构中国互联网技术架构演进路径

xuyinyin

重磅!幂律智能推出首款能交付真实法律任务的 AI 律师——吾律

人称T客

招银浦江数字金融生态大会:招商银行已与火山引擎展开”AI+金融”试点

新消费日报

明天,在命令行里直接「对话」你的技术栈

CodeBuddy

强烈推荐Nano Banana 的几种神仙用法

苍何

广告质量为何至关重要?Unity 高管 Felix Thé 解读行业痛点与应对之道

极客天地

京东商品评论API全栈开发指南:从接口调用到数据可视化实战

tbapi

京东API 京东商品评论API 京东评论API 京东评论数据采集

0 元夺宝小程序介绍

微擎应用市场

Trapcode Suite 2024 mac红巨人粒子特效套装插件 附安装教程

Rose

淘宝闪购基于Flink&Paimon的Lakehouse生产实践:从实时数仓到湖仓一体化的演进之路

Apache Flink

大数据 flink 实时计算 实时计算Flink

SSH Shell mac:支持 SSH1、SSH2、Telnet 等远程连接

Rose

MyEMS:开源领域的能源管理创新解决方案

开源能源管理系统

开源 能源管理系统

VMware 迁移后成本不降反升?国产超融合“一次买断”才是真省钱

智驱前线

盛趣游戏携手火山引擎打造大模型防火墙,保障智能NPC安全合规

新消费日报

面试官:如何实现动态线程池的任务编排?

王磊

乐通商会助手相关介绍

微擎应用市场

mac防火墙工具:hands off mac破解教程 附hands off 激活码

Rose

Gemini从生成到编辑的进化

kookeey代理严选

Google 代理IP 海外IP Gemini 2.5

MyEMS 深度解析:碳管理赋能与系统集成的实践路径

开源能源管理系统

开源 能源管理系统

AI评测入门(一):先搞懂你的数据集

非晓为骁

AI评测 Langfuse AI产品经理

行业分享丨TCL华星光电:AI 如何助力LCD显示模组精准老化预测?

Altair RapidMiner

人工智能 AI 仿真 CAE RapidMiner

AI 评测入门(二):Prompt 迭代实战从“能跑通”到“能落地”

非晓为骁

AI工程化 prompt 工程 Langfuse AI产品经理 AI 评测

评测系统详细介绍

微擎应用市场

APP混合开发:加速鸿蒙生态,抢占增量流量入口

xuyinyin

Battery Health 3 for Mac 随时掌握苹果电脑电池电量、充电情况、电池容量

Rose

AI Compass前沿速览:字节Seedream4.0、Qwen3-Max、EmbeddingGemma、OneCAT多模态、rStar2-Agent

汀丶人工智能

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