【实战】深入浅出 Rust 并发:RwLock 与 Mutex 在 Tauri 项目中的实践
引言
你是否遇到过 Rust 并发场景下的资源竞争、性能瓶颈?
当多个线程同时抓取网页导致 IP 被封、多线程读写本地数据引发一致性问题时,如何优雅地实现线程安全?
本文结合开源项目 Saga Reader 的真实开发场景,深度解析 Arc/Mutex/RwLock 的实战技巧,带你从 “踩坑” 到 “优化”,掌握 Rust 并发编程的核心方法论,文 ...
深入剖析Rust 中的 Move、Copy 和 Clone
目录移动(Move):所有权的转移内部机制使用场景性能影响拷贝(Copy):自动浅拷贝内部机制常见实现 Copy 特性的类型使用场景性能影响克隆(Clone):深度复制内部机制使用场景性能影响高级用法自定义 Copy 和 CloneClone 和 Copy 的区别性能优化深入理解所有权与借用所有权规则借用与生命周期性能优化与内存管理避免不必 ...
Rust 强制类型转换和动态指针类型的转换的方法
目录1. Java 和 C++ 中子类到父类的转换Java 示例C++ 示例特性分析2. Rust 的强制类型转换(Coercion)示例 1:解引用强制转换特性分析示例 2:子类型到超类型的转换(例如 &mut T 到 &T)示例 3:动态指针类型的转换1 和 3 的区别总结在 Rust 中的强制类型转换(Coercion)语义,与 Java 或 C++ 中的子类到父类的转换有某 ...
rust 中的 EBNF简介举例
目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址示例 2:算术表达式(简化版)6. 优点与局限在 rust 参考手册中,有大量类似:
句法
MacroInvocation :
SimplePath ! DelimTokenTree
DelimTokenTree :
( TokenTree* )
| [ TokenTree* ]
| { TokenTree* ...
rust进阶-基础.1.匿名函数和FnXXX特质
在rust中,匿名函数(或者说闭包)大量存在,所以有必要再次讨论匿名函数的一些问题。
其中比较关键的是和FnXXX特质的关系,以及和被捕获变量的关系。
本文的目的在于确认几个要点:
一、FnOnce,FnMut,Fn简单比较
比较汇总表
分类
执行次数
是否可以修改捕获的外部变量
是否归还捕获的外部变量
备注
FnOnce
一 ...
FunProxy - 使用 Rust 构建跨平台全链路测试抓包代理工具
作者:vivo 互联网大前端团队- Song Jiachao
在软件开发过程中,软件测试对于保障软件质量和用户满意度起着关键作用。为最大程度上提升软件品质,我们积极开展全链路测试实践,打造了用Rust语言开发的自研一站式抓包代理工具FunProxy,基于其跨平台、高性能、易于扩展、安全性高等特性,让全链路抓包和环境代理如丝 ...
使用win10 wsl子系统如何将 rust 程序静态编译为linux可执行文件
目录chapter Ⅰ 事情起因chapter Ⅱ 安装方法(windows安装rust和vs code略过)1. 启用wsl 22. 添加开发环境2.1. 打开rust官网,复制以下命令,安装rust工具链2.2. 安装rust的linux静态编译工具,等待安装完成2.3. 安装"musl-gcc"2.4. 将"musl-gcc"加入环境变量3. linux静态编译chapter Ⅲ 总结chapter Ⅰ 事情起因
最近在 ...
rust程序静态编译的两种方法实例小结
目录1. 概述2.方法一2.1 添加配置文件2.2 打包运行2.2.1 winsows2.2.2 linux3.方法二4.总结1. 概述
经过我的探索,总结了两种rust程序静态编译的方法,理论上两种方法都适用于windows、mac os和linux(mac os未验证),实测方法一性能比方法二好,现总结如下,希望能够帮到你.
2.方法一
2.1 添加配置文件
在项目的同级文件夹下 ...
rust学习二十.14、RUST宏
毫无疑问,宏是rust中极其重要的存在,只要我们看看一些标准库的代码。本文阐述rust宏相关的若干问题
一、宏的定义和作用
先介绍下宏的起源和历史,以便读者更能体会。
以下内容来自文心一言生成:
词源与早期含义
希腊-拉丁词根
"macro"源于希腊语前缀μακρο-(makro-),意为“大”或“长”。拉丁语继承为mac ...
Rust cargo 命令行工具使用示例教程
目录简介创建项目项目结构和配置文件常用命令依赖管理测试 & 文档发布 Crate 到 crates.io构建配置与工作区(workspace)常用 cargo 插件命令速查表简介
cargo 是 Rust 的构建系统和包管理器,负责创建项目、编译代码、管理依赖、运行测试等,是日常开发中最常用的工具。
创建项目
cargo new project_name # 创建 bina ...
rust学习二十.13、RUST的函数指针fn和匿名函数
函数指针是一个好东西。
一、简述
函数指针就是执行一段函数代码的指针。
根据官方的说法,函数指针实现了FnOnce,FnMut,Fn特质。
由于函数指针是一种数据类型,所以rustc允许它作为函数/方法的参数,这样就给程序设计添加了不少的灵活性.
我估摸着,rust设计者就是为了让rust能够适应潮流:在函数/方法中直接传递匿名函数/ ...
rust学习二十.12、RUST动态大小类型DST以及Sized特质
DST(dynamic size type)-中译“动态大小类型"。本文简要讨论动态大小类型的一些问题。
一、前言
rust作为一门静态类型语言,和大部分其它静态类型语言(C,C++,C#,JAVA)一样,希望在编译的时候知道每个实例/类型的大小。
作为静态类型语言,优点是毋庸置疑的的:
1.类型错误(如字符串与整数运算)在编译阶段即可被捕获,减少 ...
rust学习二十.10、RUST高级类型之新类型模式和类型别名
这两个内容都比较容易理解。
一、新类型(newtype)模式
注意,这里说的是一种编程模式,不是说有一个叫newtype的类型。
这种编程模式的含义:为某个类型作个封装,构建一个新的类型,以便绕过某些束缚,从而达成特定目的。
目的如下:
a.用于抽象掉一些类型的实现细节
b.可以隐藏其内部的泛型类型
c.实现曲线救国
一个典型的 ...
rust学习二十.9、RUST绕过孤儿规则实现特质和包装器缺点
回忆下孤儿规则:
1.只有当一个trait或类型在当前的crate中定义时,才能为外部类型实现该trait。 没有限定是特质还是类型
反过来,如果特质和类型都是外部,那么不能在当前单元包实现
2.例外情况-std中特质是例外。大体验证了凡事都有例外
孤儿规则的目的:避免编译器无法确定应该用哪一个实现。
这个目的很容易理解。无论 ...
rust之map和filter初探。
点击查看代码
fn main() {
let v = vec![1, 2, 3, 4];
let a: Vec<_> = v.iter().filter(|x: &&i32| *x % 2 == 0).map(|x: &i32| x * 2).collect();
let b: Vec<_> = v.iter().map(|x: &i32| x * 2).filter(|x: &i32| x % 2 == 0).collect();
println!("{} {}", a[0], b[0]);
}
以上代码是rust圣经的习 ...
rust学习二十.8、RUST特质的限定,实为对类型的限定
有的时候,可能希望使用的特质已经实现了其它特质(看后面可以知道,实际是要求相关类型实现了其它特质)。
RUST支持为特质(trait)指定限定的特质。
例如我们定义特质A,之后定义了类型T,这个时候还希望T已经实现了特质TC。
在rust中就是这个语法:
trait tx:t1
trait tx:t1+t2..+tn
根据相关数据的例子和说明,需要特别注意 ...
rust学习二十.7、RUST完全限定名以及静态方法
rust中看不到java等一些OOP语言的中用于修饰方法的static之类的关键字眼。
注:rust有static关键字,目前是用于修饰生命周期的或者是变量的
例如:
let leaked_str: &'static str = Box::leak(tmp.into_boxed_str());
static mut SIGN: u32 = 0;
先给出完全限定语法:
<Type as Trait>::function(receiver_if_met ...
rust学习二十.6、RUST通用类型参数默认类型和运算符重载
一、前言
为通用类型赋予一个默认的类型,大部分的语言是没有这个特性的,但是也有例外的,例如TypeScript(可能还有其它)。
例如TypeScript可以这样使用:
class MyClass<T = number> {
value: T;
constructor(value: T) {
this.value = value;
}
printValue(): void {
console.log(`Val ...
深入理解 Rust 中的模式匹配语法(最新推荐)
目录一、匹配字面量二、匹配命名变量三、多模式匹配四、匹配范围(..=)五、解构:将复杂数据拆分为单独的部分1. 解构结构体2. 解构枚举3. 嵌套解构4. 结构体与元组混合解构六、忽略值的模式1. 使用 _ 忽略整个值2. 嵌套中使用 _ 忽略部分值3. 命名以 _ 开头的变量4. 使用 .. 忽略剩余部分七、使用匹配守卫添加额外条件八、 ...
通过rust实现自己的web登录图片验证码功能
目录一、加入依赖二、生成纯色图片三、编辑验证图片四,随机函数编写五,生成验证码图片 在进行web系统开发时,为保障系统登录安全,登录页面中的验证码必不可少。在java中,我们可以利用相应的2D图像库快速生成图形验证码,而对于rust,我们没有合适的标准库进行图像验证码的生成。今天,我们通过使用image c ...