2411rust,76~79

1.76.0稳定版

此版本较小

ABI兼容更新

函数指针文档中新增的ABI兼容部分介绍了函数签名ABI兼容的意义.大部分是参数类型返回类型的兼容,及在当前Rust兼容的列表.文档仅描述现有兼容的状态.

一个新增功能是,现在保证u32ABI兼容的.它们一直有相同大小对齐方式,但现在即使在调用函数的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_toslice::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.78LLVM已升级到18版本,完成了已声明的针对x86-32x86-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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473997.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多线程回顾总结

目录 一.线程与创建线程方式简介 二.Thread继承 三.实现Runnable接口 四.Callable接口 五.使用线程池 一.线程与创建线程方式简介 线程与进程的区别&#xff1a; 1、一个进程至少包含一个线程 2、比如电脑上QQ,运行起来就是一个进程&#xff0c;QQ可以聊天同时也可以传文…

深度学习基础练习:代码复现transformer重难点

2024/11/10-2024/11/18: 主要对transformer一些比较难理解的点做了一些整理&#xff0c;希望对读者有所帮助。 前置知识&#xff1a; 深度学习基础练习&#xff1a;从pytorch API出发复现LSTM与LSTMP-CSDN博客 【神经网络】学习笔记十四——Seq2Seq模型-CSDN博客 【官方双语】一…

Java连接MySQL(测试build path功能)

Java连接MySQL&#xff08;测试build path功能&#xff09; 实验说明下载MySQL的驱动jar包连接测试的Java代码 实验说明 要测试该情况&#xff0c;需要先安装好MySQL的环境&#xff0c;其实也可以通过测试最后提示的输出来判断build path是否成功&#xff0c;因为如果不成功会直…

DQN系列算法详解

代码链接见文末 1. Q-learning 1.1 概述 Q-Learning是一种强化学习算法,目的是通过选择能带来最大长期收益的行为来完成任务。 做事包含瞬时奖励和记忆经验奖励: 在Q-Learning中,每个动作都会带来“瞬时奖励”,同时也会根据过去的经验记住哪些行为更有利。瞬时奖励: 这里…

七、箭头函数及简写、arguments、剩余参数、展开运算符、解构数组与对象、数组常见方法(forEach、map、join、reduce)

1. 箭头函数 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head>…

.NET桌面应用架构Demo与实战|WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper

目录 .NET桌面应用架构Demo与实战|WPFMVVMEFCoreIOCDICode FirstAutoPapper技术栈简述项目地址&#xff1a;功能展示项目结构项目引用1. 新建模型2. Data层&#xff0c;依赖EF Core&#xff0c;实现数据库增删改查3. Bussiness层&#xff0c;实现具体的业务逻辑4. Service层&am…

【蓝桥杯备赛】深秋的苹果

# 4.1.1. 题目解析 要求某个区间内的数字两两相乘的总和想到前缀和&#xff0c;但是这题重点在于两两相乘先硬算&#xff0c;找找规律&#xff1a; 比如要算这串数字的两两相乘的积之和&#xff1a; 1, 2, 3 1*2 1*3 2*3 1*(23) 2*3 前缀和数组&#xff1a; 1 3 6 发现…

通过 Docker 对 MySQL 做主从复制的时候,因为ip不对导致不能同步。后又因为二进制的偏移量写的不对,导致不能同步的问题

问题一&#xff1a;Error connecting to source slave127.0.0.1:3307. This was attempt 3/86400, with a delay of 30 seconds between attempts. Message: Cant connect to MySQL server on 127.0.0.1:3307 (111) 就是因为这个ip不对&#xff0c;导致的异常。 解决方式&…

【原创】如何备份和还原Ubuntu系统,非常详细!!

前言 我在虚拟机装了一个xfce4的Ubuntu桌面版&#xff0c;外加输入法、IDEA等&#xff0c;我想将这个虚拟机里的系统直接搬到物理机中&#xff0c;那我可以省的再重新装一遍、配置xfce4桌面、修改一堆快捷键还有配置idea了&#xff0c;那直接说干就干。 本教程基于Ubuntu24.0…

VMware 中 虚拟机【Linux系统】固定 ip 访问

