首页
/ Rustlings 快速上手指南:从 cargo install rustlings 到 watch 模式的完整初始化实战

Rustlings 快速上手指南:从 cargo install rustlings 到 watch 模式的完整初始化实战

2026-09-04 22:28:51作者:董灵辛Dennis

本文以 Rustlings 官网首页文档(website/content/_index.md)为核心,完整讲解 Rustlings 的标准启动流程:安装、rustlings init 初始化、进入练习目录并启动 watch 模式。结合仓库源码(src/init.rssrc/main.rssrc/cli.rs),本文进一步揭示了每条命令背后的真实校验逻辑、生成的工程文件与可用子命令,帮助你不仅"会跑起来",还能在出错时快速定位原因。

一、文档定位:官网首页承载的核心信息

website/content/_index.md 是 Rustlings 官方文档站的落地页,其核心内容可以概括为三点:

  1. 项目定位:Rustlings 是一组"小而精"的练习,帮你习惯阅读和编写 Rust 代码,官方建议在阅读《The Rust Programming Language》(官方 Rust 书)的同时配合练习使用;
  2. Quick start 四步流程:安装 → 初始化 → 进入目录 → 启动;
  3. 延伸阅读指引:更详细的安装与使用说明分别位于 Setup 页面Usage 页面

从站点配置 website/config.toml 可以看到,官网菜单共四项:Rustlings(即本文首页)、Setup、Usage、Community Exercises,首页是整条学习路径的起点。首页还内嵌了一段 asciinema 终端演示录像,展示完整的实操过程。

# Installation
cargo install rustlings
# Initialization
rustlings init
# Moving into new directory
cd rustlings
# Starting Rustlings
rustlings

下面逐步拆解这四条命令,并说明每一步在源码中到底做了什么。

二、第 1 步:cargo install rustlings

该命令会从 crates.io 下载并编译 Rustlings 二进制。结合根 Cargo.toml 可以确认当前仓库版本的适用前提:

  • 当前版本为 6.5.0Cargo.toml),采用 Rust edition 2024、要求 rust-version = 1.88Cargo.toml)。也就是说,安装前你需要用 rustup 等官方方式装好较新的 Rust 工具链(含 Cargo);
  • Linux 用户需要系统已安装 gcc 作为链接器,macOS 用户需要 Xcode 命令行工具(xcode-select --install),这两点是 Setup 页面 明确列出的前置条件。

安装失败时的官方对策(同样来自 Setup 页面):

  1. rustup update 确认 Rust 是最新版本;
  2. 尝试 cargo install rustlings --locked 使用锁定版本依赖;
  3. 仍失败则向官方仓库提交 issue。

三、第 2 步:rustlings init 到底生成了什么

init 是 Rustlings 的子命令(定义见 src/cli.rs),入口处理在 src/main.rs 中作为"优先命令"直接分发到 src/init.rsinit() 函数。从源码看,初始化过程远比"复制几个文件"严格,依次做了以下事情:

1. 拒绝重复初始化。 若当前目录已存在名为 rustlings 的目录,直接报错并提示 cd rustlings 后再运行 rustlingssrc/init.rs、错误常量 RUSTLINGS_DIR_ALREADY_EXISTS_ERR)。

2. 校验工具链。 init() 会先执行 cargo locate-project -q --workspace,失败时提示"是否已安装 Rust"(src/init.rs);随后执行 cargo clippy --version 检查 Clippy(官方 Rust linter)是否可用,缺失则中止并提示先安装(src/init.rs)。这是很多"init 失败"案例的直接原因:缺 Clippy 而非缺 Rust。 通过 rustup 安装的完整工具链默认自带 clippy 组件。

3. 识别所在环境。 如果当前目录是某个 Cargo workspace 的成员,init 会把 rustlings/ 作为 workspace 成员创建(先 cargo new 再清理临时目录),并跳过 git 初始化;否则会提示 rustlings/ 将作为独立目录创建。若目录本身已是非 workspace 的 Cargo 项目,则直接报错要求换目录(src/init.rs)。

4. 从内嵌资源写出练习工程。 这是新版本的关键设计:练习文件不再依赖克隆仓库,而是通过 EMBEDDED_FILES 从二进制内嵌资源展开——

  • info.toml 描述的 exercises/ 目录结构写出全部练习文件(src/init.rs);
  • 创建 solutions/ 目录,其中每个解法文件先写入占位内容 fn main() { /* DON'T EDIT THIS SOLUTION FILE! */ },完成练习后会被自动回填(src/init.rsINIT_SOLUTION_FILE 常量);
  • 基于内嵌模板生成练习工程的 Cargo.toml(模板来自 dev-Cargo.toml,经 updated_cargo_toml 注入各练习文件路径,见 src/init.rs);
  • 写出 rust-analyzer.toml,内容是把 rust-analyzer 的 check 命令指向 clippy 并附带 --profile testsrc/init.rssrc/init.rs),保证编辑器诊断与运行时检查一致;
  • 写出 .gitignore(忽略 Cargo.locktarget/.vscode/)和一份指向 usage 文档的 README.mdsrc/init.rs);
  • 写出 .vscode/extensions.json,推荐安装 rust-analyzer 扩展(src/init.rssrc/init.rs);
  • 最后尝试 git init(向上查找已有仓库,失败也静默忽略,因为 git 并非必需,见 src/init.rs)。

完成后,终端会打印绿色 Initialization done ✓,并给出与首页 Quick start 完全一致的后续指引:cd rustlings 然后运行 rustlingsPOST_INIT_MSGsrc/init.rs)。

四、初始化后的工程结构

