2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论 1 条评论

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

当云原生网关遇上图数据库,NebulaGraph 的 APISIX 最佳实践

NebulaGraph

图数据库 API网关

华为云桌面,助力企业数字化转型

爱尚科技

【经验】硬件工程师与PCB槽孔斗智斗勇的故事

华秋PCB

工具 PCB PCB设计 槽孔

SpringMVC还是Spring WebFlux?谁是下一代的Java程序员技术栈?

程序员小毕

Java spring 程序员 后端 springmvc

5分钟搞懂Jenkins分布式架构

俞凡

架构 DevOps cicd 最佳实践

小游戏开发投放平台及分成政策盘点

Onegun

小游戏 小游戏开发

【观察】融云百幄:为政企数智办公按下“快进键”

融云 RongCloud

融云 数智化 政企 百幄

代码质量与安全 | 如何将清洁代码标准扩展到整个企业,促进业务上的成功?

龙智—DevSecOps解决方案

代码质量 代码安全

软件测试面试真题 | 什么是 Redis ? Redis缓存应用场景有哪些?

测试人

redis 软件测试 自动化测试 测试开发

使用无代码构建客户门户

间隔

PHP转Go之后,我又开始研究机器学习和自动驾驶了。

王中阳Go

自动驾驶 Apollo

多年缓慢成长,近3年野蛮狂飙,谁是这个赛道的王者?

ToB行业头条

小程序游戏的3大分发平台

FinFish

小程序 小游戏 小游戏运营

外包学生管理系统架构文档

白杨

AI 训练加速原理解析与工程实践分享

百度Geek说

人工智能 机器学习 12 月 PK 榜

案例丨多元业态管理服务厂商如何走通数字化转型之路

优秀

数字化转型 数字化管理

研讨会回顾 | 自动化测试“领导者”SmartBear解析软件质量与测试现状调研

龙智—DevSecOps解决方案

软件测试 自动化测试 测试自动化

华为云桌面,让企业随时随地开启云上办公

爱尚科技

Docker daemon configuration overview(Docker 守护进程配置概览)

独钓寒江

版本控制 | SVN,Git与Helix Core,谁的数据管理基础设施更安全?

龙智—DevSecOps解决方案

git svn 版本控制 版本控制系统

模块四课后作业 - 设计千万级学生管理系统的考试试卷存储方案

闲人Eric

架构实战营

融云任杰:激活组织生命力 让听见炮火的人做决策 | TGO专访

融云 RongCloud

专访 程序员‘

MySQL分库分表,可能真的要退出历史舞台了!

Java永远的神

MySQL 程序员 后端 架构师 分布分表

架构实战营第 10 期 - 模块三作业:外包学生管理系统详细架构设计文档

kaizen

「架构实战营」

基于Seata探寻分布式事务的实现方案

京东科技开发者

大数据 分布式事务 微服务架构 关系型数据库 seata

语音生成领域模型又填一名猛将

felix

深度学习 语音合成 TTS

华为云桌面解决方案,打造安全高效办公新体验

科技怪授

云桌面

内网穿透你真的了解吗?

C++后台开发

网络安全 NAT Linux服务器开发 内网 网络穿透

32篇年度最佳AI论文;Python编译器Codon开源;ChatGPT的前世今生

OneFlow

人工智能 深度学习 大模型

天翼云斩获2022全球分布式云大会两项大奖

天翼云开发者社区

【从零开始学爬虫】采集全国高校导师数据

前嗅大数据

数据采集 爬虫教程 爬虫入门

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