2311rust,到50版本更新

1.46.0稳定版

改进const fn

现在,可在const fn中使用几个核心语言功能:
1,if,ifletmatch
2,while,whileletloop
3,&&||符号
4,还可转换切片:

const fn foo() {let x = [1, 2, 3, 4, 5];//转换`数组`为切片let y: &[_] = &x;
}

虽然这些功能并不新鲜,但可在const fn之外使用它们,增加了大量编译时计算能力!如,const-sha1仓库可让你编译时计算SHA-1哈希值.

这导致微软RustWinRT绑定性能提高了40倍.

#[track_caller]

该属性叫#[track_caller],最初是在2017年7月的RFC2091中提出的!如果正在编写一个像unwrap这样可能会崩溃的函数,可在函数上加此注解,默认的panic格式化会在其错误消息位置使用其调用者.
如,这是先前的unwrap:

pub fn unwrap(self) -> T {match self {Some(val) => val,None => panic!("called `Option::unwrap()` on a `None` value"),}
}

现在像这样:

#[track_caller]
pub fn unwrap(self) -> T {同上...
}

就是这样!
如果自己实现恐慌(panic)勾挂,则可用std::panic::Location上的调用者方法来访问此信息.

更改库

std::mem::forget现在是const fn.此外,此版本还稳定了两个新API:

Option::zip
vec::Drain::as_slice

1.47.0稳定版

大数组上的特征

Rust目前无法在整数值上泛型.
因为无法泛型N,所以必须要为每个N的数组手动实现特征.
如果试在Rust1.46上:

fn main() {let xs = [0; 34];println!("{:?}", xs);
}

会收到错误.
但在Rust1.47中,它会打印出正确的数组.

更短的追踪

Rust1.47.0中,已修复.该程序:

fn main() {panic!();
}

更容易地看到恐慌实际起源,如果想看到所有内容,你仍可设置RUST_BACKTRACE=full.

窗口上的控制流防护

rustc现在支持-C control-flow-guard,该选项在窗口上,打开控制流这里保护.其他平台忽略此标志.

更改库

此外,此版本还稳定了9个新API:

Ident::new_raw
Range::is_empty
RangeInclusive::is_empty
Result::as_deref
Result::as_deref_mut
Vec::leak
pointer::offset_from
f32::TAU
f64::TAU

以下以前稳定API现已成为常量:
1,所有非零(NonZero)整数的新(new)方法.
2,所有整数的checked_add,checked_sub,checked_mul,checked_neg,checked_shl,checked_shr,saturating_add,saturating_subsaturating_mul方法.
3,所有有符号整数checked_abs,saturating_abs,saturating_negsignum.
4,charu8is_ascii_alphabetic,is_ascii_uppercase,is_ascii_lowercase,is_ascii_alphanumeric,is_ascii_digit,is_ascii_hexdigit,is_ascii_punctuation,is_ascii_graphic,is_ascii_whitespaceis_ascii_control方法.

1.48.0稳定版

rustdoc中更容易链接

RustdocRust发布版中包含的库文档工具,可让你用Markdown编写文档.
假设正在为一些Rust代码编写一些文档,如下:

pub mod foo {pub struct Foo;
}
pub mod bar {pub struct Bar;
}

两个模块,每个模块内部都有个结构.但想同时使用这两个结构;要在文档中记录这一点.因此,如下编写一些文档:

pub mod foo {/// `Foo`文档///pub struct Foo;
}pub mod bar {/// `Bar`文档///pub struct Bar;
}

一切正常,但如果可链接其他类型,就太好了.这样可更容易在文档间访问.
问题是MarkdownRustrustdoc生成的URL一无所知.因此,Rust必须手写.

该版本中,可用一些语法让rustdoc知道你正在试链接一个类型,让它为你生成URL.下面是基于之前代码的两个不同示例:

pub mod foo {/// `Foo`文档及[`Bar`](crate::bar::Bar)pub struct Foo;
}pub mod bar {/// `Bar`文档,及[`crate::foo::Foo`]pub struct Bar;
}

第一例生成Bar类型的正确链接.第二个链接到Foo,但会将整个crate::foo::Foo显示为链接文本.更多

添加搜索别名

现在,可通过rustdocUI搜索时,在项目上指定#[doc(alias="<alias>")],以添加搜索别名.这是一个较小的更改,但仍有用.像这样:

#[doc(alias = "bar")]
struct Foo;

有了该注解,如果在rustdoc的搜索中搜索"bar",即使搜索文本中没有"Foo",也会把Foo当作结果的一部分而出现.
别名还用在,每个Rust函数都可别名到它所包装的C函数FFI包装仓库.然后,底层C库现有用户可轻松搜索正确的Rust函数!

更改库

