Rust 1.80.0 发布
Rust 1.80.0 稳定版现已发布,主要带来以下变化:
LazyCell和LazyLock
新的“lazy”类型将值的初始化延迟到首次访问,它们类似于1.70 中稳定的OnceCell和OnceLock类型,但单元格中包含了初始化函数。这完成了从流行的和板条箱中采用到标准库中的功能的稳定化。完成了从lazy_static和once_cellcrates 到标准库中所采用功能的稳定化。
LazyLock 是线程安全选项,适用于static values 等地方。
use std::sync::LazyLock;
use std::time::Instant;
static LAZY_TIME: LazyLock<Instant> = LazyLock::new(Instant::now);
fn main() {
let start = Instant::now();
std::thread::scope(|s| {
s.spawn(|| {
println!("Thread lazy time is {:?}", LAZY_TIME.duration_since(start));
});
println!("Main lazy time is {:?}", LAZY_TIME.duration_since(start));
});
}
LazyCell 缺乏线程同步,因此没有实现static所需的 Sync,但仍可用于thread_local! statics。Rust团队表示,根据线程安全的需要,这两种类型也可用于其他数据结构,因此 lazy initialization 在任何地方都可用。
Checked cfg names and values
在 1.79 中,rustc稳定了一个--check-cfgflag,现在 Cargo 1.80 正在对其知道的所有cfg名称和值启用这些检查(除了来自rustc的众所周知的名称和值)。包括来自Cargo.toml的功能名称以及来自构建脚本的新cargo::rustc-check-cfgoutput。
unexpected_cfgs会被 warning-by-default unexpected_cfgs lint 报告,用于捕获拼写错误或其他错误配置。例如,在具有可选rayon依赖项的项目中,此代码配置了错误的feature值:
fn main() {
println!("Hello, world!");
#[cfg(feature = "crayon")]
rayon::join(
|| println!("Hello, Thing One!"),
|| println!("Hello, Thing Two!"),
);
}
warning: unexpected `cfg` condition value: `crayon`
--> src/main.rs:4:11
|
4 | #[cfg(feature = "crayon")]
| ^^^^^^^^^^--------
| |
| help: there is a expected value with a similar name: `"rayon"`
|
= note: expected values for `feature` are: `rayon`
= help: consider adding `crayon` as a feature in `Cargo.toml`
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
= note: `#[warn(unexpected_cfgs)]` on by default
无论实际的rayon功能是否启用,都会报告相同的警告。
还可以使用Cargo.toml清单中的[lints]表来扩展自定义cfg的已知名称和值列表。rustc会自动提供警告中使用的语法。
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(foo, values("bar"))'] }
可以在之前的博客文章中阅读有关此功能的更多信息。
Exclusive ranges in patterns
Rust ranged 模式现在可以使用 exclusive endpoints,写成a..b或..b,类似于Range 和 RangeTo表达式类型。例如,以下模式现在可以在一个模式的终点和下一个模式的起点使用相同的常量:
pub fn size_prefix(n: u32) -> &'static str {
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",
}
}
Exclusive ranges 一直以来作为一个不稳定的功能提供。Rust 团队表示,阻碍因素在于它们可能会增加混乱并增加模式中出现 off-by-one errors 的可能性。在 Rust 1.80 中,exhaustiveness checking 得到了增强,可以更好地检测模式匹配中的差距,新的 lintnon_contiguous_range_endpoints和overlapping_range_endpoints将有助于检测在哪些情况下需要将 exclusive 模式切换为 inclusive 模式,反之亦然。
Rust 1.80 还稳定了许多 API,详情可查看官方公告。
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Linux Mint 22 “Wilma” 正式发布
Linux Mint 22 “Wilma” 已正式发布,这是一个长期支持版本 (LTS),将支持到 2029 年。 新版本提供了更好的语言支持。现在,当你安装 Linux Mint 22 时,只有你选择的语言和英语会在安装结束时保留下来,这为你节省了大量空间。大多数人可能没有意识到,旧版本并没有对这一点进行优化。 说到语言,安装介质现在包括英语、德语、西班牙语、法语、俄语、葡萄牙语、荷兰语和意大利语,用于离线安装。其他语言则需要互联网连接。 就新技术而言,以下是与此版本相关的内容: Linux Mint 22 配备了现代组件和新的 Ubuntu 24.04 软件包库。 为了保证与现代硬件更好地兼容,内核版本为 6.8,Linux Mint 22.x 版本将沿用 HWE 系列。 默认声音服务器切换为 Pipewire。 软件源支持新的 Debian DEB822 格式。 更新了主题以支持 GTK4。 为 Pix 添加了 JXL 支持,并为其实施了新的缩略图编辑器。 所有使用 libsoup2 的软件都已迁移到 libsoup3。 在启动序列、Plymouth 和 Slick-Greete...
-
下一篇
优秀国产规则引擎框架,LiteFlow 发布 v2.12.2 版本
LiteFlow是一个开源编排式规则引擎,能够让你的系统逻辑任意编排,可选用脚本书写逻辑,支持多达8种脚本语言,支持丰富的第三方存储的支持,所有的逻辑和规则均可热变更。设计系统和重构系统的神器。 LiteFlow是Gitee的高star项目,截止到发此文章的时候,Gitee star超过6.2k,Github则拥有2.8Kstar。 同时LiteFlow也是国内优秀的社区驱动型开源项目,开源3年多,目前已经被各大一线公司应用在核心系统上,据不完全统计,国内将近千余家公司都在使用。特性以及支持度都非常好。社区人数超过5000人。测试用例1800多个,质量有保障。 如果你是第一次知道这个项目,可以去官网或相关的主页进行了解: 项目官网:https://liteflow.cc 以下文章LiteFlow简称为LF。 前言 LF 2.12.2.1发布啦! 肯定有小伙伴会奇怪,这次怎么最后还有个点1呢。因为2.12.2本来已经发布,但是这期间社区里有个同学用到了声明式的异常事件监听功能,发现有一个bug并立即上报了。我在查清楚原委之后觉得这应该被尽快修复,所以在2.12.2后面又打了个补丁版本。 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL表碎片整理
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL数据库中FOR UPDATE的使用

微信收款码
支付宝收款码