Redian新闻
>
以调试 Rust 的方式来学习 Rust | Linux 中国

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

科技
 
导读:Rustlings 是由 Rust 团队维护的开源项目,旨在帮助你通过调试代码的方式来学习 Rust。
本文字数:6233,阅读时长大约:7分钟

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

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

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

安装 Rustlings

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

记住,你需要 Rust 工具链来使用 Rustlings。如果你还没有这些工具链,请参考我 关于 Rustup 的文章🔗 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 向你展示了现有的程序,所以你可以在任何时候查看这些程序的代码,你只需要将完整路径复制到你的终端作为命令 cat🔗 opensource.com 或者 less🔗 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🔗 github.com 上 Rustlings 5.0.0 的最新功能吧。

下载 Rust 速查表🔗 opensource.com


via: https://opensource.com/article/22/7/learn-rust-rustlings

作者:Gaurav Kamathe 选题:lkxed 译者:yzuowei 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :yzuowei
🌟🌟
翻译: 4.0 篇
|
贡献: 20 天
2022-12-08
2022-12-27
https://linux.cn/lctt/yzuowei
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Linux Mint 的更新管理器现在支持 Flatpak | Linux 中国Kali Linux 发布今年最后一个版本 | Linux 中国如何在 Arch Linux 中安装 OpenOffice(新手指南) | Linux 中国硬核观察 #848 Linux 6.1 发布,拉开 Rust 进入 Linux 内核的大幕使用 PSCP 将文件和文件夹从 Windows 传输到 Linux | Linux 中国12 个对新手最重要的 Linux 命令 | Linux 中国最佳 Linux 远程桌面客户端 | Linux 中国GDB 的 7 个单步调试命令 | Linux 中国如何在 Arch Linux 中安装 elementary OS 的 Pantheon 桌面 | Linux 中国如何在 Silverblue 上变基到 Fedora Linux 37 | Linux 中国Linux 内核 6.1 发布,包含初始 Rust 支持 | Linux 中国天赋“易昺(bǐng)”,创造历史!通过 SSH 在远程 Linux 系统上执行命令 | Linux 中国通过编写“猜数字”游戏来学习 Ada 编程语言 | Linux 中国13 个从头开始构建的独立 Linux 发行版 | Linux 中国Linux 6.1正式发布,带有MGLRU、初始Rust支持使用这个多功能的 Linux 命令转换音频文件 | Linux 中国任何对国内的估计都是不可能准的,”事事皆有可能, 件件不能肯定“如何提高 Ubuntu 和其他 Linux 系统中的扬声器音量 | Linux 中国书卷气孙岳颁如何在 Ubuntu 等 Linux 中安装 Python 3.11 | Linux 中国如何通过 chroot 恢复 Arch Linux 安装 | Linux 中国你现在可以在 Arch Linux 上安装 Unity 7.6 桌面了 | Linux 中国如何在 Linux 中确定运行的是那种初始化系统 | Linux 中国索尔仁尼琴诺奖演讲:一句真话比整个世界的分量还重Fedora Linux 37 发布 | Linux 中国OBS Studio 29 发布,但对 Linux 用户来说变化不大 | Linux 中国如何在 Ubuntu 和其他 Linux 中检查 CPU 和硬盘温度 | Linux 中国5 个 htop 替代:增强你的 Linux 系统监控体验 | Linux 中国骄傲的委屈陷阱Bodhi Linux 7.0.0 开始测试新的功能和软件包 | Linux 中国Gnoppix Linux 22.12 发布 | Linux 中国秋:巧遇晒太阳的百岁老人(多图)如何在 Arch Linux 中安装 Cinnamon 桌面 | Linux 中国如何在 Ubuntu 和其他相关 Linux 中安装 Python 3.10 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。