网易首页 > 网易号 > 正文 申请入驻

以调试 Rust 的方式来学习 Rust | Linux 中国

0
分享至

导读:Rustlings 是由 Rust 团队维护的开源项目,旨在帮助你通过调试代码的方式来学习 Rust。

本文字数:6233,阅读时长大约: 7分钟

在我上一篇 opensource.com 中,我向你们展示了如何安装 Rust 工具链。但是,如果不能上手操作一下 Rust 的话下载工具链又有什么用?学习任何语言都包括阅读现有的代码和写很多的示例程序,这是精通一门语言的好方法。然而,我们还可以走第三条路:调试代码。

通过调试来学习牵扯到尝试去编译一个已经写好的(满是漏洞的)示例程序,理解编译器生成的错误信息,修复示例代码,然后再重新编译。重复这个过程直到代码能够成功被编译并运行。

github.com 是一个由 Rust 团队维护的开源项目,旨在帮助你通过调试代码来学习 Rust。它也会一路为你提供提示。如果你是一名 Rust 初学者,并且刚开始阅读或已经读完了 Rust 书籍,那么 Rustlings 就是理想的下一步。Rustllings 帮助你将运用书中所学,并转向开发更大的项目。

安装 Rustlings

我使用(并推荐)Fedora 电脑来体验 Rustlings,但是任何 Linux 发行版都可以。要安装 Rustlings,你必须下载并运行它的安装脚本。通常建议你以不具备任何特别权限的普通用户(非 root 用户)来运行脚本。

记住,你需要 Rust 工具链来使用 Rustlings。如果你还没有这些工具链,请参考我 opensource.com。

当你准备好时,下载这个安装脚本:

  1. $ curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh > rustlings_install.sh

  2. $ file rustlings_install.sh

  3. rustlings_install.sh: Bourne-Again shell script, ASCII text executable

阅读脚本以了解它会做什么:

  1. $ less rustlings_install.sh

然后运行安装:

  1. $ bash rustlings_install.sh

  2. [...]

  3. Installing /home/tux/.cargo/bin/rustlings

  4. Installed package `rustlings v4.8.0 (/home/tux/rustlings)` (executable `rustlings`)

  5. All done!

运行rustlings以开始。

Rustlings 练习

你现在可以使用命令rustlings。与标志--help一起执行来查看可选的选项。

  1. $ rustlings --help

这个安装脚本也克隆了 Rustlings 的 Git 仓库,并安装了运行示例程序所需的依赖。你可以在ruslings下的exercises目录查阅这些示例程序。

  1. $ cd rustlings

  2. $ pwd

  3. /home/tux/rustlings

  4. $ ls

  5. AUTHORS.md Cargo.toml CONTRIBUTING.md info.toml install.sh README.md target Cargo.lock CHANGELOG.md exercises install.ps1 LICENSE src tests

  6. $ ls -m exercises/

  7. advanced_errors, clippy, collections, conversions, enums, error_handling, functions, generics, if, intro, macros, mod.rs,

  8. modules, move_semantics, option, primitive_types, quiz1.rs, quiz2.rs, quiz3.rs, quiz4.rs, README.md,

  9. standard_library_types, strings, structs, tests, threads, traits, variables

从命令行列出所有练习

命令ruslings提供给你一个list命令用以展示每个示例程序,它的完整路径,以及状态 (默认为 “待定”)。

  1. $ rustlings list

  2. Name Path Status

  3. intro1 exercises/intro/intro1.rs Pending

  4. intro2 exercises/intro/intro2.rs Pending

  5. variables1 exercises/variables/variables1.rs Pending

  6. variables2 exercises/variables/variables2.rs Pending

  7. variables3 exercises/variables/variables3.rs Pending

  8. [...]

在显示结尾处,你会有一个进度报告用来追踪进度。

  1. Progress: You completed 0 / 84 exercises (0.00 %).

查看示例程序

命令rustlings list向你展示了现有的程序,所以你可以在任何时候查看这些程序的代码,你只需要将完整路径复制到你的终端作为命令 opensource.com 或者 opensource.com 的参数:

  1. $ cat exercises/intro/intro1.rs

验证你的程序

现在你可以开始调试程序了。你可以使用命令verify来做这件事。注意 Rustlings 选择了列表里的第一个程序(intro1.rs)并尝试去编译它,最后编译成功:

  1. $ rustlings verify

  2. Progress: [-----------------------------------] 0/84

  3. ✅ Successfully ran exercises/intro/intro1.rs!

  4. You can keep working on this exercise,

  5. or jump into the next one by removing the `I AM NOT DONE` comment:

  6. 6 | // Execute the command `rustlings hint intro1` for a hint.

  7. 7 |

  8. 8 | // I AM NOT DONE

  9. 9 |

