当前位置: 首页 > news >正文

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,selfcrate开头.现在编译器支持统一路径,此代码将起作用,并执行期望操作:导入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>_bytesfrom_<endian>_bytes,其中<endian>是以下函数之一:
ne-原生字节序
le-小端
be-大端

货物特点
Cargocargo ccargo 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_rightwrapping_{add,sub,mul,shl,shr}方法,现在是所有数值类型常量函数.
3,is_positiveis_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_atunix::FileExt::write_all_at.
2,Option::transposeResult::transpose
3,convert::identity
4,pin::Pinmarker::Unpin(如上)
5,marker::PhantomPinned
6,Vec::resize_withVecDeque::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中的任意令牌流.

TryFromTryInto

允许易出错类型转换的TryFromTryInto特征已稳定.
如,整数类型的from_be_bytes和相关带数组方法,但数据一般通过切片读入.手动转换切片和数组很麻烦.有了新的特征,就可用.try_into()内联完成.

let num = u32::from_be_bytes(slice.try_into()?);

不会失败的转换(如u8u32),添加了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_fniter::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提高集成能力 让客户专注于交付价值

一千个哈姆莱特就有一千个读者&#xff0c;一千个开发团队&#xff0c;也会有各不相同的软件工具和工作流程。工具与工具之间&#xff0c;功能上的割裂亦或重叠&#xff0c;都会给企业和团队的协作带来阻塞&#xff0c;结果就会导致团队之间各自为战、信息孤岛的形成以及资源的…...

Python---函数的作用,定义,使用步骤(调用步骤)

Python实际开发中&#xff0c;使用函数的目的只有一个 “让我们的代码可以被重复使用” 函数的作用有两个&#xff1a; ① 模块化编程 ② 代码重用 在编程领域&#xff0c;编程可以分为两大类&#xff1a;① 模块化编程 ② 面向对象编程 函数就是一个 被命名的、独立的…...

ERP智能管理系统:智能化的未来之路

ERP智能管理系统&#xff1a;智能化的未来之路 科技飞速发展&#xff0c;人工智能(AI)和大数据等先进技术的应用正在改变着企业的运营模式。其中&#xff0c;ERP智能管理系统在帮助企业实现智能化运营、提高效率、降低成本等方面发挥着越来越重要的作用。本文将为您详细介绍ERP…...

c++ memccpy和 = 都可以用于赋值操作

memccpy和都可以用于赋值操作&#xff0c;但它们的作用和使用方式有所不同。 是C中的赋值运算符&#xff0c;可以用于基本类型、对象、结构体等的赋值操作。对于结构体&#xff0c;它会执行成员到成员的赋值&#xff0c;也就是浅拷贝。如果结构体中有指针成员&#xff0c;赋值只…...

Golang for 循环中的隐式内存别名问题

Golang for 循环中的隐式内存别名问题 隐式内存别名是指在循环迭代过程中对同一变量的多次引用可能导致不可预期的结果。这主要涉及到 goroutine 和闭包的使用场景&#xff0c;在并发编程中容易引起 bug。 例如&#xff0c;下面的示例代码中存在隐式内存别名问题&#xff1a;…...

2023年亚太杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…...

Unity——利用Mesh绘制图形

什么是Mesh? Mesh 是用于表示和存储3D模型几何信息的类。它包含了顶点坐标、法线、UV坐标和其他与几何形状相关的数据&#xff0c;同时也包含了定义了这些数据如何连接以形成三角形的索引。 通过Mesh类&#xff0c;你可以创建、修改和渲染3D模型。一些常见的操作包括&#xf…...

web3资讯及远程工作

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

契约锁助力货物进出口全程无纸化,加速通关、降低贸易成本

我国作为全球最大的制造业国家和最大的货物贸易国家&#xff0c;政府始终注重引入数字化技术&#xff0c;创新管理和服务模式&#xff0c;帮助降低企业进出口成本&#xff0c;加速货物流通。 近年国家海关总署、商务部、税务总局及各地政府在进出口“报关”、“提货”、“收货备…...

生活中的综合能力

暖气管道不通 1 逐层排查哪层管道不通 2 排查该栋楼主管道和锅炉房总管道的连接口是否通畅 找不到主管道和总管道的连接口 查看其他楼和总管道的连接口 复盘&#xff1a; 先整体&#xff0c;后局部 求同求异思维&#xff1a;找差异&#xff0c;找正常暖气管道和异常暖气管…...

ES5中实现继承

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

面试鸭 - 专注于面试刷题的网站

网上面试题有很多&#xff0c;但此套面试题真实、原创、高频&#xff0c;全网最强。 题目涵盖大中小公司&#xff0c;真实靠谱&#xff0c;有频率和难度的标记&#xff0c;助你成为Offer收割机。 面试鸭地址&#xff1a;https://mianshiya.skyofit.com/ 本套题是我原创&…...

解决小程序路由超过10层限制

新建 navroter.js // 路由判断&#xff0c;小程序路由超过10层限制 // 避免小程序商品重复切换导致页面到结算单页时无法跳转到收货地址页&#xff0c;所以这里层级限制最大数为8 const MAX_VALUE 8 export function navigateTo(url) {let pages getCurrentPages()let dlt …...

【ceph】AI时代-数据为王-ceph存储将成为未来比较看好的赛道之一,为什么不all in一把学习一个不那么卷的赛道呢?

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;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 服务端口被占用&#xff0c;杀死进程命令&#xff1a; netstat -ano | findstr 8080taskkill -PID [xxx] -F...

蓝桥杯第三周算法竞赛D题E题

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

国家大基金三期线上金融正式倒计时!11月17日,共启芯片产业新篇章

国家大基金三期线上金融正式倒计时&#xff01;11月17日&#xff0c;共启芯片产业新篇章 新时代浪潮下&#xff0c;全球化进程不断推动各科技大国的核心发展&#xff0c;芯片作为强有力的竞争标志&#xff0c;是国与国之间的重要技术战争焦点。同时&#xff0c;国内基金发展势…...

Chrony让内网设备时间同步

Centos 搭建NTP服务器 背景&#xff1a;公司服务器时间不同步导致一些认证功能无法使用&#xff0c;网络设备时间不同步日志信息不准确&#xff0c;因此想要在内网搭建一个NTP服务器&#xff0c;作为客户端同步网络时间服务器&#xff0c;作为服务端为内网其他终端提供授时服务…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...