<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

以調試Rust的方式來學習Rust

jf_wN0SrCdH ? 來源:Linux中國 ? 2023-01-03 14:56 ? 次閱讀
導讀:Rustlings 是由 Rust 團隊維護的開源項目,旨在幫助你通過調試代碼的方式來學習 Rust。

在我上一篇關于 Rustup 的文章中,我向你們展示了如何安裝 Rust 工具鏈。但是,如果不能上手操作一下 Rust 的話下載工具鏈又有什么用?學習任何語言都包括閱讀現有的代碼和寫很多的示例程序,這是精通一門語言的好方法。然而,我們還可以走第三條路:調試代碼。

通過調試來學習牽扯到嘗試去編譯一個已經寫好的(滿是漏洞的)示例程序,理解編譯器生成的錯誤信息,修復示例代碼,然后再重新編譯。重復這個過程直到代碼能夠成功被編譯并運行。

Rustlings是一個由 Rust 團隊維護的開源項目,旨在幫助你通過調試代碼來學習 Rust。它也會一路為你提供提示。如果你是一名 Rust 初學者,并且剛開始閱讀或已經讀完了 Rust 書籍,那么 Rustlings 就是理想的下一步。Rustllings 幫助你將運用書中所學,并轉向開發更大的項目。

安裝 Rustlings

我使用(并推薦)Fedora 電腦來體驗 Rustlings,但是任何 Linux 發行版都可以。要安裝 Rustlings,你必須下載并運行它的安裝腳本。通常建議你以不具備任何特別權限的普通用戶(非 root 用戶)來運行腳本。

記住,你需要 Rust 工具鏈來使用 Rustlings。如果你還沒有這些工具鏈,請參考我關于 Rustup 的文章。

當你準備好時,下載這個安裝腳本:


		
  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.rs21
  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上 Rustlings 5.0.0 的最新功能吧。

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11022

    瀏覽量

    207053
  • 調試
    +關注

    關注

    7

    文章

    529

    瀏覽量

    33653
  • 代碼
    +關注

    關注

    30

    文章

    4575

    瀏覽量

    67133
  • Rust
    +關注

    關注

    1

    文章

    225

    瀏覽量

    6426

原文標題:以調試 Rust 的方式來學習 Rust | Linux 中國

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Rust GUI實踐之Rust-Qt模塊

    Rust-Qt 是 Rust 語言的一個 Qt 綁定庫,它允許 Rust 開發者使用 Qt 框架來創建跨平臺的圖形界面應用程序。Qt 是一個跨平臺的應用程序框架,它提供了一系列的工具和庫,可以幫助
    的頭像 發表于 09-30 16:43 ?1109次閱讀

    Rust的多線程編程概念和使用方法

    Rust是一種強類型、高性能的系統編程語言,其官方文檔中強調了Rust的標準庫具有良好的并發編程支持。Thread是Rust中的一種并發編程方式,本文將介紹
    的頭像 發表于 09-20 11:15 ?565次閱讀

    只會用Python?教你在樹莓派上開始使用Rust

    硬件程序。按 Ctrl-C 退回到終端。如果有任何錯誤,請徹底檢查代碼,檢查是否缺少任何冒號,分號或方括號。Raspberry Pi上的Rust令人興奮的未來當前,Python并非如此可能會被Rust取代。它很容易
    發表于 05-20 08:00

    如何用 rust 語言開發 stm32

    本文介紹如何用 rust 語言開發 stm32。開發平臺為 linux(gentoo)。硬件準備本文使用的芯片為 STM32F103C8T6。該芯片性價比較高,價格低廉,適合入門學習。需要
    發表于 11-26 06:20

    怎樣去使用Rust進行嵌入式編程呢

    使用Rust進行嵌入式編程Use Rust for embedded development篇首語:Rust的高性能、可靠性和生產力使其適合于嵌入式系統。在過去的幾年里,Rust在程序
    發表于 12-22 07:20

    RUST在嵌入式開發中的應用是什么

    Rust是一種編程語言,它使用戶能夠構建可靠、高效的軟件,尤其是用于嵌入式開發的軟件。它的特點是:高性能:Rust具有驚人的速度和高內存利用率??煽啃裕涸诰幾g過程中可以消除內存錯誤。生產效率:優秀
    發表于 12-24 08:34

    如何利用C語言去調用rust靜態庫呢

    新語言的感覺,要做不少的對接工作。也用過Lua,感覺也差不多。評估學習評估Rust語言時,感覺性能和體積應該都不會有太大的問題。加上語言本身主打的安全性,再結合一些庫,用來做一些C語言不擅長的動態操作
    發表于 06-21 10:27

    如何在STM32 (Cortex M3)和GD32(RISC-V)上用Rust開發

    (ISA) 特別多,如果一門語言想要應用到嵌入式,首先自然是得能編譯出兼容不同指令集的程序。Rust 早期編譯器是 rustc 提供代理 (proxy),將編譯任務傳遞到后端實際的編譯器進行編譯,這樣
    發表于 06-21 10:38

    Rust代碼中加載靜態庫時,出現錯誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    “ [i]malloc ”、“ [i]exit ”。我驗證了使用 ` [i]nm ` 命令。 問題是我打算使用 ffi 在 rust 中使用這個靜態庫。當我嘗試在我的 Rust 代碼中加載靜態庫
    發表于 06-09 08:44

    Rust 1.68.1發布修復了回歸問題

    Rust 1.68.1發布,修復了回歸問題 Rust 1.68.1發布,修復了一些回歸問題。主要修復了以下問題: Rust CI對于Windows MSVC編譯器的構建方式,不再對
    的頭像 發表于 03-27 14:43 ?324次閱讀

    rust語言基礎學習: 智能指針之Cow

    Rust中與借用數據相關的三個trait: Borrow, BorrowMut和ToOwned。理解了這三個trait之后,再學習Rust中能夠實現寫時克隆的智能指針Cow。
    的頭像 發表于 05-22 16:13 ?2291次閱讀

    rust語言基礎學習: rust中的錯誤處理

    錯誤是軟件中不可避免的,所以 Rust 有一些處理出錯情況的特性。在許多情況下,Rust 要求你承認錯誤的可能性,并在你的代碼編譯前采取一些行動。
    的頭像 發表于 05-22 16:28 ?1522次閱讀

    Rust的內部工作原理

    或智能指針傳遞self時生成的匯編方式 Rust遞歸樹生成的匯編代碼 更多見原文鏈接 原文鏈接:?https://www.eventhelix.com/rust/ libtracecmd-rs
    的頭像 發表于 06-14 10:34 ?526次閱讀
    <b class='flag-5'>Rust</b>的內部工作原理

    谷歌程序員認為學習Rust很easy

    谷歌內部調查顯示,超過 2/3 的受訪者有信心在學習 Rust 時,用兩個月或更短時間內就能為 Rust 代碼庫做出貢獻。此外, 1/3 的受訪者在兩個月或更短的時間內使用 Rust
    的頭像 發表于 07-03 14:56 ?339次閱讀
    谷歌程序員認為<b class='flag-5'>學習</b><b class='flag-5'>Rust</b>很easy

    從Rustup出發看Rust編譯生態

    從Rustup出發看Rust編譯生態 1. Rust和LLVM的關系是怎樣的? 2. Rustup中targets是什么,為什么可以安裝多個? 3. Rust在windows上為什么需要安裝Visual studio?
    的頭像 發表于 01-02 11:00 ?275次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>