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 调度的基本单位。 联系方面,线程是进程的一部分,一个进程可以包含多个线程。它们都用于…...
SQL SELECT 语句:基础与进阶应用
SQL SELECT 语句:基础与进阶应用 SQL(Structured Query Language)是一种用于管理关系数据库的编程语言。在SQL中,SELECT语句是最常用的命令之一,用于从数据库表中检索数据。本文将详细介绍SELECT语句的基础用法&#…...
微服务即时通讯系统的实现(服务端)----(1)
目录 1. 项目介绍和服务器功能设计2. 基础工具安装3. gflags的安装与使用3.1 gflags的介绍3.2 gflags的安装3.3 gflags的认识3.4 gflags的使用 4. gtest的安装与使用4.1 gtest的介绍4.2 gtest的安装4.3 gtest的使用 5 Spdlog日志组件的安装与使用5.1 Spdlog的介绍5.2 Spdlog的安…...
《Spring 依赖注入方式全解析》
一、Spring 依赖注入概述 Spring 依赖注入(Dependency Injection,DI)是一种重要的设计模式,它在 Spring 框架中扮演着关键角色。依赖注入的核心概念是将对象所需的依赖关系由外部容器(通常是 Spring 容器)进…...
【C++动态规划】1411. 给 N x 3 网格图涂色的方案数|1844
本文涉及知识点 C动态规划 LeetCode1411. 给 N x 3 网格图涂色的方案数 提示 你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直…...
外包干了3年,技术退步明显...
先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…...
SpringBoot 2.x 整合 Redis
整合 1)添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- 如果没有使用下面给出的工具类,那么就不需要引入 -…...
React的API✅
createContext createContext要和useContext配合使用,可以理解为 “React自带的redux或mobx” ,事实上redux就是用context来实现的。但是一番操作下来我还是感觉,简单的context对视图的更新的细粒度把控比不上mobx,除非配合memo等…...
什么是全渠道客服中心?都包括哪些电商平台?
什么是全渠道客服中心?都包括哪些电商平台? 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 全渠道客服中心是一种能够同时接入并处理来自多个渠道客户咨询和请求的综合服务平台。以…...
Jtti:如何知晓服务器的压力上限?具体的步骤和方法
了解服务器的压力上限(也称为性能极限或容量)是确保系统在高负载下仍能稳定运行的重要步骤。这通常通过压力测试(也称为负载测试或性能测试)来实现。以下是详细的步骤和方法来确定服务器的压力上限: 1. 定义测试目标和指标 在进行压力测试前,明确测试目标…...
贪心算法(1)
目录 柠檬水找零 题解: 代码: 将数组和减半的最少操作次数(大根堆) 题解: 代码: 最大数(注意 sort 中 cmp 的写法) 题解: 代码: 摆动序列࿰…...
什么叫门户类网站/建设营销网站
https://www.luogu.org/problem/P2731 题目背景 Farmer John每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。 题目描述 John是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个栅栏。你必须编一个程序,读入栅栏网络…...
南京 网站建设模板价格/免费推广网站平台
顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解一般我们实例化一…...
网站后台数据处理编辑主要是做什么的啊/营销技巧美剧
1.建立wwwroot(/home/wwwrooot)另建立一个wwwroot/test/index.html(网站目录)2.建立vhost文件(/usr/local/nginx/conf/vhost)3.配置nginx.conf,加入:include vhost/*.conf;http{......include vhost/*.conf; // 注意这里是放在http{}里面,而不…...
wordpress注册验证邮箱/百度软件商店下载安装
如图所示的二叉树表达式: ab*(c-d)-e/f 若先序遍历此二叉树,按访问结点的先后次序将结点排列起来,其先序序列为: (波兰式,前缀表达式) -a*b-cd/ef 按中序遍历,其中序序列为:ab*c-d-e/f (中缀表达式) 按后序遍历,其后序序列为:abcd-*ef/- (逆…...
网站制作模板/什么是软文文案
Golang GDB print global variable在使用GDB工具调试golang程序时,需要print一个全局变量,遇到各种报错,没办法打印出来,这里记录一下解决方法。我的包名叫“monitor”,全局变量名叫“DefaultDevice”,代码…...
通辽网站制作公司/营销成功的案例
实验环境:VMware Fusion 11.0.2 操作系统:CentOS 7.6 主机名IP地址CPU内存k8s2m172.16.183.1512核4Gk8s2n172.16.183.1611核1G装系统的时候就已经设置为静态IP了,语言为英语,时区是上海。另外因为kubernetes默认不支持swap分区&a…...