2311rust,到54版本更新

1.50.0稳定版

常量泛型数组索引

继续稳定常量泛型迈进,此版本为[T;N]数组,添加了ops::Index和IndexMut的实现.

fn second<C>(container: &C) -> &C::Output
whereC: std::ops::Index<usize> + ?Sized,
{&container[1]
}
fn main() {let array: [i32; 3] = [1, 2, 3];assert_eq!(second(&array[..]), &2); //切片以前工作,assert_eq!(second(&array), &2); //现在也可直接工作
}

数组的常量值重复

可按[a,b,c]列表或[x;N]重写Rust中的数组.对N>1,只允许对带Copyx重复,且允许在那里使用const式.

Rust1.38以来,实现意外地允许在数组重复中稳定地使用const值.

fn main() {//禁止的,因为`'Option<Vec<i32>>'`没有实现`'Copy'`.let array: [Option<Vec<i32>>; 10] = [None; 10];const NONE: Option<Vec<i32>> = None;const EMPTY: Option<Vec<i32>> = Some(Vec::new());//但是,允许重复`"const"`值!let nones = [NONE; 10];let empties = [EMPTY; 10];
}

Rust1.50中,正式承认了该稳定性.

安全分配ManuallyDrop<T>联字段

赋值字段时,不会删除旧值,因此Rust以前将其限制为仅从不析构(Drop)复制类型.当然,ManuallyDrop<T>也不需要Drop,所以现在Rust1.50允许安全地给这些字段赋值.

Unix平台上文件的利基市场

Rust1.28中,引入了非零整数类型(如NonZeroU8),其中0是利基,允许Option<NonZero>不用额外内存0表示None.

Unix平台上,Rust文件只是由系统的整数文件描述符组成,这里它永远不可能是-1!
返回文件描述符系统调用,使用-1来指示错误(checkerrno),因此-1不可能是真正的文件描述符.
Rust1.50开始,可用它来优化布局.因此,Option<File>现在大小与File自身相同!

更改库

Rust1.50.0中,有9个新的稳定函数:

bool::then
btree_map::Entry::or_insert_with_key
f32::clamp
f64::clamp
hash_map::Entry::or_insert_with_key
Ord::clamp
RefCell::take
slice::fill
UnsafeCell::get_mut

且大量现有函数常量:

IpAddr::is_ipv4
IpAddr::is_ipv6
Layout::size
Layout::align
Layout::from_size_align

所有整数类型的PoW.
1,对整,checked_pow.
2,对整,saturating_pow.
3,对整,wrapping_pow.
4,对正,next_power_of_two.
5,对正,checked_power_of_two.

1.51.0稳定版

Const泛型MVP

此版本之前,Rust允许你在生命期或类型中参数化类型.如,如果想要有个通用结构数组,可编写以下内容:

struct FixedArray<T> {//^^^定义list: [T; 32]//^使用.
}

随后使用FixedArray<u8>,编译器生成FixedArray单态版本,如下:

struct FixedArray<u8> {list: [u8; 32]
}

数组中最为明显,有了1.51.0,你可编写对整数,布尔值或符类型的值泛型代码!(使用structenum值仍不稳定).
看看定义,及用法.

struct Array<T, const LENGTH: usize> {//^^^^^^^^^^^^^^^^^^^常泛型定义.list: [T; LENGTH]//^^^^^^在此使用它.
}

现在,如果使用Array<u8,32>,编译器生成Array单态版本,如下:

struct Array<u8, 32> {list: [u8; 32]
}

更多

稳定array::IntoIter

作为泛型稳定的一部分,还在稳定使用它的新API,即std::array::IntoIter.IntoIter允许在数组上创建按值迭代器.
以前,不方便遍历数组的拥有值,只能引用它们.

fn main() {let array = [1, 2, 3, 4, 5];//以前for item in array.iter().copied() {println!("{}", item);}//现在for item in std::array::IntoIter::new(array) {println!("{}", item);}
}

