当前位置: 首页 > news >正文

2411rust,1.80

1.80.0稳定版

LazyCellLazyLock

这些"懒"类型会延迟初化其数据,直到第一次访问.它们类似1.70中稳定的OnceCellOnceLock类型,但单元包含初化函数.

这稳定化了从流行的lazy_staticonce_cell中进入标准库.

LazyLock线安选项,使其适合静态值等位置.如,产生线程主域都会看见如下完全相同持续时间,因为无论谁最终先访问,都会初化一次LAZY_TIME.

与用OnceLock::get_or_init()不同,这两个用户不必知道如何初化它.

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不同步线程时,也是一样的,所以它没有实现需要的同步,但仍可在thread_local!静使用它(每线程有不同初化).

根据线安需求,也可在其他数据结构中用这两个类,因此懒初化无处不在!

检查配置名和值

1.79中,rustc稳定了一个--check-cfg标志,现在Cargo1.80对它知道的所有配置名和值(除了rustc周知名和值),都允许这些检查.

这包括Cargo.toml中的函数名构建脚本的新的cargo::rustc-check-cfg输出.

默认警告抓拼写错误或其他错误配置unexpected_cfgs检查器报告意外的配置.如,在有可选rayon依赖的项目中,为错误的特征配置此代码:

fn main() {println!("Hello, world!");#[cfg(feature = "crayon")]rayon::join(|| println!("Hello, Thing One!"),|| println!("Hello, Thing Two!"),);
}

警告:意外的"配置"条件值:"Crayon".

Cargo.toml清单中的[lints]表也可用来扩展自定义配置已知名和值列表.rustc自动提供要在警告中使用的语法.

[lints.rust]
unexpected_cfgs = { level = "warn", checkcfg = ['cfg(foo, values("bar"))'] }

模式中的独占区间

Rust区间模式现在可用独占端点,写成类似RangeRangeTo式类型的a..b..b.如,以下模式现在可对一个模式结束下个模式开始使用相同常数:

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",}
}

稳定的API

impl Default for Rc<CStr>
impl Default for Rc<str>
impl Default for Rc<[T]>
impl Default for Arc<str>
impl Default for Arc<CStr>
impl Default for Arc<[T]>
impl IntoIterator for Box<[T]>
impl FromIterator<String> for Box<str>
impl FromIterator<char> for Box<str>
LazyCell
LazyLock
Duration::div_duration_f32
Duration::div_duration_f64
Option::take_if
Seek::seek_relative
BinaryHeap::as_slice
NonNull::offset
NonNull::byte_offset
NonNull::add
NonNull::byte_add
NonNull::sub
NonNull::byte_sub
NonNull::offset_from
NonNull::byte_offset_from
NonNull::read
NonNull::read_volatile
NonNull::read_unaligned
NonNull::write
NonNull::write_volatile
NonNull::write_unaligned
NonNull::write_bytes
NonNull::copy_to
NonNull::copy_to_nonoverlapping
NonNull::copy_from
NonNull::copy_from_nonoverlapping
NonNull::replace
NonNull::swap
NonNull::drop_in_place
NonNull::align_offset
<[T]>::split_at_checked
<[T]>::split_at_mut_checked
str::split_at_checked
str::split_at_mut_checked
str::trim_ascii
str::trim_ascii_start
str::trim_ascii_end
<[u8]>::trim_ascii
<[u8]>::trim_ascii_start
<[u8]>::trim_ascii_end
Ipv4Addr::BITS
Ipv4Addr::to_bits
Ipv4Addr::from_bits
Ipv6Addr::BITS
Ipv6Addr::to_bits
Ipv6Addr::from_bits
Vec::<[T; N]>::into_flattened
<[[T; N]]>::as_flattened
<[[T; N]]>::as_flattened_mut

稳定的常API

<[T]>::last_chunk
BinaryHeap::new
http://www.lryc.cn/news/487351.html

相关文章:

  • FPGA 第6讲 简单组合逻辑多路选择器
  • Android Studio开发学习(五)———LinearLayout(线性布局)
  • 大模型(LLMs)RAG 版面分析------文本分块面
  • Web3游戏先锋 Big Time Studios 重磅推出 $OL 通证,赋能 Open Loot 游戏平台
  • Linux—ln(link files)命令使用方法(How to create links on Linux)
  • 学习日记_20241110_聚类方法(K-Means)
  • 解决Oracle DECODE函数字符串截断问题的深度剖析20241113
  • 开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(二)
  • PHP框架 单一入口和多入口以及优缺点
  • PhpSpreadsheet导出图片
  • AI 提示词(Prompt)入门 十:最佳实践|详细询问,提供细节!
  • web应用安全和信息泄露预防
  • 《人工智能深度学习的基本路线图》
  • 基于Java Springboot宠物猫售卖管理系统
  • 力扣-Hot100-链表其三【算法学习day.36】
  • iOS逆向入门:使用theos注入第三方依赖库
  • JavaScript 原型
  • 力扣 LeetCode 20. 有效的括号(Day5:栈与队列)
  • git使用及上线流程(仅为我工作中常用)
  • React Native 全栈开发实战班 - 打包发布之热更新
  • 2024年11月16日 星期六 重新整理Go技术
  • 力扣第 55 题 跳跃游戏
  • Golang | Leetcode Golang题解之第564题寻找最近的回文数
  • Spring Boot汽车资讯:科技与速度的交响
  • 从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望
  • 移动零
  • C#编写的日志记录组件 - 开源研究系列文章
  • 猎板PCB罗杰斯板材的应用案例
  • 使用esp32c3开发板通过wifi连网络web服务器
  • 供应链管理、一件代发系统功能及源码分享 PHP+Mysql