2411rust,76~79
1.76.0稳定版
此版本较小
ABI兼容更新
函数指针文档中新增的ABI兼容部分介绍了函数签名与ABI兼容的意义.大部分是参数类型和返回类型的兼容,及在当前Rust中兼容的列表.文档仅描述现有兼容的状态.
一个新增功能是,现在保证符和u32是ABI兼容的.它们一直有相同大小和对齐方式,但现在即使在调用函数的ABI中,与上面文档一致,它们也是等价的.
引用中的类型名
为了调试,从Rust1.38开始,就可用any::type_name::<T>()返回T类型的串描述,但这需要一个显式的类型参数.
指定该类型会有点难,尤其是对无法命名的类型(如闭包)或不透明的返回类型.
新的any::type_name_of_val(&T)可从类型引用中取描述性名字.
fn get_iter() -> impl Iterator<Item = i32> {[1, 2, 3].into_iter()
}
fn main() {let iter = get_iter();let iter_name = std::any::type_name_of_val(&iter);let sum: i32 = iter.sum();println!("The sum of the `{iter_name}` is {sum}.");
}
当前打印:
'core::array::iter::IntoIter<i32,3>'的和是6.
稳定的API
Arc::unwrap_or_clone
Rc::unwrap_or_clone
Result::inspect
Result::inspect_err
Option::inspect
type_name_of_val
ptr::{from_ref, from_mut}
ptr::addr_eq
std::hash::{DefaultHasher,RandomState}这些以前只能通过std::collections::hash_map取得.
1.77.0稳定版
此版本较小.
C串字面
Rust现在支持在&'static CStr内存类型中,扩展到按nul字节终止的串的的C串字面(c"abc").这样更易编写与需要nul结尾串的外部接口互操作的代码,并在编译时检查所有相关的错误(如,缺少内部nul字节).
支持异步fn中的递归
因为编译器限制,以前异步函数无法调用自身.在1.77中,已取消该限制,因此只要使用间接以避免无穷大小的函数状态,就允许递归调用.
即像此代码现在可以工作了:
async fn fib(n: u32) -> u32 {match n {0 | 1 => 1,_ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await}
}
offset_of!
对构字段,1.77.0稳定了可访问结构的相关公字段的字节偏移的offset_of!.当在没有类型的现成实例,但需要字段的偏移时,此宏最有用.
用户现在可用offset_of!(StructName, field)访问公字段的偏移,它从结构开头开始按字节用偏移扩展到usize式.
默认,在发布配置文件中允许去掉
未在输出中允许调试信息的cargo配置文件(如,debug=0)默认允许strip="debuginfo".
主要是因为(预编译的)标准库附带了调试信息,即即使本地编译没有显式请求调试信息,但静态链接的结果包含了标准库的调试信息.
需要调试信息的用户可用相关Cargo配置文件中的调试标志显式允许它.
Stabilized APIs
array::each_ref
array::each_mut
core::net
f32::round_ties_even
f64::round_ties_even
mem::offset_of!
slice::first_chunk
slice::first_chunk_mut
slice::split_first_chunk
slice::split_first_chunk_mut
slice::last_chunk
slice::last_chunk_mut
slice::split_last_chunk
slice::split_last_chunk_mut
slice::chunk_by
slice::chunk_by_mut
Bound::map
File::create_new
Mutex::clear_poison
RwLock::clear_poison
1.78.0稳定版
诊断属性
Rust现在支持#[diagnostic]属性名字空间,来影响编译器错误消息.按不要求编译器用的提示对待这些,提供编译器无法识别的诊断也不是错误.
该灵活性使得即使并非所有,无论是不同版本还是完全不同实现的编译器,都支持它们,源码提供诊断.
此名字空间带有第一个支持的#[diagnostic::on_unimplemented]属性,需要该特征但尚未在类型上实现时,可在特征上放置它以自定义消息.
考虑稳定化拉请中给出的示例:
#[diagnostic::on_unimplemented(message = "My Message for `ImportantTrait<{A}>` is not implemented for `{Self}`",label = "My Label",note = "Note 1",note = "Note 2"
)]
trait ImportantTrait<A> {}
fn use_my_trait(_: impl ImportantTrait<i32>) {}
fn main() {use_my_trait(String::new());
}
以前,编译器会给出如下内置错误:
错误[E0277]:不满足'String:ImportantTrait<i32>'的特征约束.
–>src/main.rs:12:18
|
12|use_my_trait(String::new());
|------------^^^^^^^^^^^^^未为'串'实现'ImportantTrait<i32>'特征
|此调用引入的约束的必需.
使用#[diagnostic::on_unimplemented],其自定义消息填充主错误行,在源输出上放置其自定义标签.仍按帮助输出写入原标签,且也会写入自定义注解.
这些确切细节可能会变化.
错误[E0277]:未为'串'实现'ImportantTrait<i32>'的消息
–>src/main.rs:12:18
|
12|use_my_trait(String::new());
|------------^^^^^^^^^^^^^我的标签
|由此调用引入的约束必需
=帮助:未为'串'实现'ImportantTrait<i32>'特征
=注:注1
=注:注2
对特征作者来说,如果可提供更好的提示,而不仅是谈论缺失的实现自身,则该诊断会更有用.如,这是标准库中的删节示例:
#[diagnostic::on_unimplemented(message = "the size for values of type `{Self}` cannot be known at compilation time",label = "doesn't have a size known at compiletime"
)]
pub trait Sized {}
断定不安全的前提条件
Rust标准库有许多不安全函数的前提条件的断定,但历史上它们只在标准库的#[cfg(debug_assertions)]构建中允许,以避免影响发布性能.
然而,因为一般是在发布模式下编译和分发的标准库,因此大多数Rust开发者并不检查这些.
现在,延迟到生成代码,才执行这些断定的条件,因此根据用户自己的设置来检查调试断定,在调试和测试构建中默认允许.
尽管检查的量的细节一般不稳定,此更改可帮助用户在其代码中抓未定义行为.
如,slice::from_raw_parts要求一个对齐的非无效指针.以下故意的未对齐指针有未定义行为,虽然如果你运气不佳,在过去可能"有效",但调试断定现在可以抓住它:
fn main() {let slice: &[u8] = &[1, 2, 3, 4, 5];let ptr = slice.as_ptr();//从对齐总是与`'u16'`的正确方式相差1个的`'针'`创建一个偏移let i = usize::from(ptr as usize & 1 == 0);let slice16: &[u16] = unsafe { std::slice::from_raw_parts(ptr.add(i).cast::<u16>(), 2) };dbg!(slice16);
}
在library/core/src/panicking.rs:220:5处'main'线程出现紧急情况:
违反了不安全的前提条件:slice::from_raw_parts要求指针对齐且非无效,且切片的总大小不超过'isize::MAX'
注意:使用'RUST_BACKTRACE=1'环境变量运行以显示追踪追踪
线程导致非展开崩溃.中止.
确定性重新对齐
标准库有一些可改变指针和切片的对齐方式的函数,但是如果严格遵守他们的文档,它们以前有一些注意,这样,实际上难以依赖它们.
这些警告主要是为了对冲常求值,但,它们只对非常使用是稳定的.现在,他们承诺根据其实际输入,有一致的运行时行为.
pointer::align_offset计算,要按给定对齐更改指针需要的偏移.如果不行,它会返回usize::MAX,但以前允许总是返回usize::MAX,现在已删除该行为.
slice::align_to和slice::align_to_mut都按对齐的中间切片和剩余的未对齐的头和尾切片转换切片.
这些方法现在承诺返回尽量大的中间部分,而不是允许实现返回次优的,如按头片返回所有内容.
稳定的API
对多个std::error::Error,接受相关实现的非'static生命期
impl Read for &Stdin
Makeimpl<Fd:AsFd>impltakeSized
implFrom<TryReserveError>forio::Error
这些API现在在常环境中是稳定的:
Barrier::new()
兼容说明
如前,Rust1.78已要求其最低提高到窗口10,以实现以下目标:
x86_64-pc-windows-msvc
i686-pc-windows-msvc
x86_64-pc-windows-gnu
i686-pc-windows-gnu
x86_64-pc-windows-gnullvm
i686-pc-windows-gnullvm
Rust1.78的LLVM已升级到18版本,完成了已声明的针对x86-32和x86-64目标的u128/i128ABI更改.
1.79.0稳定版
内联常式
常{...}块现在在式位置上是稳定的,允许无需额外的声明(如,在特征上定义常项或关联的常)的,显式进入常环境.
与常项(const ITEM:...=...)不同,内联常可使用域内的泛型,并推导其类型而不是显式写出来,这样,对内联代码片特别有用.如,像此模式:
const EMPTY: Option<Vec<u8>> = None;
let foo = [EMPTY; 100];
//可写作:
let foo = [const { None }; 100];
注意,这也适合泛型环境,以前要求带关联常的冗长特征声明:
fn create_none_array<T, const N: usize>() -> [Option<T>; N] {[const { None::<T> }; N]
}
这样,代码更加简洁并易于阅读.
关联类型位置的约束
Rust1.79稳定了关联项的约束语法,这允许在其他约束内的关联类型位置中放置约束,即T:Trait<Assoc:Bounds...>.
这样就不需要显式泛型类型来约束关联类型.
此功能允许在一些以前不可能或要施加额外,不必要的限制的地方,指定约束:
where子句,在此,相当于将约束分割为两个(或多个),where子句.
如,where T:Trait<Assoc:Bound>等价于where T:Trait,<T as Trait>::Assoc:Bound.
1,超级特征,与where子句不同,使用特征时,通过新语法隐式指定约束.示例语法:
trait CopyIterator: Iterator<Item: Copy> {}
2,关联类型项约束,允许约束与特征的关联类型关联的嵌套刚性投影.如,
trait Trait { type Assoc: Trait2<Assoc2: Copy>; }
3,不透明类型约束(RPIT,TAIT),允许无需命名不透明类型,约束与不透明类型关联的关联类型.如,impl Iterator<Item:Copy>定义一个项为复制的迭代器,不必实际将该项叫约束.
扩展自动临时生命期
现在在匹配和如构造中,自动扩展在构造中立即引用的临时的生命期.这与块结构中扩展临时对象的生命期一样.
如:
let a = if true {..;&temp() //过去错误,但现在扩展了生命期
} else {..;&temp() //过去错误,但现在扩展了生命期
};
//而
let a = match () {_ => {..;&temp() //过去错误,但现在扩展了生命期}
};
现在与之前行为一致:
let a = {..;&temp() //扩展生命期
};
因为这些程序过去编译失败,此行为后向兼容.
在标准库构建中允许帧指针
标准库现在使用-Cforce-frame-pointers=yes编译分发Rust项,使下游用户可更轻松地分析他们的程序.注意,尽管在Cargo的发布配置文件中默认去掉它,标准库还继续提供了行级调试信息(如,DWARF).
稳定的API
{integer}::unchecked_add
{integer}::unchecked_mul
{integer}::unchecked_sub
<[T]>::split_at_unchecked
<[T]>::split_at_mut_unchecked
<[u8]>::utf8_chunks
str::Utf8Chunks
str::Utf8Chunk
<*const T>::is_aligned
<*mut T>::is_aligned
NonNull::is_aligned
<*const [T]>::len
<*mut [T]>::len
<*const [T]>::is_empty
<*mut [T]>::is_empty
NonNull::<[T]>::is_empty
CStr::count_bytes
io::Error::downcast
num::NonZero<T>
path::absolute
proc_macro::Literal::byte_character
proc_macro::Literal::c_string
这些API现在在常环境中是稳定的:
Atomic*::into_inner
io::Cursor::new
io::Cursor::get_ref
io::Cursor::position
io::empty
io::repeat
io::sink
panic::Location::caller
panic::Location::file
panic::Location::line
panic::Location::column
相关文章:
2411rust,76~79
1.76.0稳定版 此版本较小 ABI兼容更新 函数指针文档中新增的ABI兼容部分介绍了函数签名与ABI兼容的意义.大部分是参数类型和返回类型的兼容,及在当前Rust中兼容的列表.文档仅描述现有兼容的状态. 一个新增功能是,现在保证符和u32是ABI兼容的.它们一直有相同大小和对齐方式,…...
vue2.0前端管理系统界面布局设置
前言 后台管理系统的核心就是用户管理、角色管理(含权限分配)、菜单管理,以及一些业务管理。业务管理通常以及根据不同的角色进行了权限分配。本次任务完成用户管理页面。 一 界面设计 1.引用Element 的Container 布局容器。 以上次博客中…...
4. SQL视图
MySQL中的视图(View)是一种虚拟表,本质是存储了一条SELECT语句。视图并不直接存储数据,而是动态生成结果集,帮助开发者简化查询逻辑和增强数据安全性。本文将从视图的基础概念到实际应用,逐步深入地探讨如何…...
Simulink学习笔记【PID UG联动仿真】
Simulink进行PID控制及调参: 建立系统动力学框图(把状态方程翻译出来),设置成subsystem建立PID反馈回路。示波器叫scope,多变量输出用demux和mux。可以用自动调参Tune模块,调整响应速度和稳定性࿰…...
【Python】30个Python爬虫的实战项目!!!(附源码)
Python爬虫是数据采集自动化的利器。本文精选了30个实用的Python爬虫项目,从基础到进阶,每个项目都配有完整源码和详细讲解。通过这些项目的实战,可以全面掌握网页数据抓取、反爬处理、并发下载等核心技能。 一、环境准备 在开始爬虫项目前…...
uni-app 界面TabBar中间大图标设置的两种方法
一、前言 最近写基于uni-app 写app项目的时候,底部导航栏 中间有一个固定的大图标,并且没有激活状态。这里记录下实现方案。效果如下(党组织这个图标): 方法一:midButton的使用 官方文档:ta…...
什么是Sass,有什么特点
Sass 概述 什么是 Sass? Sass(Syntactically Awesome Style Sheets)是一种 CSS 预处理器,它扩展了 CSS 的功能,使其更加强大和灵活。Sass 允许开发者使用变量、嵌套规则、混合宏、继承等高级特性,从而编写…...
服务器端渲染 (SSR) 与客户端渲染 (CSR)
嘿程序员!我们都知道,新时代的 Javascript 已经彻底改变了现代网站的结构和用户体验。如今,网站的构建更像是一个应用程序,伪装成一个能够发送电子邮件、通知、聊天、购物、支付等的网站。今天的网站是如此先进、互动,…...
数据结构(Java版)第一期:时间复杂度和空间复杂度
目录 一、数据结构的概念 1.1. 什么是数据结构 1.2. 算法与数据结构的关系 二、算法效率 三、时间复杂度 3.1. 大O的渐进表⽰法 3.2. 计算冒泡排序的时间复杂度 3.3. 计算二分查找的时间复杂度 四、空间复杂度 4.1. 空间复杂度 4.2. 冒泡排序的空间复杂度 4.3.…...
基于web的音乐网站(Java+SpringBoot+Mysql)
目录 1系统概述 1.1 研究背景 1.2研究目的 1.3系统设计思想 2相关技术 2.1 MYSQL数据库 2.2 B/S结构 2.3 Spring Boot框架简介 3系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1 系统安全性 3.2.2 数据完整性 …...
用go语言后端开发速查
文章目录 一、发送请求和接收请求示例1.1 发送请求1.2 接收请求 二、发送form-data格式的数据示例 用go语言发送请求和接收请求的快速参考 一、发送请求和接收请求示例 1.1 发送请求 package mainimport ("bytes""encoding/json""fmt""ne…...
GeekChallenge 2024 第十五届极客大挑战 pwn AK
GeekChallenge 2024 第十五届极客大挑战 pwn AK 🍀前言☘️ez_shellcode(shellcode,栈溢出)🌿分析🌿解题🌿exp ☘️买黑吗喽了吗(整数溢出,栈溢出)dz…...
禅道是什么,nas是什么,ssh是什么,finalshell是什么,git命令feat 、fix分别什么意思
禅道(Zentao)是一款开源的项目管理软件,专为软件开发团队设计。它集成了项目管理、产品管理、质量管理、文档管理和事务管理等多种功能,旨在帮助团队提高工作效率和项目交付质量。禅道支持敏捷开发方法,同时也适用于传…...
点云-半径搜索法-Radius Search
核心作用 在于通过设定一个空间范围(半径)寻找点的邻域点集合,从而支持对局部区域的分析和操作。 因为空间半径不会随着密度变化而改变点云输出的结果,处理密度变化大的点云时很重要。 应用场景 稀疏点检测:当点云密度…...
P11290 【MX-S6-T2】「KDOI-11」飞船
题目大意:有i种加油站,最开始速度为1,每次加油可以使速度*v,每次加油有一个时间代价,求到达终点所需最小时间。 思路:不妨考虑dp,贪心是错误的。 对于速度而言,,所以速…...
WebGIS地图框架有哪些?
地理信息系统(GIS)已经成为现代应用开发中不可或缺的一部分,尤其在前端开发中。随着Web技术的快速发展,许多强大而灵活的GIS框架涌现出来,为开发人员提供了丰富的工具和功能,使他们能够创建交互式、高性能的…...
量化加速知识点(整理中。。。)
量化的基本概念 通过减少模型中计算精度,从而减少模型计算所需要的访存量。 参考...
BLIP-2模型的详解与思考
大模型学习笔记------BLIP-2模型的详解与思考 1、BLIP-2框架概述2、BLIP-2网络结构详解3、BLIP-2的几点思考 上一篇文章上文中讲解了 BLIP(Bootstrapping Language-Image Pretraining)模型的一些思考,本文将讲述一个BLIP的升级版 BLIP-2&am…...
2024年11月22日 十二生肖 今日运势
小运播报:2024年11月22日,星期五,农历十月廿二 (甲辰年乙亥月庚寅日),法定工作日。 红榜生肖:马、猪、狗 需要注意:牛、蛇、猴 喜神方位:西北方 财神方位:…...
小米C++ 面试题及参考答案上(120道面试题覆盖各种类型八股文)
进程和线程的联系和区别 进程是资源分配的基本单位,它拥有自己独立的地址空间、代码段、数据段和堆栈等。线程是进程中的一个执行单元,是 CPU 调度的基本单位。 联系方面,线程是进程的一部分,一个进程可以包含多个线程。它们都用于…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
