如何用 rustlings dev new 创建自己的社区练习项目并用 dev check 校验?
2026/9/9 14:03:55 网站建设 项目流程

如何用 rustlings dev new 创建自己的社区练习项目并用 dev check 校验?

【免费下载链接】rustlings:crab: Small exercises to get you used to reading and writing Rust code!项目地址: https://gitcode.com/gh_mirrors/ru/rustlings

Rustlings 内置了对社区练习(community exercises)的支持,你可以用它做两件事:围绕某个特定主题编写一套自己的练习,或者把官方练习翻译成其他语言并发布。这篇文章的任务是:从零创建一个新的社区练习项目目录,添加第一个练习,然后运行rustlings dev check完成校验,得到Everything looks fine!的通过结果。整个过程只需要你已经安装好的rustlings程序本身,社区练习和官方练习用的是同一个程序。

前置条件:安装 Rust 与 Rustlings

在开始之前,按照安装说明准备环境:

  • 安装最新版本的 Rust(会同时安装 Cargo)。Linux 用户需要gcc作为链接器(Debian:sudo apt install gcc;Fedora:sudo dnf install gcc);macOS 用户需要 Xcode 及其开发者工具:xcode-select --install
  • 安装 Rustlings:
cargo install rustlings

如果安装失败,文档给出的排查路径是:先用rustup update确认 Rust 是最新版本;再尝试带--locked标志的cargo install rustlings --locked。如果之后运行rustlings提示找不到命令,多半是~/.cargo/bin不在PATH中,把它加入PATH即可。

用 rustlings dev new 生成项目目录

在你想创建项目的位置运行:

rustlings dev new PROJECT_NAME

其中PROJECT_NAME替换为你要使用的目录名,例如你的项目名。命令行为类似于cargo new PROJECT_NAME:创建模板目录并写入开始开发所需的全部文件。注意这条命令有明确的副作用——它会在当前目录下创建新目录,并默认执行git init初始化一个 Git 仓库;如果不想初始化仓库,加--no-git参数即可(参数定义见 dev 子命令)。

执行成功后会看到Initialization done ✓的输出。生成的项目包含以下文件(见 dev new 实现):

  • info.toml:练习元数据文件,文件内带有大量注释说明格式,务必通读一遍。
  • Cargo.toml:练习项目的清单文件,bin列表初始为空。
  • exercises/:练习源码目录。
  • solutions/:可选的解答文件目录。
  • README.mdrust-analyzer.toml.vscode/extensions.json.gitignore

info.toml中可以设置:

  • format_version:社区练习的格式版本,指示与 Rustlings 程序的兼容性。它不是 Rustlings 程序的版本号,但当 Rustlings 对社区练习格式做出不可避免的破坏性变更时,你需要提高这个版本并适配新格式,否则新版 Rustlings 无法运行这些练习。
  • welcome_message/final_message:可选的多行消息,分别显示在用户开始和完成全部练习时。
  • 每个练习一段[[exercises]]元数据。

添加第一个练习

info.toml中填入一个练习的元数据。以下是社区练习文档给出的示例:

[[exercises]] name = "intro1" hint = """ To finish this exercise, you need to … These links might help you …"""

生成文件中的注释解释了各字段:

  • name:练习文件名(不含.rs扩展名)。
  • dir(可选):如果想按目录组织练习,指定目录名后练习路径为exercises/DIR/NAME.rs,否则为exercises/NAME.rs
  • test(可选):默认为true。Rustlings 期望练习包含测试并会运行它们;设为false后练习只要编译成功就算完成。
  • strict_clippy(可选):默认为false。Rustlings 总会运行 Clippy,设为true后只有没有任何警告才算完成。
  • hint:用户请求时显示的多行提示。

元数据填好后,在exercises/目录下创建intro1.rs。根据 dev check 的实现,练习文件需要满足:

  • 包含main函数(可以为空);
  • 至少有一个// TODO注释来指引用户;
  • 包含#[test]标注的测试(文档建议添加测试);如果不想写测试,把该练习的test设为false

