以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/EFd0bEZmfxySjmSWrOcS5g
Rustlings 是 Rust 团队推出的一个开源项目,旨在帮助初学者在调试程序过程中学习 Rust 语言。
上期有篇文章讲到如何配置和升级 Rust 的工具链 《简明快速配置 Rust 工具链》,有兴趣可以点击查阅。工具链是用来编译调试程序代码的,如果你不上手去练习使用,那么这些工具将毫无用处。
学习一门计算机语言除了比较直白的方法是阅读别人优秀的代码和亲自上手编写大量的代码,还有就是实践中得真知。这篇文章的本意是侧重于实践,并介绍通过调试代码来学习。
具体点,准备一些现成的工程代码(也可以是你自己的代码),但这些代码或多或少存在一些错误,需要同学们自己在编译过程阅读编译器输出的错误信息和修复建议,并手动修复工程代码中蕴含的错误,然后再次编译,如此重复,直到工程能够完整编译结束和顺利运行。
恰好,Rust 团队提供了一个开源项目 Rustlings,就是为了契合这种学习思路,以帮助各位初学者顺利入门 Rust 语言。
下面开始我们的初体验吧!
安装 Rustlings
由于 Rustlings 依赖于 rust 工具链的应用,所以在安装 Rustlings 之前,你需要确保你所用的系统已经准备好 rust 的工具链环境。如果还没有,可以参考我的文章《简明快速配置 Rust 工具链》。
官方推荐的安装方式是通过下载它的安装脚本,然后在本地执行该脚本,该脚本会自动下载所有依赖包并编译安装,最终会安装好最新版 Rustlings。
下载安装脚本
$ cd ~
$ curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh > rustlings_install.sh
$ file rustlings_install.sh
rustlings_install.sh: Bourne-Again shell script, ASCII text executable
如果上面在执行 curl 下载脚本文件时老是提示连接失败,估计是被墙了,可以在公众号回复关键词【rustlings_install】获取我的网盘备份。
运行安装脚本
$ bash ./rustlings_install.sh
[...]
Installing /home/user/.cargo/bin/rustlings
Installed package `rustlings v4.8.0 (/home/user/rustlings)` (executable `rustlings`)
All done!
安装脚本会克隆 rusdlings Git 存储库,并安装运行示例程序所需的所有依赖项。
好了,现在 rustlings 已经在你的环境里安装完毕。
动起手来
一切从 rustlings 指令开始,输入指令 rustlings 看看
$ rustlings
welcome to...
_ _ _
_ __ _ _ ___| |_| (_)_ __ __ _ ___
| '__| | | / __| __| | | '_ \ / _` / __|
| | | |_| \__ \ |_| | | | | | (_| \__ \
|_| \__,_|___/\__|_|_|_| |_|\__, |___/
|___/
/Users/user/.cargo/bin/rustlings must be run from the rustlings directory
Try `cd rustlings/`!
显示末尾有个提示信息,意思是说 rustlings 指令应该在 rustlings 目录下执行
$ ll
total 8
drwxrwxrwx 1 user user 512 Sep 26 01:49 ./
drwxrwxrwx 1 user user 512 Sep 26 01:02 ../
drwxrwxrwx 1 user user 512 Sep 26 01:51 rustlings/
-rwxrwxrwx 1 user user 4662 Sep 26 01:15 rustlings_install.sh*
$ cd rustlings/
$ rustlings
welcome to...
_ _ _
_ __ _ _ ___| |_| (_)_ __ __ _ ___
| '__| | | / __| __| | | '_ \ / _` / __|
| | | |_| \__ \ |_| | | | | | (_| \__ \
|_| \__,_|___/\__|_|_|_| |_|\__, |___/
|___/
Thanks for installing Rustlings!
...
不要惊慌!Rustlings 就是面向初学者的,它将通过一系列的调试实践,来教会你如何使用 rust 编写代码。
- Rustlings 的核心理念就是让使用者从实践中掌握学习内容,而不是停留在死记硬背语法和教条主义中。所谓的实践就是,提供一系列带有错误的练习代码片段,每个练习对应一个样例程序,问题可能是语法层面的,也可能是逻辑方面的,要求使用者从中发现问题并修正代码,以到达正常编译和测试运行。
- 官方推荐直接使用 watch 模式,在 watch 模式下,系统会自动开始第一个练习。所以,不要对弹出的错误信息感到惊慌,它只是提醒你---调试练习开始了。
- 假如在解决问题的过程中,发现需要帮助的时候,系统可以提供帮助信息。如果你正在 watch 模式下,请输入
hint
获得帮助信息,否则请直接执行rustlings hint exercise_name
命令,exercise_name 就是当前你需要获取帮助信息的练习名。- 当然,你如果发现有些问题不适合被公示出来讨论,那么你可以向 rustlings 的 github 仓库提交内容,链接如下 https://github.com/rust-lang/rustlings/issues/new
- 在 rustlings 里同样可以使用代码补全功能,输入
rustlings lsp
命令即可。
列出所有练习
在 rustlings 安装目录下有个专门目录,用于存放练习示例程序
$ pwd
/home/user/rustlings
$ ls -m exercises/
advanced_errors, clippy, collections, conversions, enums, error_handling, functions, generics, if, intro, macros, mod.rs,
modules, move_semantics, option, primitive_types, quiz1.rs, quiz2.rs, quiz3.rs, quiz4.rs, README.md,
standard_library_types, strings, structs, tests, threads, traits, variables
同时 rustlings 也提供了命令直接显示所有的练习、各个练习的安装路径和状态
$ rustlings list
Name Path Status
intro1 exercises/intro/intro1.rs Pending
intro2 exercises/intro/intro2.rs Pending
variables1 exercises/variables/variables1.rs Pending
variables2 exercises/variables/variables2.rs Pending
variables3 exercises/variables/variables3.rs Pending
.....
Progress: You completed 0 / 96 exercises (0.0 %).
各个练习默认状态为待确认(Pending)状态。
在 rustlings list 命令返回的所有信息结尾处,有一份简短的练习进度报告,这样你可以据此跟踪自己的学习进度。
Progress: You completed 0 / 96 exercises (0.0 %).
聪明的你已经想到了,你可以用这条命令来帮你回忆上次练习到哪一步了。
上面这份报告显示我还是比较懒的,全部 96 个练习完全没动静,So ....
查看练习代码
既然已经知道练习的程序存放在哪里,那么就可以随时通过完整路径查看这些练习程序的代码。
一般我习惯用 vscode 编辑和阅读代码,所以我推荐先导航到代码目录,然后用 vscode 打开当前目录。如果你是在 Windows 环境下,可以鼠标右键直接打开,或者 Linux 环境下,可以在终端里输入以下命令
$ code ./
开始调试
rustlings 提供了推荐的练习顺序,第一步可以输入 rustlings verify,自动开始按照推荐的顺序验证下一个待确认的练习程序,包括先编译然后运行,同时输出结果。
开始的时候,可以不做任何修改,直接执行自动验证
$ rustlings verify
Progress: [---------...---------] 0/96 (0.0 %)
✅ Successfully ran exercises/intro/intro1.rs!
标签:__,rustlings,rs,练习,学习,Rust,exercises,___,调试
From: https://blog.51cto.com/englyf/8862018