想学 Rust 但不知道从哪里开始?读读该文
共 7217字,需浏览 15分钟
·
2021-12-09 13:11
之前给大家推荐了相关的入门书籍,今天再来一个全面的 Rust 免费资源(有些适合收藏查阅)。
这篇文章包含如下内容:
介绍 Rust 工具链 Rust 免费在线图书和资源 Rust 官方链接 视频教程 交互式学习 Rust 社区 Rust IDE 扩展 Rust 生态 进阶资源
01 介绍
Rust 是一门现代的系统编程语言,专注于安全,速度和并发。
这个基准测试[1]图表显示了 Rust 比哪些编程语言更快。你可以在此处[2]查看与 Go 语言的比较。
在本文中,你将找到基础 Rust 工具,最新文档,教程,视频和在线资源。
阅读此书后,你可以根据自己的情况,选择适合你的学习风格的方式开始有效地学习 Rust 编程语言。
安装 Rust 后,也就安装了 rustc,cargo,rustup 和其他标准工具。因此,让我们先了解 Rust 工具链,然后再看看其他资源。
02 Rust工具链
工具链是一组帮助语言生成功能代码的工具。它们可以通过简单的编译器和链接器程序,或其他库,IDE 或调试器提供扩展功能。
Rustup
rustup[3] 用于安装 Rust 编程语言,使你能够轻松地在稳定版,beta 版和 nightly 版编译器之间切换,并保持它们的更新。
你可以这样更新 Rust:
$ rustup update
rustc
rustc 是 Rust 编程语言的编译器。编译器是将源代码编译成二进制,比如库或可执行文件。通常我们会使用 Cargo 来运行 Rust 程序,而不是 rustc。
可以通过参考手册查看 rustc 的详细信息:https://doc.rust-lang.org/rustc/what-is-rustc.html。
Cargo
Cargo 是 Rust 的包(package)管理器。Cargo 下载 Rust 包的依赖项,编译包,制作可分发的包,然后可以将它们上传到 Rust 社区的包 registry,即 crates.io。
同样的,详细内容可以看 Cargo 的参考手册,即 The Cargo Book:https://doc.rust-lang.org/cargo/。
其他官方工具
Clippy:https://github.com/rust-lang/rust-clippy,这是一个 Rust 的 linter 工具; rustfmt: https://github.com/rust-lang/rustfmt,根据样式准则格式化 Rust 代码;
其他更多官方工具可以通过这个链接查看:https://rust-lang-nursery.github.io/rust-toolstate/。
03 Rust 免费在线书籍和资源
一般人学习 Rust 会找到官方的这本书:《The Rust Programming Language[4]》,不过这本书不一定是最好的。关于入门图书可以阅读该文。但这本书毕竟是官方出的,可以后续翻阅相关主题。比如它通过许多示例和图表解释了很多细节。
如果你喜欢通过示例的方式学习,Rust by Example[5] 很适合你。它是可运行示例的集合,这些示例说明了各种 Rust 概念和标准库。一共有 20 多个示例。
你可以从浏览器编辑和运行 Rust 代码(这是通过 Rust Playground 实现的):
Rust Cookbook 是一本简单示例集合的在线免费书籍,这些示例通常都是完成某个任务的最佳实践,例子中会大量使用 Rust 生态系统中的 crates。图书地址:https://rust-lang-nursery.github.io/rust-cookbook/intro.html。
04 Rust 官方链接
Rust 的官方网站:https://www.rust-lang.org/,官网支持多种国家和地区语言。
crate 是 Rust 社区二进制或库的 Registry,地址:https://crates.io/。
一个 crate 是功能的集合,而一个包(package)包含一个或多个 crate。一个包会有一个 Cargo.toml 文件,用来描述怎样构建这些 crate。
Rust 标准库地址:https://doc.rust-lang.org/std/。
Rust Playground 让你可以在浏览器中试用 Rust,同时可以方便的分享自己的代码给别人。地址:https://play.rust-lang.org/。
其他资源链接
Learn Rust[6] 提供了你可能需要的文档和指南。 Awesome Rust[7] 分类整理各种 Rust 库和工具。 Ferrous Teaching Material[8] 包括基础到高级主题的幻灯片,它提供了示例代码和简明的解释。
Rust Errors
如果你想了解详细的 Rust 错误,可以查看 Rust 编译器错误索引[9],其中列出所有的 Rust 错误和示例。
例如终端有如下错误:
在这个错误索引中:
05 视频教程
如果你喜欢通过视频来学习,B 站有一个 Rust 的免费视频教程,参考官方那本书进行讲解的。Rust 编程语言入门:https://www.bilibili.com/video/BV1hp4y1k7SV。
此外,在 B 站搜索 Rust 编程,发现视频还是挺多的,有些是国外的视频,但 B 站的 Up 主们加上了字幕,大家自己去搜索吧。
06 交互式学习
只看不练是永远学不会的。这里推荐一些交会式学习的教程。
Tour of Rust
Tour of Rust:https://tourofrust.com/,本教程旨在循序渐进地介绍 Rust 编程语言的特性。它涵盖了基础知识、基本控制流、基本数据结构类型和泛型类型。这个 Rust 语言之旅是一个开源项目,有众多语言的翻译版本,简体中文版:https://tourofrust.com/00_zh-cn.html。(不过目前简体中文版还有第 8 章没有翻译)
rustlings
rustlings[10] 提供了一些小练习,在官方 GitHub 账号下,让你习惯于阅读和编写 Rust 代码。你可以将其与官方的那本书搭配学习。
安装好 Rust 后,可以通过如下命令安装 rustlings(Mac/Linux),Windows 下看 GitHub 首页的说明安装:
$ cd ~
$ curl -L https://git.io/install-rustlings | bash
成功后,在终端执行如下命令:
$ cd ~/rustlings
$ rustlings watch
这时会出现如下错误:
我们打开 exercises/variables/variables1.rs 文件,在 x = 5 前面加上 let,保存,这个 watch 界面变成:
是不是很帅?!
也就是说,rustlings 中的练习都是故意未完成的。当你完成一个练习后,将 // I AM NOT DONE
这句删除,rustlings watch 会自动监听下一个练习。
而且每一个练习文件开头给了类似这样的提示:
// Make me compile! Execute the command `rustlings hint variables1` if you want a hint :)
你可以按照它的提示,执行:
$ rustlings hint variables1
Hint: The declaration on line 12 is missing a keyword that is needed in Rust
to create a new variable binding.
它告诉你应该怎么做。
Exercism
100% 免费的代码实践和指导。它完全是开源的,由数千名志愿者贡献。它将指导你如何在你的电脑上安装它。你不仅可以学习 Rust,还可以学习其他 50 种编程语言。
当你完成了一个编码练习后,可以上传你的解决方案,并由一个导师 review。
07 Rust 社区
博客和新闻(英文)
Rust Community page:https://www.rust-lang.org/community 推荐《Rust周刊》:https://this-week-in-rust.org/,它每周提供最新的关于 Rust 的信息 Rust 官方博客:https://blog.rust-lang.org/,核心团队利用这个博客来发布 Rust 的重大进展 Inside Rust 博客:https://blog.rust-lang.org/inside-rust/index.html,也是官方的博客,不过针对那些希望参与 Rust 开发的人
获取帮助?
Rust Discord:https://discord.com/invite/rust-lang
Rust Users Forum:https://users.rust-lang.org/
Stackoverflow 和 Reddit 等。
不过国内用户可以在 Rust语言中文社区 交流,地址:https://rustcc.cn/。当然,国内一般都有 QQ 群、微信群。
Rust Meetup
这两年,国内社区也在组织相关的活动,比如 Rust China Conf 2020。最近 Rust 中文社区也在组织各个城市的 Meetup,比如 2021 年 4 月 10 日在北京的,可以通过这个链接报名:https://www.huodongxing.com/event/5590522571600 ,免费的,很棒!
08 Rust IDE 扩展
Rust 官方列出了支持 Rust 的编辑器扩展:https://www.rust-lang.org/tools。
如果你是 VSCode 用户,有官方的扩展(rust),也有社区的(rust-analyzer),目前看,似乎社区的扩展更好用。
不过官方已经在开发 rls 2.0,目标是获得更好的体验,期待一下。
这个网站:https://areweideyet.com/,可以查看各个编辑器对 Rust 的支持程度。
09 Rust 生态
你可以在 crates.io 中找到许多库。列一些你可能感兴趣的:
Web 框架
根据 Web 框架基准测试[11],Actix 是最快的框架。有十几个活跃的 Rust Web 框架。**Actix**[12], **Rocket**[13], **Gotham**[14], **Seed**[15] 等。你可以从 Web 框架比较[16]中了解更多信息。
Web 开发
最快的 Rust 模板引擎:https://github.com/Kogia-sima/sailfish/,据说比 handlebars 快 200 倍。
WebAssembly
如果你对 WebAssembly 感兴趣,以下链接可以看看:
官方关于 WebAssembly 的介绍:https://www.rust-lang.org/what/wasm 一本专门关于 Rust 和 WebAssembly 的书:https://rustwasm.github.io/docs/book/ 一个 Rust/Wasm 框架:https://github.com/yewstack/yew
更多资料可以通过网络搜索到。
网络编程
官方关于这块内容有专门的介绍:https://www.rust-lang.org/what/networking。
嵌入式开发
官方页面:https://www.rust-lang.org/what/embedded Rust 嵌入式开发的图书:https://docs.rust-embedded.org/book/intro/index.html
命令行程序
官方页面:https://www.rust-lang.org/what/cli Rustbox[17] 是一个 API 库,它允许程序员编写基于文本的用户界面 。。。
在 awesome-rust 中有很多库。
操作系统开发
有一个专门的网站:https://rust-osdev.com/。
其他语言绑定
这里可以找到:https://crates.io/keywords/bindings。
ORM
Diesel:http://diesel.rs/,是用于 Rust 的,安全可扩展的 ORM 和查询生成器。
10 进阶资源
学习完基础,入门 Rust 后,根据自己的兴趣和需要,可以看看下面这些进阶(或实战)资源。
**Command Line Applications in Rust**[18]:使用 Rust 编写命令行应用程序的技巧和实战。 **Rust API Guidelines**[19]:Rust API 指南,是关于如何设计 Rust 语言 API 的一些建议。 Rust 语言 Cheat Sheet:https://cheats.rs/,适合有经验的程序员和中级 Rust 用户。如果你更喜欢视觉示例驱动的内容,这是为你准备的。你可以从它的 Github repo 下载 PDF。 **Rust Forge**[20]:对 Rust 一些有用的补充文档。 **The Rust Reference**[21]:Rust 编程语言的主要参考。它提供了语言的结构和使用、内存模型、并发模型、运行时服务等等。 Rust 设计模式[22] 。。。
资源还有很多很多,不一一列举了。
11 结论
除了以上列举的,肯定还有很多其他资源。目前,国内用户关于 Rust 的博客还没有来得及收集,有机会收集收集,分享给大家。
参考资料
基准测试: https://benchmarksgame-team.pages.debian.net/benchmarksgame/which-programs-are-fastest.html
[2]此处: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust-go.html
[3]rustup: https://github.com/rust-lang/rustup
[4]The Rust Programming Language: https://doc.rust-lang.org/book/
[5]Rust by Example: https://doc.rust-lang.org/rust-by-example/index.html
[6]Learn Rust: https://www.rust-lang.org/learn
[7]Awesome Rust: https://github.com/rust-unofficial/awesome-rust
[8]Ferrous Teaching Material: https://ferrous-systems.github.io/teaching-material/
[9]Rust 编译器错误索引: https://doc.rust-lang.org/error-index.html
[10]rustlings: https://github.com/rust-lang/rustlings
[11]Web 框架基准测试: https://www.techempower.com/benchmarks/#section=data-r19
[12]Actix: https://github.com/actix/actix
[13]Rocket: https://rocket.rs/
[14]Gotham: https://gotham.rs/
[15]Seed: https://github.com/seed-rs/seed
[16]Web 框架比较: https://github.com/flosse/rust-web-framework-comparison
[17]Rustbox: https://github.com/gchp/rustbox
[18]Command Line Applications in Rust: https://rust-cli.github.io/book/index.html
[19]Rust API Guidelines: https://rust-lang.github.io/api-guidelines/
[20]Rust Forge: https://forge.rust-lang.org/index.html
[21]The Rust Reference: https://doc.rust-lang.org/reference/introduction.html
[22]Rust 设计模式: https://github.com/rust-unofficial/patterns
推荐阅读