注意,这是按独立方法添加的,而不是数组上的.into_iter(),因为这会引入一定程度的破坏;目前.into_iter()是指切片引用迭代器.

Cargo的新功能解析器

Cargo.toml中有个新的解析器选项,可在其中设置resolver="2"来告诉cargo试一个新的方法来解析功能.
开发,主机,目标依赖项,细节

[package]
resolver = "2"
//或工作区.
[workspace]
resolver = "2"

拆分调试信息

[profile.dev]
split-debuginfo = "unpacked"

稳定api

总之,该版本稳定了18种新方法,适合各种类型,如slicePeekable.注意ptr::addr_of!ptr::addr_of_mut!稳定性,它允许你创建指向未对齐字段原始指针.
两个宏允许安全创建未对齐的指针.

use std::ptr;
#[repr(packed)]
struct Packed {f1: u8,f2: u16,
}
let packed = Packed { f1: 1, f2: 2 };//`'&packed.f2'`创建未对齐的引用,因此是未定义行为!
let raw_f2 = ptr::addr_of!(packed.f2);
assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);

以下方法已稳定.

Arc::decrement_strong_count
Arc::increment_strong_count
Once::call_once_force
Peekable::next_if_eq
Peekable::next_if
Seek::stream_position
array::IntoIter
panic::panic_any
ptr::addr_of!
ptr::addr_of_mut!
slice::fill_with
slice::split_inclusive_mut
slice::split_inclusive
slice::strip_prefix
slice::strip_suffix
str::split_inclusive
sync::OnceState
task::Wake

1.52.0稳定版

以前,先运行cargo check,然后运行cargo clippy不会运行Clippy:Cargo中的构建缓存不会区分两者.但是,在1.52中,已修复此问题.

已稳定以下方法.

Arguments::as_str
char::MAX
char::REPLACEMENT_CHARACTER
char::UNICODE_VERSION
char::decode_utf16
char::from_digit
char::from_u32_unchecked
char::from_u32
slice::partition_point
str::rsplit_once
str::split_once

以前稳定API现在是.

char::len_utf8
char::len_utf16
char::to_ascii_uppercase
char::to_ascii_lowercase
char::eq_ignore_ascii_case
u8::to_ascii_uppercase
u8::to_ascii_lowercase
u8::eq_ignore_ascii_case

1.53.0稳定版

数组的IntoIterator

这是数组实现IntoIterator特征的第一个Rust版本.现在可按值遍历数组:

for i in [1, 2, 3] {..
}

以前,只能用&[1,2,3][1,2,3].iter()引用来实现.
同样,你现在可把数组传递给需要T:IntoIterator的方法:

let set = BTreeSet::from_iter([1, 2, 3]);
for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) {..
}

或模式

模式语法已在任意位置支持嵌套|.这样可编写Some(1|2)而不是Some(1) | Some(2).

match result {Ok(Some(1 | 2)) => { .. }Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. }_ => { .. }
}

Unicode标识

标识现在可包含非ASCII符.现在可用UAX#31中定义的Unicode中的所有有效标识.包括许多不同脚本和语言的角色,但不包括表情符号.
如:

const BL HAJ: &str = "  ";
struct{名字: String,
}
let α = 1;

Cargo中的HEAD分支名支持

Cargo不再假定git仓库的默认HEAD名为master.

已稳定以下方法和特征实现.

