Rust ¶
入门 ¶
简介 ¶
Rust 最早是 Mozilla 雇员 Graydon Hoare 的个人项目。从 2009 年开始,得到了 Mozilla 研究院的资助,2010 年项目对外公布,2010 ~ 2011 年间实现自举。自此以后,Rust 在部分重构 -> 崩溃的边缘反复横跳(历程极其艰辛),终于,在 2015 年 5 月 15 日发布 1.0 版
rust 无 GC、效率高、工程性强、强安全性
安装 ¶
先安装 Microsoft C++ Build Tools,勾选安装 C++ 环境即可

在 RUSTUP-INIT 下载系统相对应的 Rust 安装程序,直接默认安装
检查安装结果
bash1# 查看rust编译器版本 2$ rustc -V 3 4# 查看cargo版本 5$ cargo -V更新和卸载
bash1# 更新 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 checkCargo.toml和Cargo.lock
Cargo.toml 和 Cargo.lock 是 cargo 的核心文件
Cargo.toml是cargo特有的项目数据描述文件。它存储了项目的所有元配置信息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 ¶
新建项目
bash1$ cargo new hellow_world查看目录结构
bash1$ 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*/