一个满足这些要求的最小骨架(示例,注释和测试内容需你自行补全):

// TODO: 告诉用户这一步要做什么 fn main() { } #[test] fn test_exercise() { }

可选地,你可以在solutions/目录下添加同名解答文件(例如solutions/intro1.rs)。官方仓库的练习本身可以作为编写练习的参考。

用 rustlings dev update 同步 Cargo.toml

Cargo.toml中的bin列表由工具自动维护,不要手工编辑。每添加或删除练习后运行:

rustlings dev update

它会根据info.toml重写bin列表(见 dev update 实现)。bin列表之外的部分可以按需修改:在[dependencies]表里添加依赖,在[lints.rust][lints.clippy]表里为所有练习配置 lints。

用 rustlings dev check 校验项目

进入项目目录,运行:

rustlings dev check

dev check依次检查以下内容(检查逻辑见 src/dev/check.rs),任何一项不通过都会报错退出:

  1. format_version必须等于当前受支持的格式版本。过低会提示迁移到最新版本,过高则提示升级 Rustlings 程序。
  2. Cargo.tomlbin列表必须与info.toml一致。
  3. 练习元数据:名字非空、不超过 32 个字符、只允许字母数字和下划线、不能重复;hint不能为空;指定了dir时目录名同样有字符限制。
  4. 练习文件内容:必须有fn main()、至少一个// TODO注释;testtrue(默认)时文件必须包含#[test]测试,反过来设了test = false的文件里不能出现#[test]
  5. exercises/solutions/目录中只允许README.mdinfo.toml声明的练习/解答文件,且只允许一层目录嵌套。
  6. 运行所有练习,确认它们尚未被解答。
  7. 运行所有解答文件(如果存在),并检查其通过rustfmt格式化。

全部通过后输出Everything looks fine!,这就是校验成功的标志。此外,rustlings dev check还有--require-solutions选项,要求每个练习都必须有解答文件。

常见报错与对应处理

以下报错文本来自dev check的实际实现,遇到时按提示操作:

报错信息(节选)处理方式
The fileCargo.tomlis outdated. Runrustlings dev updateto update it. Then runrustlings dev checkagain运行rustlings dev update后重新执行rustlings dev check
`format_version` < ... (supported version) Please migrate to the latest format versioninfo.tomlformat_version升级到受支持版本
`format_version` > ... (supported version) Try updating the Rustlings program升级 Rustlings 程序
Themainfunction is missing in the file ...为练习文件补上至少一个空的fn main()
Didn't find any// TODOcomment in the file ...在练习文件中添加至少一个// TODO注释
The file ... doesn't contain any tests. If you don't want to add tests ... settest = false...添加#[test]测试,或在info.toml中将该练习设为test = false
The exercise ... is already solved. ... addskip_check_unsolved = true...如果这是故意预先写好的入门练习,在该练习元数据中加skip_check_unsolved = true;否则说明练习本身写成了已完成状态
Some solutions aren't formatted. Runrustfmton them对解答文件运行rustfmt
解答文件运行失败(会先打印Running all solutions...及失败输出)修复该解答文件中的编译或测试错误

发布与分享(可选)

校验通过后,可以继续添加更多练习,然后把项目发布为一个 Git 仓库。使用者只需克隆仓库并在目录内运行rustlings就能开始做你的练习。与官方练习有一个区别:解答文件不会在用户完成练习前被隐藏,需要你自己信任使用者不会过早打开解答。发布后,可以在官方 Rustlings 仓库提 issue 或 pull request,把项目加入社区练习列表。

至此,一条完整的操作路径是:rustlings dev new生成项目 → 编辑info.toml并编写练习文件 →rustlings dev update同步bin列表 →rustlings dev check校验,看到Everything looks fine!即表示项目结构和练习内容都符合要求,可以发布。

【免费下载链接】rustlings:crab: Small exercises to get you used to reading and writing Rust code!项目地址: https://gitcode.com/gh_mirrors/ru/rustlings

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询