2311rust,到35版本更新
1.32.0
rustup self update
rustup update stable
rustup
更新自己.
dbg
宏
打印
调试,你需要:
let x = 5;
println!("{:?}", x);
//甚至可能是
println!("{:#?}", x);
在Rust1.32.0
中,为此
添加了个新的dbg!
宏:
fn main() {let x = 5;dbg!(x);
}
如果运行此程序
,会看到:
[src/main.rs:4] x = 5
你获得了调用此文件的文件和行号
,及名字和值
.此外,println!
打印到标准输出
,所以要用eprintln!
打印到标准错误.dbg!
干活,然后在stderr
输出.
看看阶乘
示例:
fn factorial(n: u32) -> u32 {if n <= 1 {n} else {n * factorial(n - 1)}
}
如果想调试
它,可用eprintln
这样:
fn factorial(n: u32) -> u32 {eprintln!("n: {}", n);if n <= 1 {eprintln!("n <= 1");n} else {let n = n * factorial(n - 1);eprintln!("n: {}", n);n}
}
想在每次迭代
时记录n
,并为每个分支
提供某种环境.查看factorial(4)
的输出:
n: 4
n: 3
n: 2
n: 1
n <= 1
n: 2
n: 6
n: 24
使用dbg!
fn factorial(n: u32) -> u32 {if dbg!(n <= 1) {dbg!(1)} else {dbg!(n * factorial(n - 1))}
}
得到的输出:
[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = true
[src/main.rs:4] 1 = 1
[src/main.rs:5] n * factorial(n - 1) = 2
[src/main.rs:5] n * factorial(n - 1) = 6
[src/main.rs:5] n * factorial(n - 1) = 24
[src/main.rs:11] factorial(4) = 24
因为dbg!
宏返回正在调试
的值,而不是eprintln!
版的返回()
,不能更改
代码结构.
默认删除jemalloc
Rust1.28
发布了可选择
全局分配器的方法,就开始计划把默认
分配器切换到系统
分配器,并允许你通过crate
使用jemalloc
.在Rust1.32
中,终于完成了这项工作,默认,你获得程序
的系统
分配器.
如果想继续使用jemalloc
,这里.在你的Cargo.toml
中:
jemallocator = "0.1.8"
在仓库
根目录:
#[global_allocator]
static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc;
就是这样!如果不需要jemalloc
,不会强加给你,如果确实
需要它,只需几行代码
即可.
最终模块改进
现在叫"统一路径
",它允许以前无效
的导入路径语句按非导入
路径完全相同方式解析.如:
enum Color { Red, Green, Blue }
use Color::*;
此代码以前未编译,因为use
语句必须以super,self
或crate
开头.现在编译器
支持统一路径
,此代码将起作用,并执行期望操作:导入use
语句上方定义
的Color
枚举的变体.
改进宏
首先,添加了新的字面匹配器
,这里:
macro_rules! m {($lt:literal) => {};
}
fn main() {m!("some string literal");
}
字面
与任意类型
字面匹配:串字面,数字字面,符字面
.
在2018
版中,也可用macro_rules
宏如下用?
:
macro_rules! bar {($(a)?) => {}
}
?
匹配模式
的零次或一次
重复,类似*/+
.
稳定库
制作了19
个函数const fn
,且所有整数
数值原语
,现在都提供与字节数组
间带指定
字节序的转换函数
.
六个
函数分别叫to_<endian>_bytes
和from_<endian>_bytes
,其中<endian>
是以下函数之一:
ne
-原生字节序
le
-小端
be
-大端
货物特点
Cargo
的cargo c
为cargo check
的别名,现在允许在注册URL
中使用用户名
.
1.33.0
稳定版
改进const fn
现在,使用const fn
可做更多:
const fn foo((x, y): (u8, u8)) { ... }
//析构模式.
1,let
绑定与可变let
绑定
let x = 1;//绑定
let mut x = 1;//可变绑定.
2,(如x=y
)赋值
和赋值符号
(如x+=y
)式,即使
赋值目标是投影
(如结构字段或索引操作
,如x[3]=42
)
3,式
语句(如3;
)
4,还可在const fn
中如下调用const unsafe fn
:
const unsafe fn foo() -> i32 { 5 }
const fn bar() -> i32 {unsafe { foo() }
}
固定
两类固定:std::pin::Pin<P>
类型和Unpin
标记特征.std::pin
的核心思想:
有时,要保证对象不会移动
,典型示例
是构建自引用结构
,移动
指向自身指针的对象
会使它们失效,从而导致未定义行为
.
Pin<P>
确保指针
是固定
的.
按_
导入
现在可按_
导入项目.允许导入
特征的实现
,且名字空间
中没有
该名.如
use std::io::Read as _;
//允许,因为模块中只有一个"读取".
pub trait Read {}
稳定库
1,overflowing_{add,sub,mul,shl,shr}
方法,现在是所有数值类型
的常量函数
.
2,rotate_left,rotate_right
和wrapping_{add,sub,mul,shl,shr}
方法,现在是所有数值类型
的常量函数
.
3,is_positive
和is_negative
方法现在是所有整数值
类型的常量函数
.
4,所有NonZero
类型的get
方法现在都是const
.
5,count_ones,count_zeros,leading_zeros,trailing_zeros,swap_bytes,from_be,from_le,to_beto_le
方法,现在对所有数值类型
都是常量.
6,Ipv4Addr::new
现在是const
函数.
此外,这些API
已稳定:
1,unix::FileExt::read_exact_at
和unix::FileExt::write_all_at
.
2,Option::transpose
和Result::transpose
3,convert::identity
4,pin::Pin
和marker::Unpin
(如上)
5,marker::PhantomPinned
6,Vec::resize_with
和VecDeque::resize_with
7,持续时间::as_millis
,持续时间::as_micros
和持续时间::as_nanos
.
在1.34.0
稳定版
在此版本中,Cargo
支持备用
注册.它与crates.io
共存,因此你可编写依赖于crates.io
和自定义注册表中的crate
的软件.
然而,crates.io
上的仓库不能依赖外部
注册.
要使用备用注册,必须添加如下行到.cargo/config
中.可在(~/.cargo/config)
你的主目录中,也可在相对包
目录添加此文件
.
[registries]
my-registry = { index = "https://my-intranet:8080/git/index" }
在Cargo.toml
中指定依赖项时,请用注册表项让Cargo
知道想从备用
注册表中取crate
:
[dependencies]
other-crate = { version = "1.0", registry = "my-registry" }
作为crate
作者,如果想把注册crate
发布到备用表,首先要用cargo login
命令,把认证
令牌保存到~/.cargo/credentials
中:
cargo login --registry=my-registry
然后,可用--registry
标志指示
发布时要使用的注册表
:
cargo publish --registry=my-registry
文档测试中用?
RFC1937
提议增加了对在fnmain(),#[test]
函数和doctests
中使用?
符号的支持,允许它们返回Option<T>
或Result<T,E>
,错误值
会导致fn main()
中的非零
退出码,而在测试
时会导致测试失败
.
此版本中,在doctests
完全支持?
.现在,可在文档测试中编写
以下内容:
/// ```rust
/// use std::io;
/// let mut input = String::new();
/// io::stdin().read_line(&mut input)?;
/// # Ok::<(), io::Error>(())
/// ```
fn my_func() {}
仍必须在文档测试
底部,指定要使用
的错误类型.
自定义属性接受任意令牌流
Rust
中过程宏
可定义使用的自定义属性
.目前,限制为根据指定语法的路径和字面树
,如:
#[foo(bar)]
#[foo = "bar"]
#[foo = 0]
#[foo(bar = true)]
#[foo(bar, baz(quux, foo = "bar"))]
与过程宏
不同,这些助手属性
不能接受分隔符
中的任意令牌流
,因此无法编写#[range(0..10)]
或#[bound(T:MyTrait)]
.过程宏crate
改用串来指定此语法,如#[range("0..10")]
.
在该Rust
版本中,#[attr($tokens)]
自定义属性与宏
一样,现在接受$tokens
中的任意令牌流.
TryFrom
和TryInto
允许易出错
类型转换的TryFrom
和TryInto
特征已稳定.
如,整数
类型的from_be_bytes
和相关带数组方法
,但数据
一般通过切片
读入.手动转换
切片和数组很麻烦.有了新的特征
,就可用.try_into()
内联完成.
let num = u32::from_be_bytes(slice.try_into()?);
对不会失败
的转换(如u8
到u32
),添加了Infallible
类型.这样,允许对所有现有的From
实现全面实现TryFrom
.未来,可能想将Infallible
变成!
(从不)类型.
弃用FN before_exec
,选择unsafe fn pre_exec
在Unix
类系统上,CommandExt::before_exec
函数在调用exec
之前,允许调度要运行的闭包
.
提供的闭包
在分叉
后的子进程
环境中运行.即资源(如文件描述符和内存映射区域
)可能会重复.即,现在可复制非Copy
类型的值到其他
进程中,同时在父进程
中保留
原值.
这样就有可能导致未定义行为
,并破坏了不重复的假设
.
因此,应按不安全
标记该before_exec
函数.该版本的Rust
中,弃用了fn before_exec
,并使用unsafe fn pre_exec
.
调用CommandExt::pre_exec
时,由你确保闭包
不会因无效使用
这些重复项而违反库不变性
.如果你提供的库与before_exec
类似,请同样考虑弃用
并提供不安全
替代方法.
稳定库
在1.34.0
中,扩展了稳定的原子整数类型集
,现在提供了从8位(AtomicU8)
到64
位的有符号和正变体
.
以前,(如NonZeroU8
)非零正整数
类型是稳定的.这使得Option<NonZeroU8>
的大小与u8
相同.在该Rust
版本中,(如NonZeroI8
)签名版本,已稳定下来.
iter::from_fn
和iter::successors
函数已稳定.前者允许从Fn Mut()->Option<T>
构造迭代器
.要从向量
中迭代
弹出元素,现在可编写from_fn(||vec.pop())
.
同时,后者
创建了个每个连续项
都根据前一项
计算的新迭代器
.
此外,这些API
已稳定:
Any::type_id
Error::type_id
slice::sort_by_cached_key
str::escape_debug
str::escape_default
str::escape_unicode
str::split_ascii_whitespace
Instant::checked_add
Instant::checked_sub
SystemTime::checked_add
SystemTime::checked_sub
1.34.1
稳定版修复
以下代码片中,期望
方法需要dep:&D
,但dep
的实际类型是&&D
:
dependencies.iter().filter(|dep| dep.required());
Clippy
错误地建议了.filter(Dependency::required)
,因为借用的差异,编译器拒绝
了.
clippy::missing_const_for_fn
中的误报
修复了missing_const_for_fn
棉绒中的另一个误报.此lint
没有考虑到trait
实现中的函数不能是const fn
.如,给定以下代码片时,触发lint
:
#[derive(PartialEq, Eq)] //警告:是一个`const_fn`
struct Point(isize, isize);
impl std::ops::Add for Point {type Output = Self;fn add(self, other: Self) -> Self { //警告:是一个`const_fn`Point(self.0 + other.0, self.1 + other.1)}
}
1.34.2
稳定版
SeanMcArthur
报告了个影响标准库
的安全漏洞,该漏洞导致在手动实现Error::type_id
方法返回错误的TypeId
时,Error::downcast
系列方法执行不合理的转换,从而导致越界读取/写入
等安全问题.
相关文章:
2311rust,到35版本更新
1.32.0 rustup self update rustup update stablerustup更新自己. dbg宏 打印调试,你需要: let x 5; println!("{:?}", x); //甚至可能是 println!("{:#?}", x);在Rust1.32.0中,为此添加了个新的dbg!宏: fn main() {let x 5;dbg!(x); }如果运行此…...

UniPro提高集成能力 让客户专注于交付价值
一千个哈姆莱特就有一千个读者,一千个开发团队,也会有各不相同的软件工具和工作流程。工具与工具之间,功能上的割裂亦或重叠,都会给企业和团队的协作带来阻塞,结果就会导致团队之间各自为战、信息孤岛的形成以及资源的…...
Python---函数的作用,定义,使用步骤(调用步骤)
Python实际开发中,使用函数的目的只有一个 “让我们的代码可以被重复使用” 函数的作用有两个: ① 模块化编程 ② 代码重用 在编程领域,编程可以分为两大类:① 模块化编程 ② 面向对象编程 函数就是一个 被命名的、独立的…...

ERP智能管理系统:智能化的未来之路
ERP智能管理系统:智能化的未来之路 科技飞速发展,人工智能(AI)和大数据等先进技术的应用正在改变着企业的运营模式。其中,ERP智能管理系统在帮助企业实现智能化运营、提高效率、降低成本等方面发挥着越来越重要的作用。本文将为您详细介绍ERP…...
c++ memccpy和 = 都可以用于赋值操作
memccpy和都可以用于赋值操作,但它们的作用和使用方式有所不同。 是C中的赋值运算符,可以用于基本类型、对象、结构体等的赋值操作。对于结构体,它会执行成员到成员的赋值,也就是浅拷贝。如果结构体中有指针成员,赋值只…...
Golang for 循环中的隐式内存别名问题
Golang for 循环中的隐式内存别名问题 隐式内存别名是指在循环迭代过程中对同一变量的多次引用可能导致不可预期的结果。这主要涉及到 goroutine 和闭包的使用场景,在并发编程中容易引起 bug。 例如,下面的示例代码中存在隐式内存别名问题:…...

2023年亚太杯数学建模思路 - 复盘:光照强度计算的优化模型
文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…...
Unity——利用Mesh绘制图形
什么是Mesh? Mesh 是用于表示和存储3D模型几何信息的类。它包含了顶点坐标、法线、UV坐标和其他与几何形状相关的数据,同时也包含了定义了这些数据如何连接以形成三角形的索引。 通过Mesh类,你可以创建、修改和渲染3D模型。一些常见的操作包括…...

web3资讯及远程工作
各位如果想了解区块链相关的消息可以通过如下网址了解,里面还会有相关职位招聘(包括远程工作),还可以在里面进行发帖,进入即可获得1000积分,后期可以兑换一些礼品Cryptosquare...

契约锁助力货物进出口全程无纸化,加速通关、降低贸易成本
我国作为全球最大的制造业国家和最大的货物贸易国家,政府始终注重引入数字化技术,创新管理和服务模式,帮助降低企业进出口成本,加速货物流通。 近年国家海关总署、商务部、税务总局及各地政府在进出口“报关”、“提货”、“收货备…...
生活中的综合能力
暖气管道不通 1 逐层排查哪层管道不通 2 排查该栋楼主管道和锅炉房总管道的连接口是否通畅 找不到主管道和总管道的连接口 查看其他楼和总管道的连接口 复盘: 先整体,后局部 求同求异思维:找差异,找正常暖气管道和异常暖气管…...

ES5中实现继承
本篇文章主要说明在ES5中最通用最兼容的继承实现方式,继承作为面向对象的三大特性之一,在js中实现继承对代码的简洁性,逻辑的连贯性都有很大的帮助。 实现思路 封装创建中间联系对象的函数 继承可以简单理解为建立子类和父类之间的联系&…...

面试鸭 - 专注于面试刷题的网站
网上面试题有很多,但此套面试题真实、原创、高频,全网最强。 题目涵盖大中小公司,真实靠谱,有频率和难度的标记,助你成为Offer收割机。 面试鸭地址:https://mianshiya.skyofit.com/ 本套题是我原创&…...
解决小程序路由超过10层限制
新建 navroter.js // 路由判断,小程序路由超过10层限制 // 避免小程序商品重复切换导致页面到结算单页时无法跳转到收货地址页,所以这里层级限制最大数为8 const MAX_VALUE 8 export function navigateTo(url) {let pages getCurrentPages()let dlt …...
【ceph】AI时代-数据为王-ceph存储将成为未来比较看好的赛道之一,为什么不all in一把学习一个不那么卷的赛道呢?
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
《小·意·思》特殊符号
title: 《小意思》特殊符号 date: 2023-11-17 15:27:21 updated: 2023-11-17 15:27:21 categories: 小意思 excerpt: 上下标号、标点、运算符、标号、时间相关、语言、货币、音乐、形状符号、其他符号。 comments: false tags: top_image: /images/backimg/SunsetClimbing.png …...

Web server failed to start. Port 8080 was already in use.
Windows 服务端口被占用,杀死进程命令: netstat -ano | findstr 8080taskkill -PID [xxx] -F...

蓝桥杯第三周算法竞赛D题E题
发现更多计算机知识,欢迎访问Cr不是铬的个人网站 D迷宫逃脱 拿到题目一眼应该就能看出是可以用动态规划来解决。但是怎么定义dp呢? 这个题增加难度的点就在当所在位置与下一个要去的位置互质的时候,会消耗一把钥匙。当没有钥匙的时候就不能移动了。想…...

国家大基金三期线上金融正式倒计时!11月17日,共启芯片产业新篇章
国家大基金三期线上金融正式倒计时!11月17日,共启芯片产业新篇章 新时代浪潮下,全球化进程不断推动各科技大国的核心发展,芯片作为强有力的竞争标志,是国与国之间的重要技术战争焦点。同时,国内基金发展势…...
Chrony让内网设备时间同步
Centos 搭建NTP服务器 背景:公司服务器时间不同步导致一些认证功能无法使用,网络设备时间不同步日志信息不准确,因此想要在内网搭建一个NTP服务器,作为客户端同步网络时间服务器,作为服务端为内网其他终端提供授时服务…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...