![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
rust
文章平均质量分 89
zy010101
会写一点代码
展开
-
Rust源码分析——Rc 和 Weak 源码详解
1. rust中所有权机制在图这种数据结构中,一个节点可能被多个其它节点所指向。那么如何表示图这种数据结构?2. 在多线程中,多个线程可能会持有同一个数据?如何解决这个问题。原创 2023-09-10 23:21:13 · 948 阅读 · 2 评论 -
rust中的reborrow和NLL
我们看下面这段代码我们知道可变引用是没有实现Copy trait的,因此,当ref1传递给add函数之后,其所有权应该被转移到add函数内,之后应该无法使用ref1,但是上面这段代码是可以编译,运行的。这是为什么呢?经过辛苦的寻找,在github上找到了相关的pull request以及rust核心开发者nikomatsakis在中提到的reborrow。现在我们知道了reborrow的存在,。我们来看下面这个例子。_ref3 和 _ref4 在被我们声明了不同的数据类型,但是rust编译器并没有反对。原创 2023-09-04 01:07:10 · 955 阅读 · 0 评论 -
rust声明式宏
在 rust 中,我们一开始就在使用宏,例如 println!, vec!等。看起来宏和函数在使用时只是多了一个!。实际上这些宏都是声明式宏(也叫示例宏或macro_rules!),rust 还支持过程宏,过程宏为我们提供了强大的元编程工具。原创 2023-07-19 21:57:57 · 28646 阅读 · 1 评论 -
rust类型转换
Rust 是类型安全的语言,因此在 Rust 中做类型转换不是一件简单的事。原创 2023-06-06 21:22:30 · 1933 阅读 · 6 评论 -
rust多线程
在rust中,多线程编程不算困难,但是也需要留心和别的编程语言中不同的地方。rust的标准库中提供的thread库来帮助我们进行多线程编程。在使用的时候需要使用来引入thread库即可。原创 2023-05-27 17:02:18 · 1716 阅读 · 5 评论 -
rust迭代器
迭代器模式允许你对一个序列的项进行某些处理。迭代器(iterator)负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。。原创 2023-05-17 23:34:04 · 1035 阅读 · 3 评论 -
rust智能指针
一个类型为 T 的对象 foo,如果,那么,相关 foo 的引用 &foo 在应用的时候会自动转换为 &U。如前所述,我们需要实现智能指针,那么只需要实现Deref trait和Drop trait即可。println!println!("{}" , v);// 当引用在传给函数或方法时,自动进行隐式deref调用。我们为MyBox实现了Drop trait和 Deref trait,从而让MyBox变为智能指针。我们的drop接口方法实际上什么都没干,只是打印了Drop。原创 2023-05-06 21:35:06 · 1648 阅读 · 3 评论 -
编写rust测试程序
format!("Hello {}!let target = "张三";assert!(result . contains(target) , "你的问候中并没有包含目标姓名{target},你的问候是 `{result}`");} }failures:thread 'tests::greeting_contains_name' panicked at '你的问候中并没有包含目标姓名张三,你的问候是 `Hello zhangsan!0 ignored;原创 2023-04-16 19:55:50 · 913 阅读 · 0 评论 -
rust闭包(Closure)
闭包在现代化的编程语言中普遍存在。闭包是一种匿名函数,它可以赋值给变量也可以作为参数传递给其它函数,不同于函数的是,它允许捕获调用者作用域中的值。Rust 闭包在形式上借鉴了 Smalltalk 和 Ruby 语言,与函数最大的不同就是它的参数是通过 |parm1| 的形式进行声明,如果是多个参数就 |param1, param2,…|, 下面给出闭包的形式定义:如果只有一个返回表达式的话,定义可以简化为:闭包可以接受0个或者多个参数,写在||里面;闭包体中是实际执行的代码;闭包可以捕获任何它周围原创 2023-04-18 21:54:38 · 1547 阅读 · 0 评论 -
rust的package,crate,module
rust提供了非常优秀的包管理器cargo,我们可以使用crate,module,package来组织代码。crate是rust在编译时最小的单元。crate可以包含模块,模块可以定义在其他文件,然后和crate一起编译。crate 有两种形式:二进制项和库。二进制项 可以被编译为可执行程序,比如一个命令行程序或者一个服务器。它们必须有一个 main 函数来定义当程序被执行的时候所需要做的事情。目前我们所创建的 crate 都是二进制项。库 并没有 main 函数,它们也不会编译为可执行程序,它们提供一些诸原创 2023-04-05 20:02:53 · 759 阅读 · 4 评论 -
Rust错误处理
通常用于从系统全局角度来看可以接受的错误,例如处理用户的访问、操作等错误,这些错误只会影响某个用户自身的操作进程,而不会对系统的全局稳定性产生影响,刚好相反,该错误通常是全局性或者系统性的错误,例如数组越界访问,系统启动时发生了影响启动流程的错误等等,这些错误的影响往往对于系统来说是致命的。原创 2023-03-26 20:51:15 · 2181 阅读 · 0 评论 -
rust生命周期
在大多数时候,无需手动声明,因为编译器能够自动推导。当编译器无法自动推导出生命周期的时候,就需要我们手动标明生命周期。。原创 2023-03-16 21:32:51 · 881 阅读 · 3 评论 -
rust的vector和hashmap
动态数组Vector在大多数语言中都会提供动态数组这样基础的数据结构。rust也不例外。动态数组允许我们存储多个值,这些值在内存中一个紧挨着另一个排列。动态数组中只能存储相同类型的元素。创建动态数组使用Vec::new()创建动态数组或者是使用宏vec![]创建数组。例如:fn main() { let mut a = Vec::new(); a.push(1); let b = vec![1]; println!("a:{}", a[0]); print原创 2023-03-14 22:29:19 · 713 阅读 · 0 评论 -
Rust特征对象(Trait Object)
我们直接来看一段代码。它展示了特征对象的两种定义方式。// 定义特征Draw trait Draw {} // 为u8类型实现Draw特征 impl Draw for u8 {format!("u8: {}" , * self) } } // 为f64类型实现Draw特征 impl Draw for f64 {format!原创 2023-03-14 22:28:52 · 1746 阅读 · 0 评论 -
Rust特征(Trait)
如果不同的类型具有相同的行为,那么我们就可以定义一个特征,然后为这些类型实现该特征。定义特征是把一些方法组合在一起,目的是定义一个实现某些目标所必需的行为的集合。例如,我们现在有圆形和长方形两个结构体,它们都可以拥有周长,面积。因此我们可以定义被共享的行为,只要实现了特征就可以使用。// 为几何图形定义名为Figure的特征 fn girth(& self) -> u64;// 计算周长 fn area(& self) -> u64;// 计算面积 }原创 2023-03-05 20:55:35 · 1594 阅读 · 0 评论 -
Rust泛型Generics
泛型(Generics)是一种程序设计风格,它允许程序员在强类型语言(例如rust,c#,c++)中编写代码时使用通用类型。以rust为例,如果你想实现一个通用的add函数,让其在u8, i32, u64等类型中通用。如果没有泛型,虽然它们的逻辑是一致的,但是你需要为不同类型编写不同的函数,而泛型帮助我们只需要编写一个函数,实现通用逻辑即可。333可以看到这段代码成功执行,add函数接受多种类型的参数,帮我们减少了代码的编写。泛型是rust多态能力的一种体现。原创 2023-02-28 10:15:23 · 417 阅读 · 0 评论 -
rust方法和关联函数
Rust使用关键字impl// 这个圆的结构体定义可以看做是由x,y来定位圆的圆心,radius是圆的半径。// 这种方法往往用于初始化当前结构体的实例 fn new(x : f64 , y : f64 , radius : f64) -> Circle {Circle {x , y , radius , } } // Circle的方法,&self表示借用当前的Circle结构体 fn area(& self) -> f64 {impl 结构体名|枚举名|特征名{函数1函数2...原创 2023-02-23 22:08:31 · 797 阅读 · 0 评论 -
Rust模式匹配
模式匹配是从函数式编程语言(例如:Haskell,Lisp)吸收而来的,用于为复杂的类型系统提供一个轻松的解构能力。rust使用match来提供模式匹配的功能。mathc类似于其它编程语言中的switch-case,但是远比switch-case强大。match的通用模式如下所示。该形式清晰的说明了何为模式,何为模式匹配:将模式与 target 进行匹配,即为模式匹配,而模式匹配不仅仅局限于 match,还有if let。原创 2023-02-20 20:45:46 · 1844 阅读 · 0 评论 -
rust语言流程控制
rust代码是从上至下顺序执行的,在这个过程中,可以通过循环,分支等流程控制方式来实现相应的逻辑。原创 2023-02-08 20:07:41 · 673 阅读 · 3 评论 -
rust枚举
定义一个枚举类型需要使用关键字enum,然后是枚举类型的名称,枚举值被包含在花括号中,用逗号分割。注意,定义枚举和结构体一样,最后是不需要分号结束的。原创 2023-02-01 21:53:00 · 604 阅读 · 0 评论 -
rust结构体
和大多数语言一样,rust也提供了结构体。一个结构体定义如下所示:其中,struct是定义结构体的关键字,User是该结构体的名称,active,username,email,sign_in_count是结构体中的字段,并且给每个字段声明了类型。注意,定义结构体结束的时候没有分号。上面只是定义了一个名为User的结构体,我们要创建相应的实例才能使用。在实例化结构体的时候需要注意:下面是实例化的一个例子:访问结构体中的字段和C/C++类似,访问结构体中的字段使用.运算符。例如:简化结构体创建当函数参原创 2023-01-31 21:22:41 · 583 阅读 · 0 评论 -
rust字符串
诸位在入门rust的时候,要认真,因为字符串类型在rust中有好几种,一不小心就搞混了类型,导致代码编译报错。好在有强大的rust-analyzer和vscode帮助我们。我们直接通过一段代码来开始认识rust的字符串类型。原创 2023-01-12 21:44:08 · 2111 阅读 · 0 评论 -
rust基本数据类型——复合类型
复合类型(Compound types)可以将多个值组合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)。原创 2023-01-08 19:46:06 · 712 阅读 · 0 评论 -
rust引用和借用
同一时刻,你只能拥有要么一个可变引用, 要么任意多个不可变引用引用必须总是有效的。原创 2023-01-01 14:37:26 · 1011 阅读 · 22 评论 -
rust所有权系统
在Rust中,核心的设计之一是所有权(ownership)系统。该系统以一种新的方式来管理程序在运行时使用内存的方式。一些语言中具有垃圾回收机制,在程序运行时有规律地寻找不再使用的内存;在另一些语言中,程序员必须亲自分配和释放内存。Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。在运行时,所有权系统的任何功能都不会减慢程序。原创 2022-12-29 23:05:50 · 1042 阅读 · 5 评论 -
rust语句,表达式以及函数
在rust里,语句和表达式的区别是非常重要的。**语句没有返回值,表达式有返回值**原创 2022-12-20 23:42:20 · 528 阅读 · 0 评论 -
rust基本数据类型——标量类型
在rust里数据类型可以分为标量(scalar)和复合(compound)类型,标量类型代表一个单独的值。Rust 有四种基本的标量类型:整型、浮点型、布尔类型和字符类型。rust是静态强类型语言,它在编译时就需要知道所有变量的类型,并且不同类型的数据之间是不允许进行运算的。原创 2022-12-19 21:23:55 · 788 阅读 · 0 评论 -
rust变量与常量
在rust里有个核心原则,那就是所有权。在其它语言中,我们可以把一个值赋值给变量。但是在rust里,是把值绑定到变量上。任何内存对象都是有主人的,而且一般情况下完全属于它的主人,绑定就是把这块内存绑定给一个变量,让这个变量成为它的主人。原创 2022-11-22 20:40:42 · 689 阅读 · 2 评论 -
cargo介绍
cargo是rust的包管理工具,这个工具非常Nice。它提供了从项目的建立、构建到测试、运行直至部署的所用功能。原创 2022-11-20 20:22:20 · 1122 阅读 · 0 评论 -
Rust开发环境搭建
通常情况下,我们安装Rust是通过Rustup这个工具来进行的,它是一个 Rust 安装程序和版本管理工具。在类Unix操作系统下,下载Rustup并安装Rust,可以直接在终端中运行以下命令。原创 2022-11-20 17:57:45 · 620 阅读 · 0 评论