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...
精准权限控制:Excel限制密码设置与使用技巧
当Excel表格发出去后,你是否会担心表格被随意修改?其实,Excel提供的“限制密码”就能很好的避免这个问题。下面一起来看看具体如何使用吧!一、认识两种限制密码Excel的限制密码分为两大类:保护工作表和保护工作簿。前者…...
GLM-4.1V-9B-Base惊艳输出:支持追问式对话的图片理解连续推理演示
GLM-4.1V-9B-Base惊艳输出:支持追问式对话的图片理解连续推理演示 1. 视觉多模态模型新标杆 GLM-4.1V-9B-Base是智谱最新开源的视觉多模态理解模型,它重新定义了图片理解与交互的方式。不同于传统视觉模型只能做简单识别,这个9B参数的模型支…...
javaweb大学生校园跑腿服务系统的设计与实现沙箱支付
目录同行可拿货,招校园代理 ,本人源头供货商沙箱支付功能概述核心功能模块技术实现要点测试注意事项项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 沙箱支付功能概述 在JavaWeb校园跑…...
EPM7256AETC100-10N:Altera MAX 7000A系列CPLD,256宏单元,TQFP-100封装
做数字电路设计的人都遇到过这种尴尬:需要几个逻辑门、需要做个地址译码、需要把几个信号拼一下——专门放一颗MCU太浪费,用分立门电路又占地方,改一版PCB还得等两周。EPM7256AETC100-10N给出的答案很简单:把256个宏单元、5000个可…...
Loop:5分钟打造优雅Mac窗口管理,告别鼠标拖拽的烦恼
Loop:5分钟打造优雅Mac窗口管理,告别鼠标拖拽的烦恼 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否也经历过这样的场景:正在专注写代码,却要频繁拖…...
Qwen3-TTS语音合成5分钟快速部署:10种语言+方言一键搞定
Qwen3-TTS语音合成5分钟快速部署:10种语言方言一键搞定 1. 快速部署指南 1.1 系统环境准备 在开始前,请确保您的系统满足以下基本要求: 操作系统:支持Linux/Windows/macOSPython版本:3.8-3.10内存:至少…...
3大核心技术深度解析:D3KeyHelper如何重新定义暗黑3游戏辅助体验
3大核心技术深度解析:D3KeyHelper如何重新定义暗黑3游戏辅助体验 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款基于A…...
Qwen2.5-VL视觉定位效果展示:Ollama输出坐标+置信度+层级关系JSON
Qwen2.5-VL视觉定位效果展示:Ollama输出坐标置信度层级关系JSON 最近在玩一个挺有意思的AI模型——Qwen2.5-VL-7B-Instruct。这可不是普通的聊天机器人,它是一个能“看懂”图片,还能把看到的东西用结构化数据告诉你的视觉多模态模型。 简单…...
Pixel Couplet Gen效果展示:基于用户画像(年龄/地域)的像素春联风格个性化推荐
Pixel Couplet Gen效果展示:基于用户画像(年龄/地域)的像素春联风格个性化推荐 1. 项目概览 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的AI春联生成器。通过ModelScope大模型的强大生成能力,结合精心设计的8-…...
ESP32-S3双下载方案对比:VSCode一键烧录 vs 乐鑫Flash工具实操
ESP32-S3双下载方案深度评测:VSCode高效开发 vs 乐鑫工具链生产级部署 1. 开发环境配置与工具链解析 对于ESP32-S3开发者而言,选择正确的开发工具直接影响项目效率。当前主流方案可分为两类:基于VSCode的集成化开发环境和乐鑫官方Flash下载工…...