正如你从结果中所见,尽管示例代码成功编译了,你依然需要做一些工作。每个示例程序的源文件中都带有以下注释:

  1. $ grep "NOT DONE" exercises/intro/intro1.rs

  2. // I AM NOT DONE

虽然第一个程序的编译没有问题,除非你去掉注释I AM NOT DONE,Rustlings 不会移到下一个程序。

来到下一个练习

一旦你从intro1.rs中去掉这些注释,你就可以通过再一次运行命令rustlings verify来到下一个练习。这一次,你会发现 Rustlings 尝试去编译这个系列中的下一个程序(intro2.rs),但是遇到了一个错误。你应该调试并修复这个问题,并前进。这是你理解为什么 Rust 说程序有漏洞的至关重要的一步。

  1. $ rustlings verify

  2. Progress: [>------------------------] 1/84

  3. ⚠️ Compiling of exercises/intro/intro2.rs failed! Please try again. Here's the output:

  4. error: 1 positional argument in format string, but no arguments were given

  5. --> exercises/intro/intro2.rs:8:21

  6. |

  7. 8 | println!("Hello {}!");

  8. | ^^

  9. error: aborting due to previous error

来点提示

Rustlings 有一个非常好用的hint参数,这个参数会告诉你示例程序中哪里出错了,以及如何去修复它。你可以认为这是在编译错误信息基础之上,一个额外的帮助选项。

  1. $ rustlings hint intro2

  2. Add an argument after the format string.

基于以上提示,修复这个程序就很简单了。你只需要在语句println中加一个额外的参数。这个 diff 对比应该能帮你理解发生的变化:

  1. < println!("Hello {}!", "world");

  2. ---

  3. > println!("Hello {}!");

一旦你做出了修改,并从源代码中去掉了注释NOT DONE,你可以再一次运行rustlings verify来编译并运行代码。

  1. $ rustlings verify

  2. Progress: [>-------------------------------------] 1/84

  3. ✅ Successfully ran exercises/intro/intro2.rs!

追踪进度

你无法在一天之内做完所有的练习,忘记练到哪也很常见。你可以执行命令list来查看你的练习状态。

  1. $ rustlings list

  2. Name Path Status

  3. intro1 exercises/intro/intro1.rs Done

  4. intro2 exercises/intro/intro2.rs Done

  5. variables1 exercises/variables/variables1.rs Pending

  6. variables2 exercises/variables/variables2.rs Pending

  7. variables3 exercises/variables/variables3.rs Pending

  8. [...]

运行特定的练习

如果你不想从头开始并且想要跳过一些练习,Rustlings 允许你使用命令rustlings run来专注特定的练习。如此可以运行指定的程序而不需要验证之前的课程。例如:

  1. $ rustlings run intro2

  2. Hello world!

  3. ✅ Successfully ran exercises/intro/intro2.rs

  4. $ rustlings run variables1

敲入练习名字可能会变得乏味,但 Rustlings 为你准备了便利的命令next用来移向系列中的下一个练习。

  1. $ rustlings run next

替代命令 watch

如果你不想在每次修改后还要敲一次verify,你可以在终端窗口中运行命令watch,然后再继续修改源代码以解决问题。命令watch会检测到这些修改,然后重新编译以查看这些问题是否被解决。

  1. $ rustlings watch

通过调试学习

Rust 编译器以提供非常有意义的错误信息而被熟知,这些错误信息会帮助你理解在你代码中的问题。这通常意味着更快的调试。Rustlings 是练习 Rust,学会阅读错误信息,并理解 Rust 语言的优秀途径。来看看 github.com 上 Rustlings 5.0.0 的最新功能吧。

opensource.com

via:

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出

LCTT 译者 :yzuowei

翻译: 4.0 篇

贡献: 20 天

2022-12-08

2022-12-27

https://linux.cn/lctt/yzuowei

欢迎遵照 CC-BY-SA 协议规定转载,

如需转载,请在文章下留言 “ 转载:公众号名称”,

我们将为您添加白名单,授权“ 转载文章时可以修改”。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
扛不住了!世界杯转播权五折甩卖,央视咬死底价拒不买单

扛不住了!世界杯转播权五折甩卖,央视咬死底价拒不买单

半路友人之他
2026-05-12 08:29:58
59:48,罕见一幕出现!郑丽文大获全胜,新党却揭开了蓝绿的老底

59:48,罕见一幕出现!郑丽文大获全胜,新党却揭开了蓝绿的老底

野史日记
2026-05-12 09:55:07
中美关系的潜力、张力、角力|谁在“只有特朗普”的对华政策决策圈中发挥作用

中美关系的潜力、张力、角力|谁在“只有特朗普”的对华政策决策圈中发挥作用

澎湃新闻
2026-05-12 07:26:27
莫名其妙!世界银行前行长竟要求中国,“不许囤积化肥和粮食”

莫名其妙!世界银行前行长竟要求中国,“不许囤积化肥和粮食”

