Rust学习笔记
文章目录
本文主要记录Rust学习过程中的一些笔记。
安装
参考 官方安装页面 的说明操作即可。
IDE
使用 VSCode 以及cargo
工具即可。
教程
可以参考以下教程,本文主要记录一些没讲到的或者需要注意的点。
变量与可变性
变量默认不可变,添加mut
关键字允许修改。
所有权
所有权规则
值有且只有一个拥有所有权的变量,变量离开作用域后值被丢弃。
有点类似于cpp的RAII模式,资源依附于变量的生命周期,在构造时申请、在析构时释放。
可以Copy
的值赋值给其他变量实际是复制一份,而可以Drop
的值则是移交所有权,原变量不再有效。
移交所有权类似于cpp的move
语义,而且还有静态分析确保失效变量不再使用。
所有权规则确保资源得以在合适的时机正确释放,不会内存泄露、不会double free
,不需要运行时GC。
借用与生命周期
借用
引用就是值的借用,不拥有值的所有权(也就不负责值的释放)。
Rust的引用更像cpp的指针(因为需要解引用,实现Deref
)。
引用的作用域从声明处开始,直到最后一次使用结束。
为了避免数据竞争,Rust规定引用作用域内要么有多个不可变引用,要么最多一个可变引用。
|
|
借用规则有效避免引用到无效的值。
生命周期
另外Rust还引入生命周期的概念,确保引用的有效性,防止野指针(悬垂指针)。
比如说返回引用的函数,返回值必须依附于某个参数的生命周期。
|
|
枚举与模式匹配
Rust的枚举比较特别,并不是其他语言常见的数值枚举。
Rust的枚举可以绑定数据,有点类似于cpp的union。
|
|
内置的Option
和Result
两种枚举很好展示了其实用性。
|
|
Option
很好地解决空值情况(特别是空指针)。
Result
增强了错误处理的能力,不再是单一的错误码,还附带了错误信息。
错误处理
不可恢复错误,使用 panic
系列宏。
可恢复错误,使用模式匹配处理 Result
错误类型。
泛型
支持泛型,与其他语言概念类似,增加了生命周期的概念。
|
|
测试
支持单元测试、集成测试。
闭包
支持闭包,与其他语言概念类似,增加获取所有权、借用的支持。
智能指针
Box<T>
类似于cpp的unique_ptr
Rc<T>, Arc<T>
类似于cpp的shared_ptr
,Arc<T>
是并发安全的。Weak<T>
类似于cpp的weak_ptr
RefCell<T>
运行时检查借用规则的引用。
unsafe
可以执行裸指针操作、调用外部函数接口(FFI) 等。
|
|
宏
类似lisp的宏,主要为了生成代码。常用的vec!
,panic!
等就是宏实现的。
异步IO
可以使用 tokio ,支持 async, await
。
反射
不支持。