array::from_ref
array::from_mut
AtomicBool::fetch_update
AtomicPtr::fetch_update
BTreeSet::retain
BTreeMap::retain
BufReader::seek_relative
cmp::min_by
cmp::min_by_key
cmp::max_by
cmp::max_by_key
DebugStruct::finish_non_exhaustive
Duration::ZERO
Duration::MAX
Duration::is_zero
Duration::saturating_add
Duration::saturating_sub
Duration::saturating_mul
f32::is_subnormal
f64::is_subnormal
IntoIterator for array
{integer}::BITS
io::Error::Unsupported
NonZero*::leading_zeros
NonZero*::trailing_zeros
Option::insert
Ordering::is_eq
Ordering::is_ne
Ordering::is_lt
Ordering::is_gt
Ordering::is_le
Ordering::is_ge
OsStr::make_ascii_lowercase
OsStr::make_ascii_uppercase
OsStr::to_ascii_lowercase
OsStr::to_ascii_uppercase
OsStr::is_ascii
OsStr::eq_ignore_ascii_case
Peekable::peek_mut
Rc::increment_strong_count
Rc::decrement_strong_count
slice::IterMut::as_slice
AsRef<[T]> for slice::IterMut
impl SliceIndex for (Bound<usize>, Bound<usize>)
Vec::extend_from_within

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

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

相关文章

leetcode做题笔记242. 有效的字母异位词

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…

linux rsyslog综合实战1

本次我们通过rsyslog服务将A节点服务器上的单个日志(Path:/var/log/245-1.log)实时同步到B节点服务器目录下(Path:/opt/rsyslog/245) 1.rsyslog架构 2.环境信息 环境信息 HostnameIpAddressOS versionModuleNotersyslog1192.168.10.245CentOS Linux release 7.9.2009 (Core)rs…

类与对象(上篇)

前言 在之前我们学的C入门主要是为现在学习类与对象打基础&#xff0c;今天我们才算真正开始学习C了。因为类与对象的知识点比较多&#xff0c;所以我们将它分为三部分讲解&#xff0c;今天我们学习类与对象的上篇。 一、面向过程和面向对象的初步认识 1、面向过程 面向过程顾…

Android 电量优化概览

目录 一、三大耗电模块 二、显示 2.1 Overdraw简介 2.2 Overdraw检测 2.3 UI优化优化 三、网络 3.1 移动网络 3.2 Wi-Fi 3.3 网络优化 四、CPU 4.1 变频 4.2 CPU优化 4.2.1 计算优化 4.2.2 避免WakeLock使用不当 4.2.3 避免Alarm Manager使用不当 4.2.4 使用Jo…

[github初学者教程] 分支管理-以及问题解决

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于新西兰奥克兰大学攻读IT硕士学位。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。跨领域…

QT中使用unity

qt把unity发入widget中 头文件showunitywindowsinqt #ifndef SHOWUNITYWINDOWSINQT_H #define SHOWUNITYWINDOWSINQT_H #include <QObject> #include <QProcess> #include <windows.h> #include <winuser.h> #include <QDebug> class ShowUnity…

工作记录---为什么双11当天不能申请退款?(有趣~)

为什么&#xff1f; 服务降级了 服务降级&#xff1a; 当服务器压力剧增的情况下&#xff0c;根据实际业务情况及流量&#xff0c;对一些服务和页面有策略的不处理或换种简单的方式处理&#xff0c;从而释放服务器资源以保证核心交易正常运作或高效运作。 分布式系统的降级…

用Java实现贪吃蛇小游戏

一、创建新项目 首先创建一个新的项目&#xff0c;并命名为贪吃蛇。 其次在贪吃蛇项目下创建一个名为images的文件夹用来存放游戏相关图片。 然后再在项目的src文件下创建一个com.xxx.view的包用来存放所有的图形界面类&#xff0c;创建一个com.xxx.controller的包用来存放启…

基于AVR单片机的心电信号获取与分析

基于AVR单片机的心电信号获取与分析是一项常见的生物医学工程应用&#xff0c;用于监测和分析人体的心脏活动。本文将介绍基于AVR单片机的心电信号获取与分析的原理和设计&#xff0c;并提供相应的代码示例。 1. 概述 心电信号是记录和分析心脏电活动的重要手段。AVR单片机是…

04.webpack中css的压缩和抽离

