Rust Rust

2026-01-03 约 1669 字 阅读时长4 分钟

Rust

入门

简介

Rust 最早是 Mozilla 雇员 Graydon Hoare 的个人项目。从 2009 年开始,得到了 Mozilla 研究院的资助,2010 年项目对外公布,2010 ~ 2011 年间实现自举。自此以后,Rust 在部分重构 -> 崩溃的边缘反复横跳(历程极其艰辛),终于,在 2015 年 5 月 15 日发布 1.0 版

rust 无 GC、效率高、工程性强、强安全性

安装

  1. 先安装 Microsoft C++ Build Tools,勾选安装 C++ 环境即可

    image-20260103015941971

  2. RUSTUP-INIT 下载系统相对应的 Rust 安装程序,直接默认安装

  3. 检查安装结果

    bash
    1# 查看rust编译器版本
    2$ rustc -V
    3
    4# 查看cargo版本
    5$ cargo -V
  4. 更新和卸载

    bash
    1# 更新
    2$ rustup update
    3
    4# 卸载
    5$ rustup self uninstall

cargo

cargo 包管理工具,提供了一系列的工具,从项目的建立、构建到测试、运行直至部署,为 Rust 项目的管理提供尽可能完整的手段

常用命令

bash
 1# 新建项目
 2$ cargo new xxxx
 3
 4
 5# 运行项目
 6$ cargo run 
 7
 8# 编译项目
 9$ cargo build
10
11# 编译和运行
12# 默认都是debug模式,编译速度会很快,但是运行速度就慢了,debug模式下Rust编译器不会做任何优化
13# 使用参数 --release 可以构建高性能程序
14# cargo run --release
15# cargo build --release
16
17
18# 项目大了后,cargo run 和 cargo build 不可避免的会变慢
19# cargo check 快速检查代码是否能编译通过
20$ cargo check

Cargo.toml和Cargo.lock

Cargo.tomlCargo.lockcargo 的核心文件

  • Cargo.tomlcargo 特有的项目数据描述文件。它存储了项目的所有元配置信息
  • Cargo.lock 文件是 cargo 工具根据同一项目的 toml 文件生成的项目依赖详细清单。一般不需要手动更改

Cargo.toml

package 配置

toml
1[package]
2name = "hellow_world"
3version = "0.1.0"
4edition = "2024"
5
6# name 字段定义了项目名称,version 字段定义当前版本,新项目默认是 0.1.0,edition 字段定义了我们使用的 Rust 大版本

定义项目依赖

  • 基于 Rust 官方仓库 crates.io,通过版本说明来描述
  • 基于项目源代码的 git 仓库地址,通过 URL 来描述
  • 基于本地项目的绝对路径或者相对路径,通过类 Unix 模式的路径来描述
toml
1[dependencies]
2rand = "0.3"
3hammer = { version = "0.5.0"}
4color = { git = "https://github.com/bjz/color-rs" }
5geometry = { path = "crates/geometry" }

hellow world

  1. 新建项目

    bash
    1$ cargo new hellow_world
  2. 查看目录结构

    bash
    1$ tree /f /a
    2.
    3|   .gitignore
    4|   Cargo.lock
    5|   Cargo.toml
    6|
    7\---src
    8        main.rs

基础

简单的示例

rust
 1// Rust 程序入口函数,和其他语言一样,都是main,该函数无返回值
 2fn main() {
 3    // 使用 let 来声明变量,进行绑定,a 是不可变的
 4    // 这里未指定 a 的类型,编译器会默认根据 a 的值推断类型为:i32(有符号32位整数)
 5    // 语句的末尾必须以分好结尾
 6    let a=10;
 7
 8    // 主动指定类型为 i32
 9    let b:i32=20;
10
11    // 可以在数值中带上类型:30i32表示数值是30,类型是i32
12    // c是可变的,mut是mutable的缩写
13    let mut c=30i32;
14
15    // 还能在数值和类型中间添加一个下划线,让可读性更好
16    let d=30_i32;
17
18    // 跟其它语言一样,可以使用一个函数的返回值来作为另一个函数的参数
19    let e=add(add(a,b), add(c, d));
20
21    // println!是宏调用,它返回的是宏定义的代码块
22    // 该函数将指定的格式化字符串输出到标准输出中(控制台)
23    // {}是占位符,在具体执行过程中,会把e的值代入进来
24    println!("(a + b) + (c + d) = {}",e)
25}
26
27// 定义一个函数,输入两个i32类型的32位有符号整数,返回它们的和
28fn add(a:i32,b:i32)->i32{
29    // 返回相加值,这里可以省略return
30    a+b
31}

变量绑定与解构

Rust 变量在默认情况下是不可变的,可以通过mut关键字声明可变变量;

不可变变量一旦绑定值就不能修改,除非使用使用mut关键字修饰,如下:

rust
1fn main() {
2    let x=6;
3    println!("x的值为:{x}");
4    // x=7;  // cannot mutate immutable variable 'x';修改未使用mut修饰变量,出错
5	
6    let mut y = 6;
7    println!("y的值为:{y}");
8    y=7;  // warning: value assigned to `y` is never read;未使用的变量会有警告
9}

使用下划线开头忽略未使用变量,如下:

rust
1fn main() {
2    let x=6;  // warning: unused variable: `x`
3    let _y=6;
4}

let 关键字除了变量绑定,还可以进行复杂变量解构,如下:

rust
1fn main() {
2    let (a,b) = (1,2);  // a=1,b=2
3    // _ 代表匹配一个值
4    let [c,..,d,_]=[1,2,3,4,5];  // c=1,d=4
5}

常量:

  • 常量不允许使用 mut常量不仅仅默认不可变,而且自始至终不可变,因为常量在编译完成后,已经确定它的值。
  • 常量使用 const 关键字而不是 let 关键字来声明,并且值的类型必须标注。
rust
1const PI:f32 = 3.1415926;

变量遮蔽:

Rust 中允许声明相同的变量名,在后面声明的变量会遮蔽掉前面声明的

rust
 1fn main() {
 2    let x = 5;
 3    {
 4        // x="a";   // expected i32, found &' static str
 5        let x = "a";
 6        println!("inner x : {}",x)
 7    }
 8    println!("x : {}",x)
 9}
10/*
11输出:
12	inner x : a
13	x : 5
14*/
使用滚轮缩放
按住拖动