Rust 1.80.0发布

Rust语言新版本1.80.0发布。Rust是一种赋予每个人构建可靠和高效软件的编程语言。

以下是一些关于Rust 1.80.0版本的要点:

1、LazyCell和LazyLock

这些类型延迟数据的初始化直到首次访问。它们类似于在1.70版本中稳定的OnceCell和OnceLock,但初始化函数包含在Cell单元内。

LazyLock 是线程安全选项,因此适用于静态值等地方。 例如,无论是 spawn 线程还是主作用域,都会看到下面完全相同的持续时间,因为 LAZY_TIME 会被首先访问静态值的线程初始化一次。 与 OnceLock::get_or_init() 不同的是,两者都不需要知道如何初始化它。

use std::sync::LazyLock;

use std::time::Instant;

static LAZY_TIME: LazyLock = 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 在没有线程同步的情况下做同样的事情,所以它没有实现静态所需的 Sync,但它仍可用于线程_本地!静态(每个线程有不同的初始化)。 根据线程安全的需要,这两种类型也可用于其他数据结构,因此懒初始化在任何地方都可用

2、cfg名称和值的检查:

在1.79版本中,rustc稳定了一个--check-cfg标志,现在Cargo 1.80启用了对所有cfg名称和值的检查。

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"))'] }

3、模式中的独占范围:

Rust的模式现在可以使用独占端点,写为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",

}

}

以前,模式中只允许包含范围(a...=b 或 ..=b)或开放范围(a...),因此像这样的代码需要为包含端点(如 K - 1)设置单独的常量。

包含范围作为一项不稳定的功能已经实施了很长时间,但阻塞的原因是它们可能会增加混乱,并增加模式中出现偏差错误的几率。

为此,我们增强了穷尽性检查功能,以更好地检测模式匹配中的间隙,而新的非连续范围端点(non_contiguous_range_endpoints)和重叠范围端点(overlapping_range_endpoints)将有助于检测在哪些情况下需要将排他性模式切换为包含性模式,反之亦然。

4、稳定的API

包括多个Rc和Arc类型的Default实现,Box的IntoIterator和FromIterator实现,以及NonNull、Duration、Option、Seek等类型的新方法。

检查RustCargoClippy中发生的所有变化。

更多Rust:https://www.jdon.com/74703.html

相关推荐
前端小咸鱼一条43 分钟前
React组件化的封装
前端·javascript·react.js
随便起的名字也被占用1 小时前
leaflet中绘制轨迹线的大量轨迹点,解决大量 marker 绑定 tooltip 同时显示导致的性能问题
前端·javascript·vue.js·leaflet
JuneXcy1 小时前
11.Layout-Pinia优化重复请求
前端·javascript·css
天下无贼!2 小时前
【自制组件库】从零到一实现属于自己的 Vue3 组件库!!!
前端·javascript·vue.js·ui·架构·scss
PineappleCoder2 小时前
JS 作用域链拆解:变量查找的 “俄罗斯套娃” 规则
前端·javascript·面试
知识分享小能手2 小时前
Vue3 学习教程,从入门到精通,Vue3 中使用 Axios 进行 Ajax 请求的语法知识点与案例代码(23)
前端·javascript·vue.js·学习·ajax·vue·vue3
533_2 小时前
[echarts] 更新数据
前端·javascript·echarts
讨厌吃蛋黄酥3 小时前
利用Mock实现前后端联调的解决方案
前端·javascript·后端
zzywxc7873 小时前
在处理大数据列表渲染时,React 虚拟列表是提升性能的关键技术,但在实际实现中常遇到渲染抖动和滚动定位偏移等问题。
前端·javascript·人工智能·深度学习·react.js·重构·ecmascript
_Kayo_10 小时前
VUE2 学习笔记14 nextTick、过渡与动画
javascript·笔记·学习