进入 rustlings/ 目录后,你会得到与仓库根目录同构的练习工程。练习按主题分目录组织,每个主题目录附带一份 README.md 讲解该主题的背景资料,Usage 页面强烈建议先读再练(Usage 页面)。当前仓库的主题覆盖(见 exercises/ 与各子目录):

目录 主题 目录 主题
00_intro/ 入门 12_options/ Option 类型
01_variables/ 变量 13_error_handling/ 错误处理
02_functions/ 函数 14_generics/ 泛型
03_if/ 条件分支 15_traits/ trait
04_primitive_types/ 基础类型 16_lifetimes/ 生命周期
05_vecs/ 向量 17_tests/ 测试
06_move_semantics/ 移动语义 18_iterators/ 迭代器
07_structs/ 结构体 19_smart_pointers/ 智能指针
08_enums/ 枚举 20_threads/ 线程
09_strings/ 字符串 21_macros/
10_modules/ 模块 22_clippy/ Clippy
11_hashmaps/ 哈希表 23_conversions/ 类型转换

此外还有 quizzes/ 综合测验,以及供对照的 solutions/ 答案目录。

五、第 3、4 步:cd rustlings 后运行 rustlings

不带子命令直接运行 rustlings 会进入 watch 模式。入口逻辑在 src/main.rs,其中有几处值得注意的防御性检查:

  • 必须在初始化后的目录内运行:若当前目录找不到 exercises/,程序打印 ASCII 欢迎图并提示"请先运行 rustlings init",然后以失败码退出(PRE_INIT_MSGsrc/main.rssrc/main.rs)。这就是为什么 Quick start 强调先 cd rustlings
  • 需要真实终端:watch 模式要求 stdout 是 TTY,重定向输出会直接报 Unsupported or missing terminal/TTYsrc/main.rs);
  • 文件格式版本兼容:程序会读取 info.toml,若其中声明的 format version 高于当前二进制支持的 CURRENT_FORMAT_VERSION(目前为 1,见 src/main.rssrc/main.rs),会提示升级 Rustlings 而不是尝试继续。

watch 模式按预设顺序(对初学者最友好的顺序)逐个带你做练习:每次你在编辑器中保存 exercises/ 下的当前练习文件,它会自动重新编译并运行该练习;在练习输入 h 可获得提示(Usage 页面)。若文件变更监听在你的环境(容器、WSL 等)中失效,可使用 --manual-run 全局参数(src/cli.rs),在 watch 模式中按 r 手动重跑。

在 watch 模式中按 l 可打开交互式练习列表:查看所有练习状态、c 切换到任意练习、r 重置所选练习(重置后需在编辑器中重新打开该文件)。练习文件的修改状态与练习顺序记录在应用状态文件中,欢迎语只在首次运行时显示(StateFileStatus 逻辑,src/main.rs)。

六、全局参数与子命令速查

除了 watch 模式,src/cli.rs 还定义了以下子命令,均可脱离 watch 模式单独使用(在 rustlings/ 目录下执行):

命令 作用
rustlings 进入 watch 模式(无子命令的默认行为)
rustlings init 初始化官方练习(只能在 rustlings/ 目录不存在时执行)
rustlings run [name] 运行单个练习;不带 name 时运行下一个未完成练习
rustlings check-all 批量检查所有练习并标记完成/未完成状态,有未通过练习时返回失败退出码
rustlings reset <name> 重置指定练习文件与状态
rustlings hint [name] 打印练习提示;不带 name 时针对下一个未完成练习
rustlings dev <...> 面向练习开发者的命令(新增/更新练习,见 src/dev.rs

全局参数(src/cli.rs):

  • --no-editor:禁止 watch 模式自动在当前编辑器(VS Code / Zellij)中打开练习文件;
  • --edit-cmd "CMD":自定义打开练习的命令,练习路径会自动追加为最后一个参数;该命令不能阻塞,且在 VS Code 终端内会被忽略;
  • --manual-run:关闭文件变更监听,改用按键手动重跑(见第五节)。

七、推荐工作环境与常见问题

编辑器:官方推荐 VS Code 加 rust-analyzer 插件;初始化生成的 .vscode/extensions.json 已自动推荐该扩展。任何支持 rust-analyzer 的编辑器均可;rust-analyzer.toml 已将 check 指向 clippy,编辑器诊断与 rustlings 的检查保持一致。

终端:Linux/macOS 默认终端即可;Windows 推荐使用 Windows Terminal。

离线文档:断网练习时可用 rustup doc --bookrustup doc --std 打开本地《Rust 书》与标准库文档。

常见问题

  • rustlings: command not found——大概率是包管理器安装的 Rust,~/.cargo/bin 不在 PATH 中。手动加入 PATH,或改用 rustup 官方方式安装(Setup 页面);
  • init 报 Clippy missing——先安装 clippy 组件再重试;
  • 提示 "The exercises/ directory couldn't be found"——你不在初始化生成的 rustlings/ 目录内,先 cd rustlings
  • 提示 "A directory with the name rustlings already exists"——该目录已初始化过,直接 cd rustlings && rustlings

八、小结

Rustlings 首页 Quick start 的四条命令背后,是一套相当完整的工程化流程:cargo install 拉取 6.5.0 工具链二进制,rustlings init 完成工具链校验并从内嵌资源生成含 exercises/solutions/Cargo.tomlrust-analyzer.toml 在内的完整练习工程,rustlings 则以 watch 模式按学习顺序驱动"编辑—自动重编译—通过即推进"的闭环。配合各主题目录的 README.mdh 提示键与 l 练习列表,这套流程构成了从安装到通关练习的全部操作面。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
987
504
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384