2311rust,到60版本更新
1.54.0
稳定版
属性可调用类似函数的宏
Rust1.54
支持在属性
中调用类似函数
的宏.类似函数的宏是像基于macro_rules!
宏一样调用的或像macro!(...)
一样的过程宏.
注意,常见用例是,在Rust
文档注解中包含其他文件中的文档
.如,如果项目的README
代表了一个很好的文档注释,则可用include_str!
直接整合
内容.
#![doc = include_str!("README.md")]
也可在属性中嵌套
宏.如,可用用stringify!
来包括替换的concat!
宏来构建
文档注释:
macro_rules! make_function {($name:ident, $value:expr) => {#[doc = concat!("The `", stringify!($name), "` example.")]/// #示例///```#[doc = concat!("assert_eq!(", module_path!(), "::", stringify!($name), "(), ",stringify!($value), ");")]///pub fn $name() -> i32 {$value}};
}
make_function! {func_name, 123}
更多.
稳定WASM32
内部函数
已稳定wasm32
平台的许多允许访问WebAssembly
中的SIMD
指令的内部函数
.
即可按完全安全
的函数公开
一些内部函数,如v128_bitselect
.但是,仍有一些内部函数
是不安全
的,因为它们使用原始指针,如v128_load
.
默认,重新启用增量编译
稳定的API
已稳定以下方法和特征实现
.
BTreeMap::into_keys
BTreeMap::into_values
HashMap::into_keys
HashMap::into_values
arch::wasm32
VecDeque::binary_search
VecDeque::binary_search_by
VecDeque::binary_search_by_key
VecDeque::partition_point
1.55.0
稳定版
Cargo
删除重复数据编译器错误
过去版本中,运行cargo test
,cargo check --all-targets
或类似的命令时,在多个配置
中构建了相同的Rust
仓库,因为是并行运行rustc
,可能会重复显示相同的错误和警告
.
如,在1.54.0
中,此输出很常见:
$ cargo +1.54.0 check --all-targetsChecking foo v0.1.0
warning: function is never used: `foo`--> src/lib.rs:9:4|
9 | fn foo() {}| ^^^|= note: `#[warn(dead_code)]` on by default
warning: 1 warning emitted
warning: function is never used: `foo`--> src/lib.rs:9:4|
9 | fn foo() {}| ^^^|= note: `#[warn(dead_code)]` on by default
warning: 1 warning emittedFinished dev [unoptimized + debuginfo] target(s) in 0.10s
在1.55
中,已调整为在编译结束
时删除重复数据
再打印报告:
$ cargo +1.55.0 check --all-targetsChecking foo v0.1.0
warning: function is never used: `foo`--> src/lib.rs:9:4|
9 | fn foo() {}| ^^^|= note: `#[warn(dead_code)]` on by default
warning: `foo` (lib) generated 1 warning
warning: `foo` (lib test) generated 1 warning (1 duplicate)Finished dev [unoptimized + debuginfo] target(s) in 0.84s
更快,更正确的浮点解析
已更新标准库的浮点解析
实现为提高速度和正确性
的Eisel-Lemire
算法,细节.
已更新std::io::ErrorKind
变体
std::io::ErrorKind
是一个可分类错误
为如NotFound
或WouldBlock
等可移植分类的#[non_exhaustive]
枚举.
有std::io::Error
的Rust
代码可调用kind
方法来取std::io::ErrorKind
,并匹配
该方法以处理指定错误.
并非所有错误
都归类为ErrorKind
值;在以前的Rust
版本中,未分类的错误
用ErrorKind::Other;
分类.
但是,用户创建的std::io::Error
值也常用ErrorKind::Other
.
在1.55
中,未分类的错误,现在使用内部变体ErrorKind::Uncategorized
,并打算隐藏它,且不能用稳定的Rust
代码命名;
这让ErrorKind::Other
专门构造非标准库的std::io::Error
值.这强制ErrorKind
的#[non_exhaustive]
本质.
Rust
代码永远不应与ErrorKind::Other
匹配,并期望特定的底层错误码
;仅当抓使用该错误类型
的已构造std::io::Error
时,才匹配ErrorKind::Other
.
匹配std::io::Error
的Rust
代码应总是用_
来表示未知错误类型
,此时,可匹配
底层错误码,或报告
错误,或冒泡
到调用代码.
此更改确保未知代码
匹配变体,必须使用既适合ErrorKind::Uncategorized
,也适合将来仅限nightly-only
的变体的_
抓所有模式.
添加了开区间模式
Rust1.55
稳定了模式
中使用
开区间:
match x as u32 {0 => println!("zero!"),1.. => println!("正数"),
}
细节.
稳定API
已稳定
以下方法和特征实现
.
Bound::cloned
Drain::as_str
IntoInnerError::into_error
IntoInnerError::into_parts
MaybeUninit::assume_init_mut
MaybeUninit::assume_init_ref
MaybeUninit::write
array::map
ops::ControlFlow
x86::_bittest
x86::_bittestandcomplement
x86::_bittestandreset
x86::_bittestandset
x86_64::_bittest64
x86_64::_bittestandcomplement64
x86_64::_bittestandreset64
x86_64::_bittestandset64
以下以前稳定的函数现在是常
.
str::from_utf8_unchecked
1.57.0
稳定版
在常环境中用恐慌!
以前版本Rust
,在const fn
和其他编译时环境中不可用恐慌!宏
.现在,已稳定下来.从而,其他几个标准库API
现在都可在常
中使用,比如assert!
.
现在必须用:
panic!("...")
//静态串
//或与{}搭配用的&str插值
panic!("{}", a)
该最小的稳定
已支持直接编译时
断定,如验证
类型的大小:
const _: () = assert!(std::mem::size_of::<u64>() == 8);
const _: () = assert!(std::mem::size_of::<u8>() == 1);
Cargo
自定义配置文件
Cargo
长期以来,一直支持四种配置文件
:dev,release,test
和bench
.在Rust1.57
中,支持任意命名
的配置文件
.
如,如果只想在最终生产版本
时,启用(LTO)
链接时优化,则在选择此配置文件
时,添加以下代码片
到Cargo.toml
会启用lto
标志,但避免普通发布
版本启用它.
[profile.production]
inherits = "release"
lto = true
注意,自定义
配置文件必须要继承的默认设置
的配置文件
.定义配置文件
后,构建时,可加上:
--profile production
目前,在单独的目录(在本例中为target/production
)中构建
,而不会在目录
间共享.
易错分配
Rust1.57
稳定了Vec,String,HashMap,HashSet
和VecDeque
的try_reserve
.
如果全局
分配器失败,Rust
一般会中止
进程,这并不总是可取的.此API
在使用标准库集合
时,可避免中止
.
但是,Rust
并不保证,由内核
分配返回内存
:如,如果在Linux
上启用了过提交(overcommit)
,则试使用
内存时,可能内存
不可用.
稳定的API
已稳定
以下方法和特征实现
.
[T; N]::as_mut_slice
[T; N]::as_slice
collections::TryReserveError
HashMap::try_reserve
HashSet::try_reserve
String::try_reserve
String::try_reserve_exact
Vec::try_reserve
Vec::try_reserve_exact
VecDeque::try_reserve
VecDeque::try_reserve_exact
Iterator::map_while
iter::MapWhile
proc_macro::is_available
Command::get_program
Command::get_args
Command::get_envs
Command::get_current_dir
CommandArgs
CommandEnvs
以前稳定
函数现在是常
.
hint::unreachable_unchecked
1.58.0
稳定版
格式串中抓标识
格式串
,现在只需在串
中写入{ident}
即可抓参数.长期以来格式
一直接受位置参数(可选按索引)和命名参数
,如:
println!("Hello, {}!", get_person()); //隐式位置
println!("Hello, {0}!", get_person()); //显式索引
println!("Hello, {person}!", person = get_person()); //命名
现在,还可从周围的域
抓命名参数
,如:
let person = get_person();
//...抓局部的"人"
println!("Hello, {person}!"); //
也可格式化
参数:
let (width, precision) = get_format();
for (name, score) in get_scores() {println!("{name}: {score:width$.precision$}");
}
格式串
只能抓普通标识
,而不能抓任意路径或表达式
.对更复杂的参数
,请先它们给局部名
,或使用较旧的name=式
风格来设置参数格式
.
化简窗口
命令搜索路径
在窗口
目标上,std::process::Command
不再在当前目录
中搜索可执行文件.这是win32
的CreateProcessAPI
的遗留行为,因此Rust
按以下顺序
有效搜索:
(相关Rust
)子级的PATH
环境变量中列举
的目录(如果从父级显式更改该环境变量
).
1,从加载应用
的目录.
2,父进程
的当前目录.
3,32
位窗口
系统目录.
4,16
位窗口
系统目录.
5,窗口
目录.
6,在PATH
环境变量中列举
的目录.
窗口
上Rust
的新命令
搜索顺序为:
1,子级的PATH
环境变量中列举
的目录.
2,从加载应用
的目录.
3,32
位窗口
系统目录.
4,窗口
目录.
5,在PATH
环境变量中列举
的目录.
非窗口
目标继续使用其相关平台
行为,一般只考虑子或父PATH
环境变量.
标准库中更多#[must_use]
类型或函数
可应用#[must_use]
属性,如果不显式
考虑它们,输出
就会出错.在标准库中,长期以来一直用Result
等类型,应检查
它们是否存在错误条件
.
类似函数
的纯
,但比真正
的语言功能
更宽松.
稳定的API
Metadata::is_symlink
Path::is_symlink
{integer}::saturating_div
Option::unwrap_unchecked
Result::unwrap_unchecked
Result::unwrap_err_unchecked
File::options
常函数
Duration::new
Duration::checked_add
Duration::saturating_add
Duration::checked_sub
Duration::saturating_sub
Duration::checked_mul
Duration::saturating_mul
Duration::checked_div
1.58.1
稳定版
Rust1.58.1
修复了std::fs::remove_dir_all
标准库函数中的竞争.
修复了Rustfmt
中的通过标准输入
时阻止格式化
生成的文件.
修复了rustc
有时显示的错误信息
.
1.59.0
稳定版
内联汇编
Rust
语言现在支持内联汇编
.这样,可执行非常低级
的控制
,或访问专门的机器指令
.
如,针对x86-64
目标编译时,现在可编写:
use std::arch::asm;
//用`移位和加法`乘6
let mut x: u64 = 4;
unsafe {asm!("mov {tmp}, {x}","shl {tmp}, 1","shl {x}, 2","add {x}, {tmp}",x = inout(reg) x,tmp = out(reg) _,);
}
assert_eq!(x, 4 * 6);
在asm!
和global_asm!
宏中的格式串
语法与Rust
格式串中使用
的相同.
内联汇编
的汇编语言和指令
因目标架构
而异.目前,稳定的Rust
编译器支持以下架构
的内联汇编
:
x86 and x86-64
ARM
AArch64
RISC-V
更多
内联汇编见示例.
解构赋值
现在,可用元组,切片和结构模式
作为赋值左侧
.
let (a, b, c, d, e);
(a, b) = (1, 2);
[c, .., d, _] = [1, 2, 3, 4, 5];
Struct { e, .. } = Struct { e: 5, f: 3 };
assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
使得赋值
与let
绑定更加一致,注意,禁止使用(如+=
)符号解构赋值
.
常
泛型默认值和交错
泛型
类型,现在可为常量泛型
指定默认值.如,现在可编写
以下内容:
struct ArrayStorage<T, const N: usize = 2> {arr: [T; N],
}
impl<T> ArrayStorage<T> {fn new(a: T, b: T) -> ArrayStorage<T> {ArrayStorage {arr: [a, b],}}
}
以前,必须在所有常
参数前指定类型参数
.已放宽该限制
,现在可交错
.
fn cartesian_product<T, const N: usize,U, const M: usize,V, F
>(a: [T; N], b: [U; M], f: F) -> [[V; N]; M]
whereF: FnMut(&T, &U) -> V
{//...
}
创建去掉的二进制文件
从分发
的二进制文件中去掉不必要的信息
(如debuginfo
)来使它们变小,一般很有用.
虽然,创建
二进制文件后总是可手动
这样,但cargo
和rustc
现在支持在链接
二进制文件时去掉.要启用
此功能,在Cargo.toml
中加上:
[profile.release]
strip = "debuginfo"
更多细节
稳定的API
已稳定以下方法和特征实现
:
std::thread::available_parallelism
Result::copied
Result::cloned
arch::asm!
arch::global_asm!
ops::ControlFlow::is_break
ops::ControlFlow::is_continue
TryFrom<char> for u8
char::TryFromCharError implementing Clone, Debug, Display, PartialEq, Copy, Eq, Error
iter::zip
NonZeroU8::is_power_of_two
NonZeroU16::is_power_of_two
NonZeroU32::is_power_of_two
NonZeroU64::is_power_of_two
NonZeroU128::is_power_of_two
DoubleEndedIterator for ToLowercase
DoubleEndedIterator for ToUppercase
TryFrom<&mut [T]> for [T; N]
UnwindSafe for Once
RefUnwindSafe for Once
armv8 neon intrinsics for aarch64
以下稳定
函数现在是常
:
mem::MaybeUninit::as_ptr
mem::MaybeUninit::assume_init
mem::MaybeUninit::assume_init_ref
ffi::CStr::from_bytes_with_nul_unchecked
相关文章:
2311rust,到60版本更新
1.54.0稳定版 属性可调用类似函数的宏 Rust1.54支持在属性中调用类似函数的宏.类似函数的宏是像基于macro_rules!宏一样调用的或像macro!(...)一样的过程宏. 注意,常见用例是,在Rust文档注解中包含其他文件中的文档.如,如果项目的README代表了一个很好的文档注释,则可用incl…...

【开源】基于Vue和SpringBoot的微信小程序的音乐平台
项目编号: S 055 ,文末获取源码。 \color{red}{项目编号:S055,文末获取源码。} 项目编号:S055,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…...

adb手机调试常用命令
查看手机型号 adb shell getprop ro.product.model 查看电池状况 adb shell dumpsys battery 查看分辨率 adb shell wm size 查看屏幕密度 adb shell wm density 查看显示屏参数 adb shell dumpsys window displays 查看android_id adb shell settings get secure android…...
IDEA常用插件合集
功能类: 1、Background Image Plus 换壁纸 2、Chinese(Simplified)... 中文语言包 3、Translation 代码翻译 4、Key Promoter X 快捷键提示插件 5、Rainbow bracket 彩虹括号插件 6、Code Glance 代码小地图 效率类 : 1、Tabnine AI Code C…...

【算法】滑动窗口题单——2.不定长滑动窗口(求最长/最大)
文章目录 3. 无重复字符的最长子串1493. 删掉一个元素以后全为 1 的最长子数组904. 水果成篮1695. 删除子数组的最大得分2841. 几乎唯一子数组的最大和2024. 考试的最大困扰度1004. 最大连续1的个数 III1438. 绝对差不超过限制的最长连续子数组2401. 最长优雅子数组解法1——维…...

电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

Libvirt-Qemu-Kvm 操作手记
(持续更新~) 本文主要用于记录在操作libvirt qemu kvm过程中遇到的问题及原因分析。 Hugepage 让qemu使用大页可以减少tdp的size,一定程度上可以提高性能;使用大页可以用memfd或者file backend。 memfd 操作步骤如下: 在系统中reserv…...
代码随想录算法训练营第二十八天| 78 子集 90 子集|| 93 复原IP地址
78 子集 由题意可知数组中的元素互不相同,所以在dfs中我们可以将当前的path直接加入到res中。 class Solution {List<List<Integer>>res new ArrayList<>();List<Integer>path new LinkedList<>();public List<List<Integer…...

9 HDFS架构剖析
问题 100台服务器,存储空间单个200GB 20T 5T文件如何存储? 128MB一块 128MB81GB 1288*10241TB 5T数据分成的128MB的块数 8192 * 5 客户端(client)代表用户通过与namenode和datanode交互来访问整个文件系统。 HDFS集群有两类节点: 一个na…...
Python中的迭代器、生成器和装饰器
当谈到Python中的迭代器、生成器和装饰器时,这三个概念都是与函数和数据处理密切相关的。让我们逐个深入了解它们。 1. 迭代器(Iterators): 迭代器是一个可以逐个访问元素的对象。在Python中,迭代器实现了两个方法&a…...
【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
小米路由器AX1800降级后的SSH登录和关墙等命令
http://192.168.31.1/cgi-bin/luci/;stok429aaa9c7f05ee7d0816a00257b8414a/api/misystem/set_config_iotdev?bssidXiaomi&user_idlongdike&ssid-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20s%…...
5-什么是猴子补丁,有什么用途?什么是反射,python中如何使用反射?http和https的区别?
1 什么是猴子补丁,有什么用途 **解释**1 Python猴子补丁(Monkey Patch)是一种在运行时动态修改代码的技术。通在不修改源代码的情况下,改变代码的执行方式或增加功能2 Monkey Patching是在 运行时(run time) 动态替换属性(attrib…...

深信服AC应用控制技术
拓扑图 目录 拓扑图 一.上班时间不允许使用qq(假设上班时间是上午9到12,下午14到18) 1.新增上班时间不允许使用qq访问权限策略 2.将策略应用到组,例如修仙部 3.验证 上班时间发现登录不了 下班时间可以登录 二.上班时间不允许访问视频网站(假设上班时…...

全新云开发工具箱:融合多项功能的微信小程序源码解决方案
全新云开发工具箱:融合多项功能的微信小程序源码解决方案 这款微信小程序源码提供了超过40个功能,集合了各种实用工具,成为一款全能工具箱。这些功能包括证件照制作、垃圾分类查询、个性签名制作、二维码生成、文字九宫格、手持弹幕、照片压…...

Android跨进程通信,IPC,RPC,Binder系统,C语言应用层调用
文章目录 Android跨进程通信,IPC,RPC,Binder系统,C语言应用层调用()1.概念2.流程3.bctest.c3.1 注册服务,打开binder驱动3.2 获取服务 4.binder_call Android跨进程通信,IPC…...

数据结构【DS】栈
共享栈 共享栈的目的是什么? 目的:有效利用存储空间。 共享栈的存取数据时间复杂度为? 存取数据时间复杂度为O(1) 共享栈如何判空?如何判满? 两个栈的栈顶指针都指向栈顶元素,𝑡𝑜𝑝…...
提高视频性能的 5 种方法
摆脱共享托管计划 如果您的网站每月收到数千名访问者,那么现在是时候放弃许多企业家和小型企业开始使用的共享托管计划了。在启动网站时选择廉价的托管计划是可以理解的,因为此类计划通常足以使用一年或更长时间,而不会影响性能。 在共享托…...
python有哪些高级的技术
Python作为一种功能强大且灵活的编程语言,具有许多高级技术和功能。以下是一些Python中常见的高级技术: 函数式编程:Python支持函数式编程范式,包括高阶函数、匿名函数(lambda函数)、闭包、以及针对序列的函…...

系列五、怎么查看默认的垃圾收集器是哪个?
一、怎么查看默认的垃圾收集器是哪个 java -XX:PrintCommandLineFlags -version...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...