最重要的API更改类似:[T;N]:TryFrom<Vec<T>>现在是稳定的.可用它来试把向量变成定长数组:

use std::convert::TryInto;
let v1: Vec<u32> = vec![1, 2, 3];
//这将成功,向量长度为`3`,正在试生成长度为3的数组.
let a1: [u32; 3] = v1.try_into().expect("wrong length");
//但是,如果试使用长度为5的向量来完成......
let v2: Vec<u32> = vec![1, 2, 3, 4, 5];
//...这会恐慌,因为长度错误.
let a2: [u32; 3] = v2.try_into().expect("wrong length");

此外,此版本还稳定了五个新API:

slice::as_ptr_range
slice::as_mut_ptr_range
VecDeque::make_contiguous
future::pending
future::ready

以下以前稳定的API现已成为常量:

Option::is_some
Option::is_none
Option::as_ref
Result::is_ok
Result::is_err
Result::as_ref
Ordering::reverse
Ordering::then

1.49.0稳定版

64ARMLinux达到第1层

Rust编译器支持各种目标,但Rust团队无法为所有这些目标提供相同级别支持.为了清楚标记支持程度,使用分层系统:

编译器在技术上支持第3层目标,但不会检查其代码是否生成或通过测试,且发布时不提供预构建二进制文件.
第2层目标可保证构建,且提供预构建的二进制文件,但不会在这些平台上执行测试包:生成的二进制文件可能无法工作或有错误.
第1层目标提供最高支持保证.
Rust1.49.0提升aarch64-unknown-linux-gnu目标为第1层支持,为运行Linux64ARM系统的用户带来最高保证!

这一变化使从嵌入式到台式机和服务器的工作负载受益.
这是该项目一个重要里程碑,因为这是非x86目标首次达到第1层支持.
注意,Android不受此更改影响,因为它使用不同的第2层目标.

测试框架抓线程中的输出

Rust内置测试框架没有太多功能,这里改进了!

#[test]
fn thready_pass() {println!("fee");std::thread::spawn(|| {println!("fie");println!("foe");}).join().unwrap();println!("fum");
}

测试运行程序确保抓输出,并在测试失败时保存它.

更改库

Rust1.49.0中,有三个新的稳定函数:

slice::select_nth_unstable
slice::select_nth_unstable_by
slice::select_nth_unstable_by_key
And two functions were made const:
Poll::is_ready
Poll::is_pending

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

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

相关文章

NSSCTF第12页(3)

[NSSCTF 2nd]php签到 首先&#xff0c;代码定义了一个名为 waf 的函数&#xff0c;用于执行一个简单的文件扩展名检查来防止上传恶意文件。 $black_list 是一个存储不允许的文件扩展名的数组&#xff0c;如 “ph”、“htaccess” 和 “ini”。 pathinfo($filename, PATHINF…

启动docker服务

systemctl start docker sh /data/soft/restart.sh 访问gogs 192.168.101.65:10880

Docker build 技巧 —— 筑梦之路

实现目标 更快的构建速度 更小的Docker镜像大小 更少的Docker镜像层 充分利用镜像缓存 增加Dockerfile可读性 让Docker容器使用起来更简单 如何实现 编写.dockerignore文件 容器只运行单个应用 将多个RUN指令合并为一个 基础镜像的标签不要用latest 每个RUN指令后删除…

Linux之 4 种休眠模式

目录 1. Linux之 4 种休眠模式 1. Linux之 4 种休眠模式 # echo standby >/sys/power/state //CPU和RAM在运行 # echo mem > /sys/power/state //挂起到内存(待机),关闭硬 盘、外设等设备 # echo disk > /sys/power/state //挂起到硬盘(休眠),关闭硬盘、外设等设备&…

锐捷OSPF认证

一、知识补充 1、基本概述 OSPF区域认证和端口认证是两种不同的认证机制&#xff0c;用于增强OSPF协议的安全性。 OSPF区域认证&#xff08;OSPF Area Authentication&#xff09;&#xff1a;这种认证机制是基于区域的。在OSPF网络中&#xff0c;每个区域都可以配置一个区域…

2023.11.16-hive sql高阶函数lateral view,与行转列,列转行

目录 0.lateral view简介 1.行转列 需求1: 需求2: 2.列转行 解题思路: 0.lateral view简介 hive函数 lateral view 主要功能是将原本汇总在一条&#xff08;行&#xff09;的数据拆分成多条&#xff08;行&#xff09;成虚拟表&#xff0c;再与原表进行笛卡尔积&#xff0c…

如何在远程协同视频会议中确保安全性?

随着远程工作的普及&#xff0c;远程协同视频会议已成为企业和团队之间进行交流和协作的重要工具。与此同时&#xff0c;会议中的安全性问题也日益凸显。本文将介绍如何在远程协同视频会议中确保安全性&#xff0c;主要包括以下方面&#xff1a; 1、内网部署 将会议服务器部署…

