Skip to content

VS Code 插件

  1. rust-analyzer:它会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注。你也可以使用官方的 Rust 插件取代。
  2. rust syntax:为代码提供语法高亮。
  3. crates:帮助你分析当前项目的依赖是否是最新的版本。
  4. Even Better TOML:Rust 使用 toml 做项目的配置管理。better toml 可以帮你语法高亮,并展示 toml 文件中的错误。
  5. rust test lens:可以帮你快速运行某个 Rust 测试。

工具简介

cargo

Rust 的包管理器,构建工具和依赖解决器。可以使用 cargo 命令创建、编辑和构建 Rust 项目

rust
cargo new --bin my_project

可以创建一个名为 my_project 的新的 Rust 项目

rustup

用来升级维护 Rust 编译器套件的版本同时支持维护多个版本,并可用来安装 Rust 组件

bash
rustup update stable

可将 Rust stable 版本升级至最新

rust-fmt

可用来对 Rust 代码按配置格式进行自动排版,用来统一 Rust 代码风格

配合 cargo,直接在工程目录下运行 cargo fmt 就可以对整个工程进行排版

rust-clippy

可用来对 Rust 代码进行严谨性检查指出一些写得不规范的地方

直接在工程目录下运行 cargo clippy 就可以对整个工程进行排版

所有权

Rust明确了所有权的概念,值也可以叫资源,所有权就是拥有资源的权利。一个变量拥有一个资源的所有权,那它就要负责那个资源的回收、释放。 Rust基于所有权定义出发,推导出了整个世界

所有权的基础是三条定义。

  1. Rust中,每一个值都有一个所有者。

  2. 任何一个时刻,一个值只有一个所有者。

  3. 当所有者所在作用域(scope)结束的时候,其管理的值会被一起释放掉。

这三条规则涉及两个概念: 所有者和作用域

所谓所有者,在代码里就用变量表示。而变量的作用域,就是变量有效(valid)的那个代码区间。在Rust中,一个所有权型变量的作用域,简单来说就是它定义时所在的那个最里层的花括号括起的部分,从变量创建时开始,到花括号结束的地方。

堆内存资源随着关联的栈上局部变量一起被回收 的内存管理特性,叫作 RAII(Resource Acquisition Is Initialization)

移动和复制所有权

u32这种类型在做变量的再赋值的时候,是做了复制所有权的操作。而String这种类型在做变量再赋值的时候,是做了移动所有权的操作。

默认做复制所有权的操作的有7种。

  • 所有的整数类型,比如u32;

  • 布尔类型bool;

  • 浮点数类型,比如f32、f64;

  • 字符类型char;

  • 由以上类型组成的元组类型 tuple,如(i32, i32, char);

  • 由以上类型组成的数组类型 array,如 [9; 100];

  • 不可变引用类型&。

其他类型默认都是做移动所有权的操作。

引用

  • 引用分成不可变引用和可变引用。

  • &x 是对变量x的不可变引用。

  • &mut x 是对变量x的可变引用

  • 一个所有权型变量的作用域是从它定义时开始到花括号结束。而引用型变量的作用域不是这样, 引用型变量的作用域是从它定义起到它最后一次使用时结束,定义引用,但并没有被使用,它的作用域就只有那一行

  • 一个所有权型变量的可变引用与不可变引用的作用域不能交叠,也可以说不能同时存在

  • 引用(不可变引用和可变引用)型变量的作用域不会长于所有权变量的作用域。这是肯定的,不然就会出现悬锤引用,这是典型的内存安全问题。

  • 一个所有权型变量的不可变引用可以同时存在多个,可以复制多份。

  • 某个时刻对某个所有权型变量只能存在一个可变引用,不能有超过一个可变借用同时存在,也可以说,对同一个所有权型变量的可变借用之间的作用域不能交叠。

  • 在有借用存在的情况下,不能通过原所有权型变量对值进行更新。当借用完成后(借用的作用域结束后),物归原主,又可以使用所有权型变量对值做更新操作了。

多级引用

  • 只有全是多级可变引用的情况下,才能修改到目标资源的值。

  • 对于多级引用(包含可变和不可变),打印语句中,可以自动为我们解引用正确的层数,直到访问到目标资源的值,这很符合人的直觉和业务的需求。

Released under the GPL License.