lass="site-nav"> MJMJ 教学门户
技术栈学院 · Rust

Rust 不是"更难的 C++",而是一门让编译器替你站岗的系统语言。它不靠 GC、不靠运行时反射,在编译期就把空指针、数据竞争、内存越界全拦在门外。这一页把所有权、借用、生命周期、Trait、智能指针、无畏并发、工程化这十七块硬骨头拆碎了喂——每一块都配 Java 对照、完整代码和人话解释。版本基线:rustc 1.97 稳定版 / edition 2021 为主,2024 edition 已就位。

Rust 最新版本与兼容性速查(以官网最新稳定版为准,2026-09)
项目当前状态说明
rustc 稳定版1.9x 系列(约 1.97)Rust 每 6 周发一个稳定版,1.x 系列长期向后兼容,老代码永远能编。本页示例按 1.9x 写法。
edition2018 / 2021(默认) / 2024edition 是"语言子版本",允许引入破坏性语法但靠 Cargo.toml 的 edition = "2021" 隔离。2024 edition 已于 2024 年 Q4 随 1.85 稳定,新特性见第 17 章。
MSRVMinimum Supported Rust Version每个 crate 声明的"最低能编译它的 Rust 版本"。你的 rustc 必须 ≥ 所有依赖的 MSRV,否则直接编不过。cargo info <crate> 可查。
cargo随 rustc 同版本构建+包管理器二合一,对标 Maven/Gradle 但简洁十倍,无需单独装。
rustup1.29+多版本工具链管理器,rustup update / default / toolchain list 随便切 stable/beta/nightly。
平台支持全平台 Tier 1/2Windows(MSVC/GNU)、macOS、Linux 是一等公民;另有嵌入式(no_std)、WASM(wasm32-unknown-unknown)等众多 target。
为
第 1 节 · 为什么学 Rust:它到底解决了什么痛点
Why Rust · Core Strengths

Why Rust · Core Strengths

进入本节 →
环
第 2 节 · 环境搭建:rustup、cargo 与第一个程序
Toolchain · rustup · cargo · Hello World

Toolchain · rustup · cargo · Hello World

进入本节 →
基
第 3 节 · 基础语法:变量、类型、函数、控制流
Variables · Types · Functions · Control Flow

Variables · Types · Functions · Control Flow

进入本节 →
所
第 4 节 · 所有权 Ownership:Rust 的灵魂
Ownership · Move · Borrowing · Slice

Ownership · Move · Borrowing · Slice

进入本节 →
结
第 5 节 · 结构体 Struct:Rust 的"类"
Struct · Methods · derive

Struct · Methods · derive

进入本节 →
枚
第 6 节 · 枚举 Enum 与模式匹配:Option 和 Result
Enum · Pattern Matching · Option · Result

Enum · Pattern Matching · Option · Result

进入本节 →
错
第 7 节 · 错误处理:panic、Result 与 ? 运算符
Error Handling · panic! · ? operator

Error Handling · panic! · ? operator

进入本节 →
泛
第 8 节 · 泛型与 Trait:写一次,处处用
Generics · Traits · Trait Bounds

Generics · Traits · Trait Bounds

进入本节 →
生
第 9 节 · 生命周期 Lifetime:引用的保质期
Lifetimes · Borrow Checker · 'a

Lifetimes · Borrow Checker · 'a

进入本节 →
集
第 10 节 · 集合:Vec、String、HashMap
Collections · Vec · String · HashMap

Collections · Vec · String · HashMap

进入本节 →
闭
第 11 节 · 闭包与迭代器:Rust 的两大高阶武器
Closures · Iterators

Closures · Iterators

进入本节 →
智
第 12 节 · 智能指针:Box / Rc / Arc / RefCell
Smart Pointers · Interior Mutability

Smart Pointers · Interior Mutability

进入本节 →
无
第 13 节 · 无畏并发:线程、消息、锁
Fearless Concurrency · Threads · Channels · Mutex

Fearless Concurrency · Threads · Channels · Mutex

进入本节 →
面
第 14 节 · 面向对象与设计模式:Rust 怎么玩
OOP in Rust · Design Patterns · Newtype

OOP in Rust · Design Patterns · Newtype

进入本节 →
模
第 15 节 · 模块系统与工程化:Cargo、Workspace、clippy
Modules · Cargo · Workspace · clippy

Modules · Cargo · Workspace · clippy

进入本节 →
宏
第 16 节 · 宏与元编程:编译期就跑完的代码工厂
Macros · macro_rules! · Procedural Macros

Macros · macro_rules! · Procedural Macros

进入本节 →
U
第 17 节 · Unsafe Rust:这活我自己担着
Unsafe Rust · Raw Pointers · FFI

Unsafe Rust · Raw Pointers · FFI

进入本节 →
R
第 18 节 · Rust 2024 edition 新特性
Rust 2024 Edition

Rust 2024 Edition

进入本节 →
常
第 19 节 · 常见坑与面试重点
Pitfalls & Interview Cheat Sheet

Pitfalls & Interview Cheat Sheet

进入本节 →
C
第 20 节 · Cargo workspace 与工程化:从"能跑"到"能交付"
Cargo Workspace & Production Engineering

Cargo Workspace & Production Engineering

进入本节 →
宏
第 21 节 · 宏系统:macro_rules! 与过程宏的完整实践
Macros · Declarative & Procedural

Macros · Declarative & Procedural

进入本节 →
u
第 22 节 · unsafe、FFI 与并发内存模型:把安全边界讲清楚
Unsafe Rust · FFI · Memory Model

Unsafe Rust · FFI · Memory Model

进入本节 →
20

小结 + 自测题

Summary & Quiz
记
这一页的核心心法

① 所有权三条:单一所有者、作用域结束自动 drop、同时一个所有者。记住它,Rust 入门一半。

② 借用规则:要么一个可变、要么多个不可变——Rust 消灭数据竞争的底层原理。

③ Option/Result:消灭 null 和未检查异常,编译器逼你处理所有情况。

④ 编译报错不是坏事,编译器在帮你提前发现线上 bug。前两周被骂得越狠,后面线上越稳。

小练习 · 五道自测题(点开看答案)

1.(概念题)下面代码能不能编译?为什么?

let s1 = String::from("hello"); let s2 = s1; println!("{}", s1);
查看答案

不能。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 函数的生命周期怎么标?

fn longest(x: ______ str, y: ______ str) -> ______ str { if x.len() > y.len() { x } else { y } }
查看答案

三处都填 &'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。