Codes in lesson25
并发与并行的区别
并发(Concurrency):多个任务在时间上交替执行
并行(Parallelism):多个任务同时执行
进程与线程
在大部分 OS 里,代码运行在进程(process)中,OS同时管理多个进程
在程序里,各独立部分可以同时运行,运行这些独立部分的就是线程(thread)
多线程运行 可以提升性能表现 和 增加复杂性,但无法保障各线程...
Codes in lesson24.1
Codes in lesson24.2
Unit Test测试结构基本单元测试使用 #[cfg(test)] 属性标记测试模块:
123456789101112131415#[cfg(test)]mod tests { // 导入要测试的模块 use super::*; #[test] fn it_works(...
Codes in lesson23
什么是迭代器?
迭代器模式:对一系列项执行某些任务
迭代器负责:
遍历每个项
确定序列(遍历)何时完成
Rust 的迭代器:
懒惰的:除非调用消费迭代器的方法,否则迭代器本身没有任何效果
123456let v1 = vec![1, 2, 3];let v1_iter = v1.iter();// rust 的迭代器是懒惰的,除非调用消费迭代器的...
Codes in lesson22
闭包介绍
什么是闭包?
闭包是一个可以捕获所在环境中的变量的匿名函数
闭包通过 || 符号定义,可以像普通函数一样调用,但与函数不同,闭包可以访问外部作用域的变量
闭包的特点
可以捕获周围作用域的变量
支持作为参数传递给其他函数
可以返回闭包作为函数的返回值
闭包通常通过类型推断来确定参数和返回值的类型
闭包定义12let add_one =...
Codes in lesson21
常用宏123456println!("Hello, world!"); // 常用println! {"Hello, world!"};println!["Hello, world!"];let v = vec![1, 2, 3, 4, 5];assert_eq!(1, 10)...
Codes in lesson20
trait 定义trait 定义了某个特定类型拥有可能与其他类型共享的功能
trait 类似于其他语言中 接口(interfaces)的功能
trait 实现普通实现
使用 trait 关键字声明一个特征
在大括号中定义该特征的所有方法
只定义特征方法的签名,而不进行实现,此时方法签名结尾是 ;,而不是 {}
123pub tr...
Codes in lesson19
课程概述
Rc<T>
RefCell<T>
Weak<T>
Rc<T> 引用计数指针什么是 Rc<T>?
Rc 是 Reference Counted(引用计数) 的缩写
允许多所有者的共享所有权模型
举例说明使用 Box<T> 定义 cons list 的例子。这一次,我们希望创...
Codes in lesson18
创建生命周期⽣命周期主要通过⽣命周期注解来创建和使⽤。⽣命周期注解是⼀种显式声明引⽤有效时间的⽅式,通常⽤’a、’b 这样的符号表示
生命周期类别fn‘a ⽣命周期注解 表明返回值的⽣命周期与输⼊参数的⽣命周期相同:
123fn longest<'a>(x: &'a str, y: &'a str)...
Codes in lesson17
泛型的例子用同一功能的函数处理不同类型的数据,例如两个数的加法,无论是整数、浮点数、还是自定义类型,都能支持。在不支持泛型的编程语言中,需要为每种类型编写一个函数:
1234567891011121314fn add_i8(a:i8, b:i8) -> i8 { a + b}fn add_i32(a:i32, b:i32) ...
Codes in lesson16
智能指针智能指针概述智能指针(Smart Pointers)是一类数据结构,不仅包含一个指针,还附带一些额外的元数据和功能。智能指针实现了 Deref 和 Drop 两个 trait,使得它们可以像指针一样解引用并在离开作用域时自动清理资源
智能指针作用
资源管理
自动管理资源的分配和释放,避免内存泄漏
所有权与借用
Rust 的所有权系统通过智能指针...