Rust基础

第1课:安装与Hello World

🎯 本课目标

完成Rust开发环境搭建,理解编译工具链,编写并运行第一个Rust程序,掌握cargo项目管理。

1. Rust简介

Rust是一种系统编程语言,由Mozilla研究院的Graydon Hoare于2006年发起,2015年发布1.0版本。三大核心目标:

Rust连续多年在Stack Overflow调查中被评为"最受喜爱语言",已被Linux内核、Android、Windows、Cloudflare等广泛采用。

2. 安装Rust工具链

2.1 Linux/macOS安装

// 使用rustup安装(官方推荐)
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

// 配置环境变量
$ source $HOME/.cargo/env

// 验证安装
$ rustc --version
rustc 1.95.0 (59807616e 2026-04-14)
$ cargo --version
cargo 1.95.0 (e84948d7 2026-04-15)

2.2 工具链组件

工具作用说明
rustcRust编译器将.rs源码编译为机器码
cargo包管理+构建类似npm/pip
rustup工具链管理管理版本和目标平台
rustfmt代码格式化统一风格
clippylint检查发现错误和改进建议

2.3 配置VS Code

推荐扩展:rust-analyzer(语言服务器)、CodeLLDB(调试器)、Even Better TOML

3. Hello World

// hello.rs - 最简Rust程序
fn main() {
    println!("Hello, World!");
}

✅ 编译验证通过 rustc hello.rs && ./hello

💡 要点解析:

4. Cargo项目管理

4.1 创建项目

$ cargo new hello_cargo
$ cd hello_cargo

// 项目结构
hello_cargo/
├── Cargo.toml      // 项目配置
├── src/
│   └── main.rs     // 源代码
└── .git/           // 自动Git

4.2 Cargo.toml详解

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2024"    // Rust版本

[dependencies]
// 第三方依赖写在这里

4.3 常用Cargo命令

命令功能
cargo build编译(debug模式)
cargo build --release编译优化版
cargo run编译并运行
cargo check快速语法检查
cargo test运行测试
cargo doc --open生成文档
cargo fmt格式化代码
cargo clippylint检查

5. 进阶:格式化输出

fn main() {
    // 位置参数
    println!("{} {}!", "Hello", "Rust");
    // 命名参数
    println!("{name} is {age}", name="Alice", age=30);
    // 格式化
    println!("十进制:{} 二进制:{:b} 十六进制:{:x}", 42, 42, 42);
    println!("浮点: {:.2}", 3.14159);
    // 对齐
    println!("{:>10}", "right");
    println!("{:<10}", "left");
    // 调试输出
    let v = vec![1, 2, 3];
    println!("调试: {:?}", v);
    println!("美化: {:#?}", v);
}

✅ 编译验证通过

6. 内存模型基础

Rust程序内存布局: ┌────────────── 高地址 ──────────────┐ │ 栈 (Stack) │ │ ┌────────┐ ┌────────┐ │ │ │ main() │→│println!│ │ │ │ 局部值 │ │ 宏展开 │ │ │ └────────┘ └────────┘ │ │ ↓ 栈增长 │ ├────────────────────────────────────┤ │ 堆 (Heap) │ │ Vec, Box, String等动态分配 │ ├────────────────────────────────────┤ │ 全局/静态 (Data/BSS) │ │ "Hello, World!" 字面量在这里 │ ├────────────────────────────────────┤ │ 代码段 (Text) │ │ 编译后的机器指令 │ └────────────── 低地址 ──────────────┘
⚠️ 关键:字符串字面量"Hello, World!"编译时嵌入只读数据段,类型&'static str,不是堆分配!String才是堆分配可变字符串。

7. 编译过程详解

// Rust编译流程
.rs 源码 → 词法分析 → Token流 → 语法分析 → AST
→ HIR lowering → HIR → 类型检查+借用检查
→ MIR (借用检查器在此工作!) → 代码生成
→ LLVM IR → LLVM优化 → 机器码

📝 练习题

练习1:修改Hello World

fn main() {
    println!("你好,{}!今天是{}", "你的名字", "2026-05-19");
}

练习2:Cargo项目

创建Cargo项目,添加chrono依赖,输出当前时间。

练习3:格式化挑战

println!输出对齐表格:

姓名      年龄   分数
────────────────────
Alice     25     95.50
Bob       30     88.30
🏆

成就解锁:初次启航

完成Rust安装,成功运行Hello World,掌握Cargo基本操作

🔬 深度理解:Rust的设计哲学

Rust的设计遵循几个核心原则,理解这些原则能帮助你更好地使用Rust:

1. 显式优于隐式

Rust要求你显式声明可变性(mut)、生命周期、错误处理。没有隐式类型转换、没有隐式异常传播、没有隐式GC。虽然代码更冗长,但行为更可预测。

2. 编译期检查优于运行时检查

借用检查器、生命周期分析、trait约束——所有这些都在编译期完成。这意味着运行时零开销。你付出的代价是编译时间,换来的是运行时性能和安全。

3. 零成本抽象

高层抽象(泛型、trait、迭代器、async/await)编译后与手写底层代码一样高效。你不需要在抽象和性能之间做选择。

4. 所有权是核心

所有其他特性——借用检查、生命周期、并发安全——都建立在所有权模型之上。理解所有权,就理解了Rust。

📖 Rust发展历史

年份里程碑
2006Graydon Hoare开始Rust项目
2009Mozilla开始赞助
2010首次公开
2012第一个预发布版
2015Rust 1.0发布
2016-2024连续Stack Overflow最受喜爱语言
2022Linux内核接纳Rust
2023Android、Windows开始使用Rust
2024Rust基金会成立,生态系统成熟
2026你正在学习Rust!

💡 学习路径建议

基础阶段(1-2周):完成本课程第1-7课,重点理解所有权和借用。

进阶阶段(2-3周):完成第8-14课,掌握trait、泛型、智能指针。

系统阶段(2-3周):完成第15-21课,实际写并发程序。

网络阶段(2-3周):完成第22-28课,构建真实的网络服务。

实战阶段(持续):完成第29-35课,开始自己的项目。


📚 扩展阅读

以下资源帮助你深入学习本课主题:

🔑 关键术语回顾

本课涉及的核心概念,确保你理解每一个:

术语说明
所有权Rust内存管理的核心机制,每个值有唯一所有者
借用通过引用访问数据,不获取所有权
生命周期引用有效的范围,编译期分析工具
traitRust的接口/抽象机制,类似其他语言的接口
泛型参数化类型,零成本抽象
模式匹配强大的数据解构和分支机制
零成本抽象高层抽象不引入运行时开销
fearless concurrency编译器保证线程安全

💬 学习建议

  1. 动手编码 — 每个代码示例都在本地运行一遍
  2. 修改实验 — 故意改错代码,看编译器报什么错
  3. 完成练习 — 每课的练习题是巩固知识的关键
  4. 阅读源码 — 看标准库和优秀开源项目的实现
  5. 写项目 — 真正掌握需要构建真实项目

🤔 常见问题

Q: Rust学习曲线真的很陡吗?

A: 前期确实需要适应所有权和借用检查器,但一旦理解了,这些概念会让你的代码更可靠。大多数人2-4周就能上手。

Q: Rust适合什么项目?

A: 系统编程、Web服务、CLI工具、嵌入式、WASM、网络服务、数据库等。基本上需要性能和安全的地方都适合。

Q: 遇到编译错误怎么办?

A: Rust编译器的错误信息非常友好!仔细阅读,通常会指出问题所在和修复建议。也可以用cargo clippy获取更多提示。