Rustlings Arena
← 返回竞技场

初学者指南 · 2026

学习 Rust:完整初学者路线图

从零到自信的 Rustacean——通过所有权、特征和借用检查器的结构化学习路径。

~1 个月
能写出有用的 Rust 代码
~3 个月
感到得心应手
~6 个月
能在真实项目中高效产出

开始之前你需要了解的

Rust 不适合作为第一门语言。你不需要是专家,但应具备:

Rust 学习路线图

1

安装与 Hello World

1–2 小时
rustup(官方安装程序)安装 Rust。一条命令即可安装编译器、Cargo(构建工具)和 rustfmt(格式化工具)。编写并运行你的第一个程序。熟悉 cargo newcargo buildcargo run
在 VS Code 或你选择的编辑器中安装 rust-analyzer 扩展。内联错误高亮至关重要——它会在你运行编译器之前就解释借用检查器的错误。
2

变量、类型与函数

1–3 天
学习基础内容:letlet mut、基本类型(i32、f64、bool、char、&str)、带显式返回类型的函数,以及"最后一个表达式即为返回值"规则。
关键洞察:变量默认是不可变的。let mut 选择进入可变性。遮蔽(let x = x + 1)允许你复用变量名,同时创建新的绑定。
3

所有权——最难的部分

3–7 天

这是大多数初学者卡住的地方。所有权有三条规则:(1) 每个值有且仅有一个所有者;(2) 当所有者离开作用域时,值被释放;(3) 当堆上的值被赋给另一个变量时,所有权转移。

预计会在这里与编译器"战斗"。这很正常。仔细阅读错误信息——Rust 的错误是所有语言中最有帮助的。每一次与编译器的较量,都在传授你关于内存的真实知识。

大约第 5–7 天会豁然开朗。在此之前不要放弃。
4

借用与引用

2–4 天
你并非总需要所有权——你可以借用。&T 是不可变借用(可以同时有多个)。&mut T 是可变借用(同一时刻只能有一个,且不能有其他借用)。
规则:多个共享 & 或一个独占 &mut——两者不能共存。这相当于在编译期强制执行的读写锁,是数据竞争不可能发生的根本原因。
5

结构体、枚举与模式匹配

3–5 天
结构体组织数据。impl 块添加方法。Rust 的枚举是代数数据类型——每个变体可以携带不同的数据。match 穷举地处理它们。
学习 Option<T>(Some/None——Rust 的空值安全类型)和 Result<T, E>(Ok/Err——Rust 的错误类型)。两者都是枚举,随处可见。
6

错误处理

2–3 天
Rust 没有异常。可能失败的函数返回 Result<T, E>? 运算符将错误向上传播调用栈,无需在每一步手动 match。了解 unwrap()(出错时 panic——原型阶段可以用)和正确错误处理之间的区别。
7

特征与泛型

3–5 天
特征定义共享行为——类似接口,但更强大。泛型让一个函数能处理多种类型。两者结合是标准库实现零成本复用的方式。学习常见内置特征:DisplayDebugCloneIteratorFrom/Into
8

闭包与迭代器

2–3 天
闭包是匿名函数:|x| x * 2。迭代器链(.filter().map().collect())是惰性的,编译为高效循环——没有中间分配。这是地道的 Rust 写法,你会频繁使用。
9

生命周期

2–4 天
生命周期防止悬垂引用。大多数情况下生命周期会被自动推断——只有当编译器无法确定引用存活时间时,才需要显式标注。语法是 'a。心智模型:"输出引用的存活时间不能超过输入引用。"

不要在早期为生命周期感到压力。大多数真实代码不需要显式标注。在熟悉其他所有内容之后再回头学这一章。

10

构建真实项目

持续进行

巩固所学最快的方式是动手做项目。适合入门的项目:

  • 命令行工具(使用 clap crate 解析参数)
  • axum 搭建简单的 HTTP 服务器
  • 文本文件解析器或 CSV 处理器
  • 将你现有的某个 Python/JS 脚本用 Rust 重写

5 个让所有人都踩坑的地方