1.抽离css文件 利用mini-css-extract-plugin插件&#xff0c;替代style-loader const MiniCssExtractPlugin require(mini-css-extract-plugin) module.exports smart(webpackCommonConf, {mode: production,output: {// filename: bundle.[contentHash:8].js, // 打包代码…

Oracle Data Redaction和Oracle Data Pump

本实验的使用环境基于之前的博客&#xff1a;一个简单的Oracle Redaction实验 本实验参考文档为15.14 Oracle Data Redaction and Oracle Data Pump 先创建directory并赋权&#xff1a; -- connect to database or pluggable database alter session set containerorclpdb1;…

mysql 中with的用法(3)

有表&#xff08;tb&#xff09;,数据如下&#xff1a; 请用SQL,生成如下的样式&#xff1a; 一、建表 CREATE TABLE tb (id varchar(3) DEFAULT NULL,pid varchar(3) DEFAULT NULL,name varchar(64) DEFAULT NULL ) INSERT INTO tb (id, pid, name) VALUES(002, 0, 浙江省)…

docker更换国内源

docker更换国内源 1、编辑Docker配置文件 在终端中执行以下命令&#xff0c;编辑Docker配置文件&#xff1a; vi /etc/docker/daemon.json2、添加更新源 在打开的配置文件中&#xff0c;添加以下内容&#xff1a; {"registry-mirrors": ["https://hub-mirror…

Chrome中设置安全来源域名

目的&#xff1a; 使得本地映射的域名能被浏览器安全访问&#xff0c;允许调用设备资源 步骤&#xff1a; 在Chrome中导航栏打开 chrome://flags/#unsafely-treat-insecure-origin-as-secure 填入hosts域名&#xff1a;如 http://h5-twzc003.local.com 参考&#xff1a; h…

赴日开发工程师是做什么的?

日本的软件开发岗位对技术要求和沟通能力都有较高的要求&#xff0c;赴日开发工程师主要负责软件设计、开发和测试&#xff0c;包括编写代码、测试代码和修复漏洞等工作。开发人员必须对软件架构、设计模式和业务逻辑有深入的理解&#xff0c;并能做出合适的技术决策。 当然&a…

时间序列与 Statsmodels:预测所需的基本概念(1)

后文&#xff1a;时间序列与 statsmodels&#xff1a;预测所需的基本概念&#xff08;2&#xff09;-CSDN博客 一、说明 本博客解释了理解时间序列的基本概念&#xff1a;趋势、季节性、白噪声、平稳性&#xff0c;并使用自回归、差分和移动平均参数进行预测示例。这是理解任何…

江湖再见,机器视觉兄弟们,我已经提离职了,聪明的机器视觉工程师,离职不亏本!

我闻江湖已叹息&#xff0c;又闻人间繁闹闹。同为布衣沦落人&#xff0c;相逢何必曾相识。 此生谁料事事休&#xff0c;道不尽人情冷暖&#xff0c;聚散离合总平常&#xff0c;不似勇气少年时。 我估计今年公司年底是发不出工资了&#xff0c;因为订单续不上。年终奖更是没有&…

鸢尾花分类

第1关&#xff1a;什么是决策树 1.AB 2.B 第2关&#xff1a;信息熵与信息增益 import numpy as npdef calcInfoGain(feature, label, index):计算信息增益:param feature:测试用例中字典里的feature&#xff0c;类型为ndarray:param label:测试用例中字典里的label&#xf…

Android 弹出自定义对话框

Android在任意Activity界面弹出一个自定义的对话框&#xff0c;效果如下图所示: 准备一张小图片&#xff0c;右上角的小X图标64*64&#xff0c;close_icon.png&#xff0c;随便找个小图片代替&#xff1b; 第一步&#xff1a;样式添加&#xff0c;注意&#xff1a;默认在value…

Go 内存分配:结构体中的优化技巧

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 在使用Golang进行内存分配时&#xff0c;我们需要遵循一系列规则。在深入了解这些规则之前&#xff0c;我们需要先了解变量的对齐…