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
,只允许对带Copy
的x
重复,且允许
在那里使用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
,你可编写对整数,布尔值或符类型的值
的泛型
代码!(使用struct
或enum
值仍不稳定).
看看定义,及用法.
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
种新方法,适合各种类型,如slice
和Peekable
.注意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
相关文章:
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 arra…...

【linux】补充:高效处理文本的命令学习(tr、uniq、sort、cut)
目录 一、tr——转换、压缩、删除 1、tr -s “分隔符” (指定压缩连续的内容) 2、tr -d 想要删除的东西 编辑 3、tr -t 内容1 内容2 将内容1全部转换为内容2(字符数需要一一对应) 二、cut——快速剪裁命令 三、uniq——去…...

Redis篇---第七篇
系列文章目录 文章目录 系列文章目录前言一、是否使用过 Redis Cluster 集群,集群的原理是什么?二、 Redis Cluster 集群方案什么情况下会导致整个集群不可用?三、Redis 集群架构模式有哪几种?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…...

Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一
你好,欢迎来到「Linux Shell脚本」学习专题,你将享受到免费的 Shell 编程资料,以及很棒的浏览体验。 这套 Shell 脚本学习指南针对初学者编写,它通俗易懂,深入浅出,不仅讲解了基本知识,还深入底…...

长短期记忆(LSTM)与RNN的比较:突破性的序列训练技术
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。 Why LSTM提出的动机是为了解…...

Swift 如何打造兼容新老系统的字符串分割(split)方法
0. 概览 在 Swift 的开发中,我们经常要与字符串打交道。其中一个常见的操作就是用特定的“分隔符”来分割字符串,这里分隔符可能不仅仅是字符,而是多字符组成的字符串。 从 iOS 16 开始, 新增了对应的方法来专注此事。不过&am…...

JVM面试必备
目录 JVM三大问题 一、JVM内存区域划分 编辑 二、JVM类加载机制 双亲委派模型(常考) 类加载的格式,类卸载 三、垃圾回收(GC) 具体垃圾回收GC步骤 1.判定对象是否为垃圾 方案1:引用计数 方案2:可达性分析 2.释放对象的…...

战神传奇【我本沉默精修版】win服务端+双端+充值后台+架设教程
搭建资源下载:战神传奇【我本沉默精修版】win服务端双端充值后台架设教程-海盗空间...

安卓手机投屏到电视,跨品牌、跨地域同样可以实现!
在手机网页上看到的视频,也可以投屏到电视上看! 长时间使用手机,难免脖子会酸。这时候,如果你将手机屏幕投屏到大电视屏幕,可以减缓脖子的压力,而且大屏的视觉体验更爽。 假设你有一台安卓手机,…...
python变量名解析总结
1 python变量名解析总结 点号和无点号变量名,用不同的处理方式。 (1) 无点号的变量名,比如X,使用的是作用域。 (2) 有点号的变量名,比如obj.X,使用对象的命名空间。 …...

端口号大揭秘:网络世界的“门牌号”有多牛?
大家好,今天我们来聊一聊网络中的端口号。如果你以为端口号只是冷冰冰的数字,那你就大错特错了。端口号,这些看似枯燥的数字背后,隐藏着一个个生动的故事。 目录 大家好,今天我们来聊一聊网络中的端口号。如果你以为端…...

vue解除数据双向绑定
let obj JSON.parse(JSON.stringify(data));例如,table列表中,点击编辑时,可对val进行如上操作来解除双向绑定...

组件插槽,生命周期,轮播图组件的封装,自定义指令的封装等详解以及axios的卖座案例
3.组件插槽 3-1组件插槽 注意 插槽内容可以访问到父组件的数据作用域,因为插槽内容本身就是在父组件模版中定义的 插槽内容无法访问子组件的数据.vue模版中的表达式只能访问其定义时所处的作用域,这和JavaScript的词法作用域是一致的,换言之: 父组件模版的表达式只能访问父组…...

小美的树上染色
美团2024届秋招笔试第一场编程真题 先提一个小知识:题目中凡是提到树结构都要使用图的存储方式,只有二叉树例外。 分析:在树结构中,孩子和父节点是相邻节点,而父节点可能有多个孩子节点。在染色的过程中,…...

1.rk3588的yolov5运行:pt_onnx_rknn转换及rknn在rk3588系统python运行
自己有点笨,查资料查了一周才完美的实现了yolov5在rk3588环境下的运行,在这里写具体步骤希望大家少走弯路。具体步骤如下: 一、yolov5的原代码下载及pt文件转换为onnx文件 1.yolov5的原代码下载及环境搭建 在这里一定要下载正确版本的源代码…...

适用于全部安卓手机的 5 大免费 Android 数据恢复
您是否面临这样一种情况,即在Android设备上丢失了一些重要文件,但不知道应该选择哪种Android数据恢复来取回它们? 如果您以前从未备份过Android数据,则很难解决问题。 本文将介绍排名前5位的免费Android数据恢复软件。 您可以获…...

【案例分享】BenchmarkSQL 5.0 压测 openGauss 5.0.0
一、前言 本次BenchmarkSQL 压测openGauss仅作为学习使用压测工具测试tpcc为目的,并不代表数据库性能如本次压测所得数据。实际生产性能压测,还需结合服务器软硬件配置、数据库性能参数调优、BenchmarkSQL 配置文件参数相结合,是一个复杂的过…...
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 //挂起到硬盘(休眠),关闭硬盘、外设等设备&…...

homeassiant主题
下载主题 https://github.com/maartenpaauw/home-assistant-community-themes.git 使用file editor到homeassiant路径下,新建文件夹themes文件夹,用terminal新建也可以。 使用file editor上传文件 使用Terminal解压 mkdir themes unzip home-assistan…...

《2020年最新面经》—字节跳动Java社招面试题
文章目录 前言:一面:01、Java基础知识答疑,简单概述一下?02、倒排索引了解吗?使用Java语言怎么实现倒排?03、详细讲解一下redis里面的哈希表,常用的Redis哈希表命名有哪些,举例说明其…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...