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.mzph.cn/pingmian/61066.shtml

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

相关文章

没钱买KEGG怎么办?REACTOME开源通路更强大

之前搜集免费生物AI插图时简单提到了通路数据库Reactome&#xff08;https://reactome.org/&#xff09;&#xff0c; 那些精美的生物插图只能算是该数据库附赠的小礼品&#xff0c;他的主要功能还是作为一个开源的通路数据库&#xff0c;为相关领域的研究者提供直观的可视化生…

ChatGPT学术专用版,一键润色纠错+中英互译+批量翻译PDF

ChatGPT academic项目是由中科院团队基于ChatGPT专属定制。论文润色、语法检查、中英互译、代码解释等可一键搞定&#xff0c;堪称科研神器。 功能介绍 我们以3.5版本为例&#xff0c;ChatGPT学术版总共分为五个区域&#xff1a;输入控制区、输出对话区、基础功能区、函数插件…

版本控制【Git Bash】【Gitee】

目录 一、什么是版本控制&#xff1f; 二、版本控制的种类&#xff1a; 1、本地版本控制 2、集中版本控制 3、分布式版本控制 三、下载Git Bash 四、Git Bash 配置 五、Git Bash使用 1、切换目录&#xff1a;cd 2.查看当前文件路径&#xff1a;pwd 3.列出当前目录下文件…

关于Java合并多个Excel中的数据【该数据不是常规列表】,并入库保存的方案

1. 背景 最近在使用RPA&#xff08;机器人流程自动化&#xff09;做数据采集的时候。发现那个RPA采集&#xff0c;一次只能采集相同格式的数据&#xff0c;然后入到Excel或者库中。由于院内系统的业务限制&#xff0c;导致采集的数据是多个Excel&#xff0c;并且我们这边的需求…

【进阶系列】python的模块

模块 创建一个 .py 文件&#xff0c;这个文件就称之为 一个模块 Module 如何使用 import 想要B.py文件中&#xff0c;使用A.py文件&#xff0c;只需要在B.py文件中使用关键字import导入即可。 import A# 若A是一个包的话&#xff0c;可以这样写 import A.函数名from impor…

使用Web Workers提升JavaScript的并行处理能力

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的…

从零开始使用GOT-OCR2.0——多模态通用型OCR(非常具有潜力的开源OCR项目):项目环境安装配置 + 测试使用

在之前精读了这个多模态的OCR项目论文&#xff0c;理解了其基本的模型架构&#xff0c;论文精读地址&#xff1a; 【论文精读】GOT-OCR2.0源码论文——打破传统OCR流程的多模态视觉-语言大模型架构&#xff1a;预训练VitDet 视觉模型 阿里通义千问Qwen语言模型-CSDN博客 本文在…

【Golang】——Gin 框架中的表单处理与数据绑定

在 Web 应用开发中&#xff0c;表单是用户与服务器交互的重要手段。Gin 框架对表单处理提供了高效便捷的支持&#xff0c;包括数据绑定、验证等功能。在本篇博客中&#xff0c;我们将详细介绍如何使用 Gin 框架处理表单数据&#xff0c;涵盖基础操作与进阶技巧&#xff0c;帮助…

删除k8s 或者docker运行失败的脚本

vi delete_exited_containers.sh#!/bin/bash# 列出所有停止的容器并存储到数组 list_exited_containers() {echo -e "\nStopped containers:"containers()# 获取停止的容器信息并存入数组while IFS read -r line; docontainers("$line")done < <(do…

Linux(命令格式详细+字符集 图片+大白话)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

Clip结合Faiss+Flask简易版文搜图服务

一、实现 使用目录结构&#xff1a; templates ---upload.html faiss_app.py 前端代码&#xff1a;upload.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&quo…

SpringBoot 之整合gRPC

父工程中引入基本的依赖&#xff1a; <modules><module>api</module><module>client</module><module>service</module></modules><parent><artifactId>spring-boot-starter-parent</artifactId><group…

汽车资讯新篇章:Spring Boot技术启航

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

「二」体验HarmonyOS端云一体化开发模板(一)

关于作者 白晓明 宁夏图尔科技有限公司董事长兼CEO、坚果派联合创始人 华为HDE、润和软件HiHope社区专家、鸿蒙KOL、仓颉KOL 华为开发者学堂/51CTO学堂/CSDN学堂认证讲师 开放原子开源基金会2023开源贡献之星 1 前置条件 实名认证的华为开发者账号 安装DevEco Studio 5.0.0 Re…

逆向攻防世界CTF系列41-EASYHOOK

逆向攻防世界CTF系列41-EASYHOOK 看题目是一个Hook类型的&#xff0c;第一次接触&#xff0c;虽然学过相关理论&#xff0c;可以看我的文章 Hook入门(逆向)-CSDN博客 题解参考&#xff1a;https://www.cnblogs.com/c10udlnk/p/14214057.html和攻防世界逆向高手题之EASYHOOK-…

Windows文件资源管理器增强工具

引言&#xff1a; 资源管理器在我们使用电脑时是经常用到的&#xff0c;各种文件资源等的分类整理都离不开它。但是Windows Explorer确实不好用&#xff0c;不智能&#xff0c;不符合人体工程学。特别是在一些场合&#xff0c;在打开的一堆文件夹里&#xff0c;想从中找到自己要…

【Flask+Gunicorn+Nginx】部署目标检测模型API完整解决方案

【Ubuntu 22.04FlaskGunicornNginx】部署目标检测模型API完整解决方案 文章目录 1. 搭建深度学习环境1.1 下载Anaconda1.2 打包环境1.3 创建虚拟环境1.4 报错 2. 安装flask3. 安装gunicorn4. 安装Nginx4.1 安装前置依赖4.2 安装nginx4.3 常用命令 5. NginxGunicornFlask5.1 ng…

Mac系统下配置 Tomcat 运行环境

下载并解压JDK 下载 根据自己需求下载对应版本的 jdk&#xff0c;我演示使用的是最新版的 jdk23&#xff0c;其他版本过程一样。 如果你是 M 芯片可以点击这个链接下载 如果你是 Intel 芯片可以点击这个链接下载 解压 下载完成后双击解压&#xff0c;将解压出来的文件夹放…

Getx:响应式数据,实现数据的局部刷新

Flutter官网demo实现计数器 这个demo中&#xff0c;如果要更新_count&#xff0c;调用setState就会重新build&#xff0c;这样做比较耗费性能&#xff0c;此时可以使用Getx的响应式状态管理器实现局部刷新 import package:flutter/material.dart;class JiShu extends Stateful…

Dowex 50WX8 ion-exchange resin可以用于去除水中的金属离子(如钠、钾、镁、钙等)和其他杂质,提高水质,11119-67-8

一、基本信息 中文名称&#xff1a;Dowex 50WX8 离子交换树脂 英文名称&#xff1a;Dowex 50WX8 ion-exchange resin CAS号&#xff1a;11119-67-8 供应商&#xff1a;陕西新研博美生物科技 外观&#xff1a;米色至浅棕色或绿棕色粉末/微球状 纯度&#xff1a;≥95% 分子…