2311rust,到46版本更新
1.43.0稳定版
项(item)片段
在宏中,可用项片段把项插值到特征,实现和extern块的块体中.如:
macro_rules! mac_trait {($i:item) => {trait T { $i }}
}
mac_trait! {fn foo() {}
}
这生成:
trait T {fn foo() {}
}
围绕原语的推导类型
改进了围绕原语,引用和二进制操作的推导类型.如下片段,
let n: f32 = 0.0 + &0.0;
在Rust1.42中,你会收到错误,说"嘿,不知道如何加f64和&f64,而结果是f32.该算法现在正确地决定0.0和&0.0都应该是f32.
测试新的Cargo环境变量
为了帮助整合测试,Cargo设置一些新的环境变量.
假设正在处理叫"cli"的命令行项目.如果正在编写整合测试,想调用该cli二进制文件并查看它的作用.
运行测试和基准测试时,Cargo会设置可在测试中使用的叫CARGO_BIN_EXE_cli的环境变量:
let exe = env!("CARGO_BIN_EXE_cli");
这使得调用cli更加容易,因为现在可直接调用.
更改库
现在,不必导入模块,可直接在浮点数和整数上使用关联常量.也即,现在不必用 std::u32;或用 std::f32;,就可编写u32::MAX或f32::NAN.
有个可重新导出Rust原语类型的新的原语模块.编写宏并想确保类型不会被遮蔽时,很有用.
此外,还稳定了6个新API:
Once::is_completed
f32::LOG10_2
f32::LOG2_10
f64::LOG10_2
f64::LOG2_10
iter::once_with
Rust1.43.1
1,修复了无法检测到的CPU功能
2,修复破损的cargo package --list
3,OpenSSL更新到1.1.1g
1.44.0稳定版
亮点是cargo中整合了cargo tree,并在no_std环境中支持async/await.
1.45.0稳定版
修复转换(cast)中的不健壮性
rustc使用LLVM作为编译器后端.编写如下代码时:
pub fn cast(x: f32) -> u8 {x as u8
}
Rust1.44.0及更早版本中的Rust编译器生成如下的LLVM-IR:
define i8 @_ZN10playground4cast17h1bdf307357423fcfE(float %x) unnamed_addr #0 {
start:%0 = fptoui float %x to i8ret i8 %0
}
fptoui实现了转换,它是"浮点到正整数"的缩写.
但有个问题.文档中说:
"fptoui"指令,把浮点数转换为最接近(圆整为零)的正整数值.如果该值不适合ty2,则结果有问题.
即:如果转换大浮点数为小整数,你会得到未定义行为.
即,如,如下没有明确定义:
fn cast(x: f32) -> u8 {x as u8
}
fn main() {let f = 300.0;let x = cast(f);println!("x: {}", x);
}
这就是所说的"健壮性"错误.
不过,花了很久才解决该错误.原因是不清楚正确的前进道路.
最后,决定这样:
1,as执行"饱和转换".
2,如果想跳过检查,添加新的不安全转换.
这与访问数组类似,如:
1,检查array[i]以确保数组至少有i+1个元素.
2,可用unsafe{array.get_unchecked(i)}跳过检查.
什么是饱和转换?看看稍微修改下的示例:
fn cast(x: f32) -> u8 {x as u8
}
fn main() {let too_big = 300.0;let too_small = -100.0;let nan = f32::NAN;println!("too_big_casted = {}", cast(too_big));println!("too_small_casted = {}", cast(too_small));println!("not_a_number_casted = {}", cast(nan));
}
这打印:
too_big_casted = 255
too_small_casted = 0
not_a_number_casted = 0
即,太大的数字会变成最大可能值.太小的数字会产生最小的可能值(即零).NaN产生零.
不安全方式转换的新API是:
let x: f32 = 1.0;
let y: u8 = unsafe { x.to_int_unchecked() };
但如常,这只是用作最后的手段.
稳定式,模式和语句中的类似函数的过程宏
目标是不要求你编写不安全代码.
像这样:
gobject_gen! {class MyClass: GObject {foo: Cell<i32>,bar: RefCell<String>,}impl MyClass {virtual fn my_virtual_method(&self, x: i32) {... 处理x ...}}
}
基本上只能在代码中的特定位置,调用gobject_gen!.
Rust1.45.0在三个新地方,增加了调用过程宏的功能:
//假定有叫`"mac"`的过程宏,
mac!(); //项目位置,这是以前稳定的
//但下三个是新的:
fn main() {let expr = mac!(); //表达式位置match expr {mac!() => {} //模式位置}mac!(); //语句位置
}
下面是即将发布的火箭的"helloworld"示例:
#[macro_use] extern crate rocket;
#[get("/<name>/<age>")]
fn hello(name: String, age: u8) -> String {format!("Hello, {} year old named {}!", age, name)
}
#[launch]
fn rocket() -> rocket::Rocket {rocket::ignite().mount("/hello", routes![hello])
}
更改库
在Rust1.45.0中,以下API已稳定:
Arc::as_ptr
BTreeMap::remove_entry
Rc::as_ptr
rc::Weak::as_ptr
rc::Weak::from_raw
rc::Weak::into_raw
str::strip_prefix
str::strip_suffix
sync::Weak::as_ptr
sync::Weak::from_raw
sync::Weak::into_raw
char::UNICODE_VERSION
Span::resolved_at
Span::located_at
Span::mixed_site
unix::process::CommandExt::arg0
此外,还可让char与区间一起使用,以遍历代码点:
for ch in 'a'..='z' {print!("{}", ch);
}
println!();
//打印`"abcdefghijklmnopqrstuvwxyz"`
1.45.1稳定版
修复使用引用的常量传播
在Rust1.45.0中,在确定是否传播给定常量时,rustc的常传播趟,没有正确处理引用,导致错误的行为.
struct Foo {x: u32,
}
fn main() {let mut foo = Foo { x: 42 };let x = &mut foo.x;*x = 13;let y = foo;println!("{}", y.x); //`->42`;期望成果:`13`
}
1.45.2稳定版
#[track_caller]关于特征对象
错误编译了带#[track_caller]注解方法的特征对象.#[track_caller]在1.45上还不稳定.但是,标准库在某些特征上利用了它,以获得更好的错误消息. SliceIndex,Index和IndexMut的Trait对象受此bug影响.
元组模式绑定…到标识
在1.45.1中,向后移植了#74539的修复程序,但此修复程序是错误的,导致了其他不相关的破坏.因此,此版本修复还原该程序.
相关文章:
2311rust,到46版本更新
1.43.0稳定版 项(item)片段 在宏中,可用项片段把项插值到特征,实现和extern块的块体中.如: macro_rules! mac_trait {($i:item) > {trait T { $i }} } mac_trait! {fn foo() {} }这生成: trait T {fn foo() {} }围绕原语的推导类型 改进了围绕原语,引用和二进制操作的推…...
Rust根据条件删除相邻元素:dedup
文章目录 示例dedup_bydedup_by_key Rust系列:初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信 示例 Rust中的动态数组Vec提供了dedup函数,用于删除相邻重复元素。此外,还提供了dedup_by和dedup_by_key,可…...
2023年(第六届)电力机器人应用与创新发展论坛-核心PPT资料下载
一、峰会简介 大会以“聚焦电力机器人创新、助力行业数字化转型、促进产业链协同发展”为主题,展示电力机器人产业全景创新技术,探讨数字化战略下电力机器人应用前景和发展趋势。为加快推进电力机器人应用拓新,助力电网数字化转型升级&#…...
Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin
Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin fun getOriginalBitmap(resId: Int): Bitmap {val options BitmapFactory.Options()options.inJustDecodeBounds true //只解析原始图片的宽高,不decode原始文件装载到内…...
阿里云服务器 手动搭建WordPress(CentOS 8)
前提条件 已创建Linux操作系统的ECS实例,并且手动部署LNMP环境,具体操作,请参见手动部署LNMP环境(CentOS 8)。本教程使用的相关资源版本如下。 实例规格:ecs.c6.large 操作系统:公共镜像CentO…...
竞赛 题目:基于深度学习的中文对话问答机器人
文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分:4.2 损失函数:4.3 搭建seq2seq框架:4.4 测试部分:4.5 评价NLP测试效果:4.6 梯度截断…...
CCF ChinaSoft 2023 论坛巡礼|软件测试产教研融合论坛
2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…...
浅谈WPF之控件模板和数据模板
WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计,同时还推出了以模板为核心的新一代设计理念。在WPF中,通过引入模板,将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类:数据模板【Data Template】和控…...
微信小程序会议OA首页-开发说明创建项目关于flex布局关于尺寸单位(rpx)关于WXS轮播图会议信息
目录 1. 创建项目 2. 关于flex布局 3. 关于尺寸单位(rpx) 4. 关于WXS 4. 轮播图 5. 会议信息 1. 创建项目 基于微信原生开发工具,稳定版 Stable Build (1.06.22010310) 创建项目前,请确定有小程序测试账号 使用向导创建一个…...
Linux上编译和安装SOFA23.06
前言 你可以直接使用编译安装好的SOFA版本Installing from all-included binaries (v23.06.00): 如果你想自己编译,可以看我下面写的内容,不过绝大多数是从官网来的,如果和官网有出入,建议还是以官网为准。 在Linux下…...
定时任务 Spring Task
一、介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位: 定时任务框架 作用: 定时自动执行某段Java代码 二、cron 表达式 cron表达式在线生成器:https://cron.qqe2.com/ 1、说明…...
golang 上传图片 --chatGPT
问:makeImgUpload(path string) 实现发送发送图片, 发送类型为 multipart/form-data gpt: 下面是一个简单的 makeImgUpload 函数的实现,用于发送图片并以 multipart/form-data 格式进行上传。请注意,此代码假设图片文件路径是正确…...
Android Studio 写一个Java调用c++ 的demo
前提条件: 本地已经配置好了ndk环境,如果没有配置好,建议参考macos 配置ndk环境-CSDN博客 这篇链接。 新建一个Empty Project 比如我这里的Project的名字是HelloJNI,包名是com.example.hellojni 然后在src目录下,右键选择Add C …...
Pandas数据操作_Python数据分析与可视化
Pandas数据操作 排序操作对索引进行排序按行排序按值排序 删除操作算数运算去重duplicated()drop_duplicates() 数据重塑层次化索引索引方式内层选取数据重塑 排序操作 对索引进行排序 Series 用 sort_index() 按索引排序,sort_values() 按值排序; Dat…...
【Debug】查询的数据量比数据库中的数据量还要多
今天前端反馈了一个bug,某个接口返回的数据很多,我到mysql数据库看了一下,查询的表名为trs_risk,其中只有1000多条数据,而页面返回有5000多条数据!! 匪夷所思啊,我定位到Mapper层的…...
nodejs微信小程序-慢性胃炎健康管理系统的设计与实现-安卓-python-PHP-计算机毕业设计
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...
二十一、数组(1)
本章概要 数组特性 用于显示数组的实用程序 一等对象返回数组 简单来看,数组需要你去创建和初始化,你可以通过下标对数组元素进行访问,数组的大小不会改变。大多数时候你只需要知道这些,但有时候你必须在数组上进行更复杂的操作…...
react hook 获取setState的新值
利用useRef 存储最新值 let [count,setCount] useState(0)let countRef useRef(count)let handleClick function (){setCount((prev)>{countRef.current prev1return countRef.current})console.info(countRef.current)}利用useRef let [count,setCount] useState(0)le…...
JVM判断对象是否存活之引用计数法、可达性分析
目录 前言 引用计数法 概念 优点 缺点 可达性分析 概念 缺点: 扩展: 1.GC Roots 概念 2.STW (Stop the world) 前言 JVM有两种算法来判断对象是否存活,分别是引用计数法和可达性分析算法,针对可达性分析算法STW时间长、…...
报道 | 2023年12月-2024年2月国际运筹优化会议汇总
2023年12月-2024年2月召开会议汇总: The 16th Annual International Conference on Combinatorial Optimization and Applications (COCOA 2023) Location: Virtual Important dates: Conference: December 11, 2023 (Start) - December 13, 2023 (End) Details…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...
二维数组 行列混淆区分 js
二维数组定义 行 row:是“横着的一整行” 列 column:是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...