Nginx(六) Nginx location 匹配顺序及优先级深究(亲测有效)

Nginx配置文件详解请参考另一篇文章 Nginx(三) 配置文件详解 本篇文章主要是探讨Nginx location的匹配顺序&#xff0c;依照惯例&#xff0c;我们还是先贴结论再看测试结果。 匹配顺序 匹配location的过程&#xff0c;其实可以理解成一个在众多选项中寻找最佳答案的过程。当然…

关于Vue3和Vue-rounter的几个理解

router-link对应的router-view能分开在不同的vue模块中吗&#xff1f; <router-link>和<router-view>可以分别在不同的Vue模块中使用。<router-link>是用于生成路由链接的组件&#xff0c;它可以在任何Vue模块中使用&#xff0c;例如在导航栏组件、侧边栏组…

LeetCode:342. 数位和相等数对的最大和(C++)

目录 342. 数位和相等数对的最大和 题目描述&#xff1a; 实现代码与解析&#xff1a; 暴力模拟&#xff08;超时&#xff0c;考虑优化&#xff09; 如何优化&#xff1f; hash 342. 数位和相等数对的最大和 题目描述&#xff1a; 给你一个下标从 0 开始的数组 nums &am…

ubuntu20中安装cmake-gui

参考&#xff1a;ubuntu20 安装cmake-gui 基本上是先下载&#xff0c;后解压&#xff0c;再添加软链接--使系统识别该程序的路径。 我因为通过其他方式安装了&#xff0c;这里只是记录下这种安装方式。

Swift开发中:非逃逸闭包、逃逸闭包、自动闭包的区别

1. 非逃逸闭包&#xff08;Non-Escaping Closure&#xff09; 定义&#xff1a;默认情况下&#xff0c;在 Swift 中闭包是非逃逸的。这意味着闭包在函数结束之前被调用并完成&#xff0c;它不会“逃逸”出函数的范围。内存管理&#xff1a;由于闭包在函数返回前被调用&#xf…

【原创】java+swing+mysql鲜花购物商城设计与实现

前言&#xff1a; 本文主要介绍了鲜花购物商城的设计与实现。首先&#xff0c;通过市场需求&#xff0c;我们确定了鲜花商场的功能&#xff0c;通常的商城一般都是B/S架构&#xff0c;然而我们今天要用javaswing去开发一个C/S架构的鲜花商城&#xff0c;利用开发技术和工具&am…

解密网络世界的秘密——Wireshark Mac/Win中文版网络抓包工具

在当今数字化时代&#xff0c;网络已经成为了人们生活和工作中不可或缺的一部分。然而&#xff0c;对于网络安全和性能的监控和分析却是一项重要而又复杂的任务。为了帮助用户更好地理解和解决网络中的问题&#xff0c;Wireshark作为一款强大的网络抓包工具&#xff0c;应运而生…

回溯算法(3)--n皇后问题及回溯法相关习题

一、n皇后问题 1、概述 n皇后要求在一个nn的棋盘上放置n个皇后&#xff0c;使得他们彼此不受攻击&#xff0c;皇后可以攻击同一行、同一列、同一斜线上的敌人&#xff0c;所以n皇后问题要求寻找在棋盘上放置这n个皇后的方案&#xff0c;使得任意两个皇后都不在同一行、同一列或…

基于STC12C5A60S2系列1T 8051单片机的模数芯片ADC0832实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0832实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍模数芯片ADC0832介绍通过模数芯片ADC0832把电压模…

kafka入门(一):kafka消息消费

安装kafka&#xff0c;创建 topic&#xff1a; Windows安装kafka, 详情见&#xff1a;https://blog.csdn.net/sinat_32502451/article/details/133067851 Linux 安装kafka&#xff0c;详情见&#xff1a;https://blog.csdn.net/sinat_32502451/article/details/133080353 添…

一键云端,AList 整合多网盘,轻松管理文件多元共享

hello&#xff0c;我是小索奇&#xff0c;本篇教大家如何使用AList实现网盘挂载 可能还是有小伙伴不懂&#xff0c;所以简单介绍一下哈 AList 是一款强大的文件管理工具&#xff0c;为用户提供了将多种云存储服务和文件共享协议集成在一个平台上的便利性。它的独特之处在于&am…

Mendix 创客访谈录|低代码赋能IoT应用开发

本期创客 郑锴 舜宇光学科技&#xff08;集团&#xff09;有限公司信息技术部 毕业于浙江大学&#xff0c;三年软件设计开发经验。目前任职于舜宇光学科技&#xff08;集团&#xff09;有限公司信息技术部&#xff0c;担任软件开发工程师&#xff0c;主要负责工业互联网相关软件…