注意&#xff1a;这里的 参考链接 VMWare虚拟机设置固定ip_vmware虚拟机修改ip地址-CSDN博客 VMwareCentOS 7 静态IP设置方法&#xff08;保姆级教程&#xff0c;建议收藏&#xff09;-阿里云开发者社区 1&#xff09;查看宿主机中 VMnet8 的网络配置 ipconfig 2&#xff…

Windows环境GeoServer打包Docker极速入门

目录 1.前言2.安装Docker3.准备Dockerfile4.拉取linux环境5.打包镜像6.数据挂载6.测试数据挂载7.总结 1.前言 在 Windows 环境下将 GeoServer 打包为 Docker&#xff0c;可以实现跨平台一致性、简化环境配置、快速部署与恢复&#xff0c;同时便于扩展集成和版本管理&#xff0c…

day03(单片机高级)RTOS

目录 RTOS(实时操作系统) 裸机开发模式 轮询方式 前后台&#xff08;中断方式&#xff09; 改进&#xff08;前后台&#xff08;中断&#xff09;&#xff09;定时器 裸机进一步优化 裸机的其他问题 RTOS的概念 什么是RTOS 为什么要使用 RTOS RTOS的应用场景 RTOS的…

VScode使用Batch Runner插件在终端运行bat文件

搜索并安装插件Batch Runner 创建测试文件 echo off echo "Hello world"按F5运行

Debezium日常分享系列之:Debezium3版本Debezium connector for JDBC

Debezium日常分享系列之&#xff1a;Debezium3版本Debezium connector for JDBC 概述JDBC连接器的工作原理消费复杂的Debezium变更事件至少一次的传递多个任务数据和列类型映射主键处理删除模式幂等写入模式演化引用和大小写敏感性连接空闲超时数据类型映射部署Debezium JDBC连…

Redis-08 Redis集群

Redis槽位 Redis分片 Redis集群优势 主要掌握第三种 为什么槽位是16384&#xff1f; 三主三从&#xff1a; 每个主机只能写在自己的槽位 所以登录redis集群记得加参数 -c 比如redis-cli -a dc123 -p 6380 -c 加了 -c 相当于会进行路由转发&#xff0c;不属于自己槽位的…

微知-DOCA ARGP参数模块的相关接口和用法(config单元、params单元,argp pipe line,回调)

文章目录 1. 背景2. 设置参数的主要流程2.1 初始化2.2 注册某个params的处理方式以及回调函数2.4 定义好前面的params以及init指定config地点后start处理argv 3. 其他4. DOCA ARGP包相关4.1 主要接口4.2 DOCA ARGP的2个rpm包4.2.1 doca-sdk-argp-2.9.0072-1.el8.x86_64.rpm4.2.…

智能指针原理、使用和实现——C++11新特性(三)

目录 一、智能指针的理解 二、智能指针的类型 三、shared_ptr的原理 1.引用计数 2.循环引用问题 3.weak_ptr处理逻辑 四、shared_ptr的实现 五、定制删除器 六、源码 一、智能指针的理解 问题&#xff1a;什么是智能指针&#xff1f;为什么要有智能指针&#xff1f;智…

初识Linux · 信号处理 · 续

目录 前言&#xff1a; 可重入函数 重谈进程等待和优化 前言&#xff1a; 在前文&#xff0c;我们已经介绍了信号产生&#xff0c;信号保存&#xff0c;信号处理的主题内容&#xff0c;本文作为信号处理的续篇&#xff0c;主要是介绍一些不那么重要的内容&#xff0c;第一个…

IPTV智慧云桌面,后台服务器搭建笔记

环境CentOs7.9 &#xff0c;安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 访问宝塔&#xff0c;修改服务器端口安全组端口 26029 注意&#xff01;&#xff01;&#xff01;&#xff01…

模型的评估指标——IoU、混淆矩阵、Precision、Recall、P-R曲线、F1-score、mAP、AP、AUC-ROC

文章目录 预测框的预测指标——IoU&#xff08;交并比&#xff09;分类预测指标混淆矩阵&#xff08;Confusion Matrix&#xff0c;TP、FP、FN、TN)Precision&#xff08;精度&#xff09;Recall&#xff08;召回率&#xff09;P-R曲线F1-scoreTPR、TNR、FPR、FNRROC曲线下面积…