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…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...
RabbitMQ 各类交换机
为什么要用交换机? 交换机用来路由消息。如果直发队列,这个消息就被处理消失了,那别的队列也需要这个消息怎么办?那就要用到交换机 交换机类型 1,fanout:广播 特点 广播所有消息:将消息…...
