第 1 章:认识 Rust —— 安全与速度的"双料冠军"¶
场景: 你决定学习一门"不一样"的编程语言。Rust 不像 Java 那样有垃圾回收,也不像 C 那样需要手动管理内存——它用一种独特的方式(所有权系统)在编译时就确保内存安全。让我们从安装环境开始,运行你的第一个 Rust 程序。
1.1 Rust 是什么?¶
核心比喻:Rust 就像一位严格的驾校教练
学车时,有些教练只在你撞车后才告诉你错了(运行时错误)。有些教练让你自己摸索,撞了再说(C/C++ 的内存 bug)。
Rust 就像一位严格的驾校教练——在你上车之前就检查你的安全带、后视镜、座椅位置。如果你有危险操作,他根本不会让你发动汽车(编译时错误)。
虽然学的时候觉得"管得真多",但一旦上路,你几乎不会出事故。
Rust 由 Graydon Hoare 于 2006 年创建,Mozilla 于 2009 年赞助开发,2015 年发布 1.0 版本。
| 特性 | 说明 |
|---|---|
| 内存安全 | 所有权系统在编译时消除空指针、悬垂指针、双重释放 |
| 零成本抽象 | 高级语法不带来运行时开销,性能媲美 C/C++ |
| 无垃圾回收 | 不需要 GC,内存由所有权系统自动管理 |
| 并发安全 | 类型系统在编译时防止数据竞争 |
| 现代工具链 | Cargo(构建+包管理)、rustfmt(格式化)、clippy(代码检查) |
1.2 安装 Rust¶
Rust 使用 rustup 工具链管理器来安装和管理 Rust 版本。
- 打开浏览器,访问 https://rustup.rs
- 下载并运行
rustup-init.exe - 按照提示安装(选择默认选项即可)
- 安装完成后,打开 命令提示符 或 PowerShell,输入:
预期输出:
Rust 工具链组成
| 工具 | 作用 |
|---|---|
rustc |
Rust 编译器 |
cargo |
包管理器和构建工具 |
rustup |
Rust 工具链管理器(安装、更新、切换版本) |
rustfmt |
代码格式化工具 |
clippy |
代码检查工具(提供改进建议) |
1.3 你的第一个 Rust 程序¶
1.3.1 使用 Cargo 创建项目¶
Cargo 是 Rust 的构建系统和包管理器。用 Cargo 创建项目是最佳实践:
这会创建一个名为 hello_world 的目录,包含以下文件:
1.3.2 查看生成的代码¶
src/main.rs 中已经有一个默认的 Hello World 程序:
1.3.3 编译并运行¶
运行结果:
Compiling hello_world v0.1.0
Finished dev [unoptimized + debuginfo] target(s) in 0.5s
Running `target/debug/hello_world`
Hello, world!
1.4 改造 Hello World¶
让我们修改 main.rs,写一个更丰富的程序:
fn main() {
// 打印问候语
println!("===== Rust 初体验 =====");
let name = "小破手";
let year = 2026;
println!("你好,{}!", name);
println!("欢迎在 {} 年学习 Rust!", year);
// 简单的计算
let a = 10;
let b = 20;
let sum = a + b;
println!("{} + {} = {}", a, b, sum);
// Rust 的表达式特性
let is_greater = if a > b {
"a 大于 b"
} else {
"a 不大于 b"
};
println!("判断结果: {}", is_greater);
}
运行结果:
1.5 Rust 程序的基本结构¶
// 1. main 函数是程序入口
fn main() {
// 2. 变量声明(默认不可变)
let x = 5;
// 3. 宏调用(以 ! 结尾的是宏)
println!("x 的值是: {}", x);
// 4. 表达式(以分号结尾的是语句)
let y = {
let a = 3;
a + 1 // 注意:表达式不加分号,表示返回值
};
println!("y 的值是: {}", y);
}
| 组成部分 | 说明 |
|---|---|
fn main() |
程序入口函数 |
let |
变量声明关键字 |
println!() |
宏(macro),! 表示这是宏而非普通函数 |
{} |
占位符,用于格式化输出 |
| 表达式 vs 语句 | 表达式有返回值(不加分号),语句没有(加分号) |
宏 vs 函数
println! 后面有 !,说明它是宏而不是函数。宏在编译时展开,比函数更灵活。初学阶段你只需要知道 println! 和 vec! 是宏即可。
1.6 Cargo.toml 配置文件¶
| 字段 | 说明 |
|---|---|
[package] |
项目元信息 |
name |
项目名称 |
version |
版本号(语义化版本) |
edition |
Rust 版本(2021 是目前最新) |
[dependencies] |
第三方库依赖声明 |
要点总结¶
- Rust 通过所有权系统在编译时保证内存安全
-
rustup管理 Rust 工具链,cargo管理项目 -
cargo new创建项目,cargo run编译并运行 -
fn main()是程序入口 -
println!()是宏,用于打印输出 -
let声明变量,默认不可变 - 表达式不加分号表示返回值,语句加分号
课后练习¶
-
修改问候语 :修改
main.rs,让它打印你的名字、年龄和爱好。 -
探索 Cargo :尝试
cargo build --release和cargo check(只检查不编译),观察它们的区别。 -
表达式实验 :写一段代码,测试在
{}块中加分号和不加分号的区别。
下一章预告: 现在你知道了如何让 Rust 程序运行。第 2 章将学习变量与数据类型——Rust 的"储物规则",包括独特的不可变性设计和丰富的数据类型。