Rust 学习路线:下一步学什么
如果你已经学完了这门课程里的各个主题,那么你掌握的 Rust 已经足够写出真正的程序了:变量、控制流、函数、所有权、借用、集合、模块、错误处理、trait、泛型,甚至还有线程、智能指针、unsafe 和宏。日常开发中会用到的东西,这些确实已经占了大头。剩下的主要是多练习,以及在需要时再去学各个库的具体用法。
动手做个小项目
Section titled “动手做个小项目”从这里开始,真正学到东西最快的办法,就是挑一个小项目,然后被卡住几次。本站准备了五个带讲解的项目,可以从它们开始:
- 猜数字游戏:经典的 Rust 第一个项目,练习输入、循环和
match。 - 单词计数器:读取一个文本文件,用
HashMap统计单词。 - 待办事项命令行工具:练习
Vec、struct、enum,以及把数据保存到文件。 - 用 clap 编写命令行工具:一个带子命令和
--help的真正命令行工具。 - 用 Axum 编写 Web API:一个基于 async/await 的 JSON API 服务器。
做完这些之后,试着自己独立做一个:
- 一个简单的计算器:练习
match、Result,以及对错误输入的处理。 - 一个读取 JSON 配置的程序:用 Serde 从文件里加载设置。
- 一个小小的网页爬虫或 API 客户端:在 async/await 的基础上,用
reqwest获取一个 URL。
还不确定想做哪类程序?“用 Rust 能做什么”系列页面介绍了 Rust 擅长的领域和大家常用的 crate:网络编程、数据库、桌面 GUI 应用、游戏和单片机。
值得了解的 crate
Section titled “值得了解的 crate”Rust 的包生态(crate,通过 crates.io(英文)分发)几乎覆盖了你想用库来解决的所有事情。下面几个会经常遇到:
serde(英文):读写 JSON(以及其他格式);参见用 Serde 处理 JSONclap(英文):构建命令行参数解析器;参见 clap 项目anyhow/thiserror(英文):应用和库中的错误处理;参见 anyhow 与 thiserrorrand、regex和chrono(均为英文):随机数、正则表达式和日期;参见随机数、正则表达式和日期与时间log/tracing(英文):日志记录;参见日志reqwest(英文):发送 HTTP 请求tokio(英文):异步编程;参见 async/await
这些 crate 都可以用 cargo add <crate 名> 添加到项目里,不需要另外的包管理器。Rust Cargo 与 crate 一页讲解了它的工作原理,以及怎样挑选一个好的 crate。
本课程没有讲到的主题
Section titled “本课程没有讲到的主题”这门课程比大多数入门教程走得更远,包括智能指针、线程和信道、async/await、unsafe Rust、调用 C 代码(FFI)、WebAssembly,以及自己编写 macro_rules! 宏。还有几个更深入的主题有单独的页面,等你准备好了再看:
- 过程宏:宏一页中
macro_rules!宏的“表兄弟”,更强大(也更复杂);#[derive(Debug)]之类的功能在底层就是靠它们实现的 - no_std / 嵌入式 Rust:不用标准库写 Rust,用于单片机和其他资源受限的环境
写出有用的 Rust 程序并不需要这些。知道它们存在就好,等你真的遇到需要它们的问题时再学也不迟。
继续学习的去处
Section titled “继续学习的去处”- Rust 程序设计语言(简体中文版):现在基础已经开窍了,再回头读一遍吧;很多内容第二次读会更好懂
- 通过例子学 Rust:更多带注释的代码,可以边读边学
- Rustlings(英文):直接在终端里修复的小练习
- This Week in Rust(英文):每周一期的简报,看看社区在做些什么
最后说句实在话
Section titled “最后说句实在话”你以后还是会碰到让你一头雾水的编译错误,这很正常。不只是新手,写了好几年 Rust 的人也会遇到。经验带来的区别,并不是错误不再出现,而是你读懂它们的速度越来越快。坚持写代码,坚持读编译器告诉你的信息,一切都会越来越容易。
祝你好运,也谢谢你一路坚持到这里。🦀
小测验
1. 本页推荐用哪个 crate 来读写 JSON?
2. 本页提到哪个 crate 用于异步编程?
3. 下面哪一项被本页列为课程“没有讲到”的主题?
得分: 0 / 3