首页 > 其他分享 >在调试中学习 Rust

在调试中学习 Rust

时间:2023-12-17 15:32:34浏览次数:28  
标签:__ rustlings rs 练习 学习 Rust exercises ___ 调试

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「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 编写代码。

  1. Rustlings 的核心理念就是让使用者从实践中掌握学习内容,而不是停留在死记硬背语法和教条主义中。所谓的实践就是,提供一系列带有错误的练习代码片段,每个练习对应一个样例程序,问题可能是语法层面的,也可能是逻辑方面的,要求使用者从中发现问题并修正代码,以到达正常编译和测试运行。
  2. 官方推荐直接使用 watch 模式,在 watch 模式下,系统会自动开始第一个练习。所以,不要对弹出的错误信息感到惊慌,它只是提醒你---调试练习开始了。
  3. 假如在解决问题的过程中,发现需要帮助的时候,系统可以提供帮助信息。如果你正在 watch 模式下,请输入 hint 获得帮助信息,否则请直接执行 rustlings hint exercise_name 命令,exercise_name 就是当前你需要获取帮助信息的练习名。
  4. 当然,你如果发现有些问题不适合被公示出来讨论,那么你可以向 rustlings 的 github 仓库提交内容,链接如下 https://github.com/rust-lang/rustlings/issues/new
  5. 在 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

相关文章

  • 《网络空间安全导论》第6周学习总结
    学期:2023-2024-1学号:20232402《网络空间安全导论》第6周学习总结教材学习内容总结教材学习中的问题和解决过程问题1:不太理解挑战应答认证问题1解决方案:参考极客教程文章《挑战性回应认证机制(CRAM)》进行学习挑战应答认证协议(CHAP)通过三次交互过程来校验对端的身份:当......
  • 2023-2024-1 20232315 《网络空间安全导论》第六周学习总结
    一、教材学习内容总结近一周我预习了第六章应用安全基础,了解了相关知识,下面本章思维导图: 二、教材学习中的问题和解决过程问题一:虚拟化主要有哪些方式解决方法:百度搜索总结答案:虚拟化有很多实现方式,比如:根据虚拟化的程度和级别,有软件虚拟化和硬件虚拟化,全虚拟化和半虚拟......
  • 2023-2024-1 20232322罗上林 《网络》第六周学习总结
    教材学习内容总结教材学习中的问题和解决过问题一:不理解半虚化的含义问题一解决方案:询问百度得知半虚拟化和全虚拟化的区别是什么?二者一字之差,但是实质却大不相同。两者不同点在于通过是否改变操作系统内核设置,目的都是为了实现虚拟化。一般Xen虚拟机包含了完全虚拟化(fullvir......
  • 2023-2024-1 20231417 《计算机基础与程序设计》第十二周学习总结
    2023-2024-120231417《计算机基础与程序设计》第十二周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十二周作业这个作业的目标《C语言程序设计》第11章作业正文 https://www.......
  • 2023-2024-1 20231403 《计算机基础与程序设计》第十二周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第十二周作业)这个作业的目标自学《C语言程序设计》第11章作业正文https://www.cnblogs.com/lsrmy/p/17908985.html教材学......
  • Vue学习计划-Vue2--VueCLi(二)vuecli脚手架创建的项目内部主要文件分析
    1.文件分析1.补充:什么叫单文件组件?一个文件中只有一个组件vue-cli创建的项目中,.vue的文件都是单文件组件,例如App.vue2.进入分析1.package.json:项目依赖配置文件:如图,我们说主要的属性:name:项目的名称version:项目版本scripts:脚本入口serve:启动项目命......
  • linux网络调试
    网络调试一、网络调试命令ping:用于测试与另一个网络设备的连通性。traceroute(或tracert在Windows上):**显示数据包从你的计算机到目标地址的路径。netstat:显示网络状态,包括打开的端口和连接信息。nslookup(或dig):**查询域名服务器,获取特定域名的IP地址。ifconf......
  • JVM虚拟机系统性学习-对象的创建流程及对象的访问定位
    对象的创建流程与内存分配对象创建流程如下:Java中新创建的对象如何分配空间呢?new的对象先放Eden区(如果是大对象,直接放入老年代)当Eden区满了之后,程序还需要创建对象,则垃圾回收器会对Eden区进行垃圾回收在垃圾回收的时候,会将Eden区的幸存对象转移到SurvivorFrom区如果再......
  • 已经调试成功的Protues工程用了一段时间后不能用的问题
    已经调试成功的Protues工程,经过一段时间后不能用的问题主要现象:(1)可以打开,运行时没有效果;(2)可以打开,运行时闪退解决办法:(1)删除原ARM芯片;(2)重新找到ARM芯片,重新加载;(3)重新连线;(4)装载hex文件;(5)运行调试 一点提示:Protues仿真时,不需要按键防抖动程序程序段: ......
  • 2024年 为什么不建议新人学习ABAP
    引言每个应届生都希望自己有良好的职业发展,当他们发现前路难通时,便会寻找更好的出路。“转码”曾经是个很火热的话题。在互联网行业高速发展的年代,转行学代码,入职大厂,升职加薪,是许多人的可以成真的梦想。而现在,行业进入平台期,不少人也开始迷茫,现在转码还值不值?这样重要的人生选......