丁丁鲤史纪
2026-05-12 18:01:22
永远要记住,和周围人搞好关系的秘诀,不是掏钱请客充大方,也不是嘴甜到让人起鸡皮疙瘩,而是狠狠做到这两点就够了

永远要记住,和周围人搞好关系的秘诀,不是掏钱请客充大方,也不是嘴甜到让人起鸡皮疙瘩,而是狠狠做到这两点就够了

心理观察局
2026-05-13 09:29:10
第3名儿童被找到,已确认溺亡

第3名儿童被找到,已确认溺亡

蓬勃新闻
2026-05-12 17:01:40
声势浩大!40国护航特朗普访华,全是美国盟友

声势浩大!40国护航特朗普访华,全是美国盟友

霁寒飘雪
2026-05-12 14:40:08
特斯拉宣布停产,震惊全网!

特斯拉宣布停产,震惊全网!

财经三分钟pro
2026-05-12 15:10:58
湖人0-4出局后,NBA夺冠概率更新!骑士1.8%遭低估马刺13.2%第三

湖人0-4出局后,NBA夺冠概率更新!骑士1.8%遭低估马刺13.2%第三

锅子篮球
2026-05-12 22:07:21
美方警告“岌岌可危”,伊方声称“别无选择”,美伊相互强硬宣示立场

美方警告“岌岌可危”,伊方声称“别无选择”,美伊相互强硬宣示立场

环球网资讯
2026-05-13 06:43:07
四川女子推搡哨兵后续:官媒定调,知情人曝内幕,代价远不止坐牢

四川女子推搡哨兵后续:官媒定调,知情人曝内幕,代价远不止坐牢

行者聊官
2026-05-12 22:07:54
世乒赛奖金出炉:王楚钦孙颖莎最高,梁靖崑太意外,陈幸同很正常

世乒赛奖金出炉:王楚钦孙颖莎最高,梁靖崑太意外,陈幸同很正常

笑饮孤鸿非
2026-05-13 10:58:45
女子与黑人老公接触后大出血感染离世,医生:犯了2个致命错误

女子与黑人老公接触后大出血感染离世,医生:犯了2个致命错误

娱乐圈见解说
2026-05-12 15:20:36
北京淘汰广东后上海却急了?复仇11冠王没戏:半决赛还可能被爆冷

北京淘汰广东后上海却急了?复仇11冠王没戏:半决赛还可能被爆冷

篮球快餐车
2026-05-13 02:55:10
女子因18元奶茶被亲姐拉黑,崩溃大哭:离婚带娃5年,都看不起我

女子因18元奶茶被亲姐拉黑,崩溃大哭:离婚带娃5年,都看不起我

辣媒专栏记录
2026-05-11 08:21:59
王海:举报拍黄瓜错在哪?别在道德绑架职业打假人

王海:举报拍黄瓜错在哪?别在道德绑架职业打假人

映射生活的身影
2026-05-12 14:45:05
亚运会名单公布!孙颖莎领衔,陈幸同意外落选,陈熠入选引争议

亚运会名单公布!孙颖莎领衔,陈幸同意外落选,陈熠入选引争议

体育就你秀
2026-05-13 09:48:17
广州文记壹心鸡创始人逝世

广州文记壹心鸡创始人逝世

南方都市报
2026-05-12 21:22:40
赵文卓浑圆的体型,膀大腰圆,这是真正练武的体型,泰森也是这样

赵文卓浑圆的体型,膀大腰圆,这是真正练武的体型,泰森也是这样

老吴教育课堂
2026-05-13 06:28:18
张本兄妹同升世界第3 张本智和回应:我很欣慰 但世界第1才是目标

张本兄妹同升世界第3 张本智和回应:我很欣慰 但世界第1才是目标

风过乡
2026-05-13 08:21:41
2026-05-13 11:31:00
Linux
Linux
Linux 中国开源社区
8018文章数 73112关注度
往期回顾 全部

科技要闻

谷歌剧透安卓重大升级 Gemini深度集成底层

头条要闻

中国驻美大使:“成为中国人”刷屏 大势不可阻挡

头条要闻

中国驻美大使:“成为中国人”刷屏 大势不可阻挡

体育要闻

14年半,74万,何冰娇没选那条更安稳的路

娱乐要闻

巩俐用中文宣布戛纳开幕,彰显国际地位

财经要闻

深圳夫妻囤芯片,身家飙涨320亿

汽车要闻

吉利银河“TT”申报图曝光 电动尾翼+激光雷达

态度原创

房产
本地
时尚
教育
公开课

房产要闻

穗八条引爆楼市!万博宝藏红盘,五一劲销出圈

本地新闻

用苏绣的方式,打开江西婺源

没八卦、纯素人、不惊艳,可她赢麻了

教育要闻

成都市新都区新辉学校:以“良知”为舵,向阳生长书写育人答卷

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版