1. 本该借用,却一直转移所有权

Rust 新手会到处使用 .clone() 来规避所有权错误。clone 能用,但通常没有必要——大多数时候,引用(&T)才是你真正需要的。问问自己:"我需要拥有这个值,还是只是读取它?"

2. 分号陷阱

函数最后一行末尾的分号会悄无声息地将返回类型改为 ()。这会导致 E0308 类型不匹配,让初学者困惑好几天。Rust 是基于表达式的——没有分号意味着该表达式作为返回值。

3. String 与 &str 的混淆

String 是拥有所有权的堆分配字符串。&str 是借用的切片。函数参数几乎总应该接受 &str 而非 String——&str 同时接受 String 和字符串字面量。编译器错误通常会提示你使用 as_str() 或 &。

4. 闭包中迭代器的双重引用

当你对 Vec<i32> 调用 .iter() 时,闭包内每个元素是 &&i32。使用 |&&x| 或 |x| *x 来解引用。.into_iter() 会消耗集合,直接给出拥有所有权的 i32。这几乎让每个 Rust 初学者都踩过坑。

5. 试图同时持有引用和进行可变操作

你不能同时持有活跃的 &T 借用并调用 &mut T 方法。解决方案:(a) 在可变操作之前将值复制出来,(b) 用作用域块结束借用,或 (c) 重构代码使两者不必同时存在。

🎯 最快的学习方式:做练习,不只是阅读

阅读《Rust 程序设计语言》很有价值——但借用检查器只有在你亲自与之较量时才会真正内化。强迫你修复编译器错误的练习,比被动阅读快 3 倍。这正是 Rustlings Arena 存在的原因:浏览器中 26 个交互式挑战,无需安装。

各阶段最佳免费资源

🌱 完全初学者

  • Rustlings Arena(本站) 26 个浏览器交互式挑战——无需安装
  • 《Rust 程序设计语言》 官方书籍,免费在线阅读——权威参考
  • Rustlings CLI Rust 基金会出品的官方终端练习

🔥 逐渐熟悉

  • Rust by Example 以代码为主的学习方式,每个概念都有可运行示例
  • Exercism Rust 题库 100+ 道练习题,附社区辅导
  • rustlings 错误参考 常见编译器错误解析与修复

🚀 构建项目

  • 《Zero to Production in Rust》 构建真实的邮件订阅后端——强烈推荐
  • 《Comprehensive Rust》(Google 出品) 面向 Android/系统开发者的 Rust 教程,由 Google 编写
  • Jon Gjengset 的 YouTube 频道 深度直播编程——适合入门后进阶

常见问题

学习 Rust 需要多长时间?

预计需要 1–2 周所有权才会真正理解,1 个月后才能编写有用的程序,3–6 个月后才能在真实项目中感到游刃有余。学习曲线集中在前期——过了所有权这一章之后会轻松很多。

Rust 适合初学者吗?

Rust 不适合作为第一门语言——借用检查器引入了 Python 或 JavaScript 中不存在的概念。但如果你已经掌握一门语言并想学习系统编程,Rust 的编译器错误比 C++ 更有教育意义,工具链也非常出色。

学 Rust 需要会 C 或 C++ 吗?

不需要。许多成功的 Rust 开发者来自 Python、JavaScript 或 Go 背景。有 C/C++ 经验有助于理解所有权的重要性(因为你亲身经历过它所防止的那些 Bug),但这不是前提条件。

用 Rust 第一个应该做什么项目?

命令行工具是经典的入门项目。它涉及文件 I/O、解析、错误处理和结构体——覆盖了大多数 Rust 概念,而无需用到异步或 Web 框架。clap crate 让参数解析变得简单。

2026 年学 Rust 值得吗?

值得。Rust 现已进入 Linux 内核、Android、Windows、AWS、Cloudflare 以及无数生产系统。Rust 工程师需求旺盛,而供给相对于其技能价值仍然偏低。一旦所有权的概念融会贯通,这也是一门令人深感满足的语言。

🦀

准备好了吗?

26 个免费互动挑战。无需安装,无需注册,马上开始。