Rust 不是"更难的 C++",而是一门让编译器替你站岗的系统语言。它不靠 GC、不靠运行时反射,在编译期就把空指针、数据竞争、内存越界全拦在门外。这一页把所有权、借用、生命周期、Trait、智能指针、无畏并发、工程化这十七块硬骨头拆碎了喂——每一块都配 Java 对照、完整代码和人话解释。版本基线:rustc 1.97 稳定版 / edition 2021 为主,2024 edition 已就位。
| 项目 | 当前状态 | 说明 |
|---|---|---|
| rustc 稳定版 | 1.9x 系列(约 1.97) | Rust 每 6 周发一个稳定版,1.x 系列长期向后兼容,老代码永远能编。本页示例按 1.9x 写法。 |
| edition | 2018 / 2021(默认) / 2024 | edition 是"语言子版本",允许引入破坏性语法但靠 Cargo.toml 的 edition = "2021" 隔离。2024 edition 已于 2024 年 Q4 随 1.85 稳定,新特性见第 17 章。 |
| MSRV | Minimum Supported Rust Version | 每个 crate 声明的"最低能编译它的 Rust 版本"。你的 rustc 必须 ≥ 所有依赖的 MSRV,否则直接编不过。cargo info <crate> 可查。 |
| cargo | 随 rustc 同版本 | 构建+包管理器二合一,对标 Maven/Gradle 但简洁十倍,无需单独装。 |
| rustup | 1.29+ | 多版本工具链管理器,rustup update / default / toolchain list 随便切 stable/beta/nightly。 |
| 平台支持 | 全平台 Tier 1/2 | Windows(MSVC/GNU)、macOS、Linux 是一等公民;另有嵌入式(no_std)、WASM(wasm32-unknown-unknown)等众多 target。 |
第 1 节 · 为什么学 Rust:它到底解决了什么痛点
Why Rust · Core Strengths
第 2 节 · 环境搭建:rustup、cargo 与第一个程序
Toolchain · rustup · cargo · Hello World
第 3 节 · 基础语法:变量、类型、函数、控制流
Variables · Types · Functions · Control Flow
第 4 节 · 所有权 Ownership:Rust 的灵魂
Ownership · Move · Borrowing · Slice
第 5 节 · 结构体 Struct:Rust 的"类"
Struct · Methods · derive
第 6 节 · 枚举 Enum 与模式匹配:Option 和 Result
Enum · Pattern Matching · Option · Result
第 7 节 · 错误处理:panic、Result 与 ? 运算符
Error Handling · panic! · ? operator
第 8 节 · 泛型与 Trait:写一次,处处用
Generics · Traits · Trait Bounds
第 9 节 · 生命周期 Lifetime:引用的保质期
Lifetimes · Borrow Checker · 'a
第 10 节 · 集合:Vec、String、HashMap
Collections · Vec · String · HashMap
第 11 节 · 闭包与迭代器:Rust 的两大高阶武器
Closures · Iterators
第 12 节 · 智能指针:Box / Rc / Arc / RefCell
Smart Pointers · Interior Mutability
第 13 节 · 无畏并发:线程、消息、锁
Fearless Concurrency · Threads · Channels · Mutex
第 14 节 · 面向对象与设计模式:Rust 怎么玩
OOP in Rust · Design Patterns · Newtype
第 15 节 · 模块系统与工程化:Cargo、Workspace、clippy
Modules · Cargo · Workspace · clippy
第 16 节 · 宏与元编程:编译期就跑完的代码工厂
Macros · macro_rules! · Procedural Macros
第 17 节 · Unsafe Rust:这活我自己担着
Unsafe Rust · Raw Pointers · FFI
第 18 节 · Rust 2024 edition 新特性
Rust 2024 Edition
第 19 节 · 常见坑与面试重点
Pitfalls & Interview Cheat Sheet
第 20 节 · Cargo workspace 与工程化:从"能跑"到"能交付"
Cargo Workspace & Production Engineering
第 21 节 · 宏系统:macro_rules! 与过程宏的完整实践
Macros · Declarative & Procedural
第 22 节 · unsafe、FFI 与并发内存模型:把安全边界讲清楚
Unsafe Rust · FFI · Memory Model
小结 + 自测题
① 所有权三条:单一所有者、作用域结束自动 drop、同时一个所有者。记住它,Rust 入门一半。
② 借用规则:要么一个可变、要么多个不可变——Rust 消灭数据竞争的底层原理。
③ Option/Result:消灭 null 和未检查异常,编译器逼你处理所有情况。
④ 编译报错不是坏事,编译器在帮你提前发现线上 bug。前两周被骂得越狠,后面线上越稳。
1.(概念题)下面代码能不能编译?为什么?
查看答案
不能。s1 的所有权已 move 给 s2,再用 s1 报 use of moved value。想继续用就 s1.clone() 或传 &s1。
2.(概念题)为什么 Rust 的 Option 比 Java 的 Optional 更安全?
查看答案
Java 的 Optional 只是个包装类,你不处理直接 get() 运行时照样 NPE;Rust 的 Option 是类型强制——不 match 出 Some/None 就拿不到值,编译不过。错误被左移到编译期。
3.(代码填空)longest 函数的生命周期怎么标?
查看答案
三处都填 &'a:fn longest<'a>(x: &'a str, y: &'a str) -> &'a str。返回值保质期等于两个参数中较短的那个。
4.(选择题)多线程共享一个可变 HashMap,用哪个?
A. Rc<RefCell<HashMap>> B. Arc<Mutex<HashMap>> C. &HashMap 直接传
查看答案
B。Rc 不是 Send 跨线程编译不过;Arc 负责多线程共享所有权,Mutex 负责互斥访问。
5.(思考题)为什么 Rust 的 match 必须穷尽,而 Java 的 switch 不必?
查看答案
match 是表达式,必须覆盖所有分支编译器才知道值是什么。好处:给枚举加新变体时,所有 match 的地方编译器都报错提醒你处理,大型项目里省无数"新增状态忘处理"的 bug。