Course Builder个人学习工作台 · 本地模式
Rust:从所有权到可测试的命令行工具

01|Cargo:建立 TextLab 实验项目

目标:创建、检查并运行一个 Rust 项目,区分源文件、项目配置和构建产物。

TextLab 最终接受一个文件路径,输出行数、词数、字节数和字符数。今天先建立可以反复运行的最小项目。一个稳定的反馈环比一次写出所有功能更有用:写一小段代码,检查,运行,再解释输出。

Rust 源代码需要编译为目标平台的程序。rustc 是编译器;Cargo 管理项目、调用编译器并运行测试。cargo check 主要检查代码能否通过编译检查,通常不生成最终可执行文件;cargo run 会构建并运行程序。Cargo.toml 描述包名与 edition;src/main.rs 是这个二进制程序的入口。target/ 是可重新生成的构建产物,不需要手工编辑。

建立第一个检查点

先按课程首页准备工具。在一个你自己选择、尚未包含 textlab 子目录的位置运行:

rustc --version
cargo --version
cargo new textlab --bin --edition 2024 --vcs none
cd textlab
mkdir examples

版本命令输出因安装而异;课程使用 Rust 1.94.0。--bin 创建二进制项目,--vcs none 不额外初始化 Git 仓库。进入项目后,所有后续命令默认从这里运行。

把 Cargo.toml 完整替换为:

[package]
name = "textlab"
version = "0.1.0"
edition = "2024"

[dependencies]

目前没有第三方依赖,[dependencies] 留空。把 src/main.rs 完整替换为:

fn main() {
    println!("TextLab ready");
}

fn 声明函数,main 是程序入口,大括号包住函数体。println! 是格式化输出宏,结尾的 ! 区分它与普通函数调用;现在只需要会调用,不需要会编写宏。末尾分号结束这条语句。

运行前先预测:检查代码会打印问候语吗?

cargo check
cargo run --quiet

第一条成功结束,可能显示编译诊断信息,但不执行程序。第二条的预期输出:

TextLab ready

--quiet 隐藏 Cargo 的常规进度信息,程序自身的输出仍然保留。此时你已打通“配置 → 源文件 → 编译 → 执行”的路径。

让修改产生可见反馈

  1. 把字符串改成 TextLab reads UTF-8。
  2. 再运行 cargo run --quiet,应只输出这条新消息。
  3. 暂时删掉 println! 那一行结尾的右括号,运行 cargo check。编译器应报告分隔符不匹配;关注它标出的文件和位置。
  4. 恢复完整代码,再运行检查。刻意制造并修复一次错误,是为了确认你读的是当前文件的诊断。

独立练习:让程序输出两行,依次为 TextLab ready 和 input: UTF-8。先自己写,再展开答案。

参考实现与检查方式

完整的 src/main.rs:

fn main() {
    println!("TextLab ready");
    println!("input: UTF-8");
}

运行 cargo run --quiet,检查两行的顺序。两个宏调用按函数体中的顺序执行,不需要额外声明执行顺序。完成后恢复主示例。

如果出现 cargo: command not found,重新打开安装后的终端并检查安装说明中的 PATH 配置。如果提示找不到 Cargo.toml,先回到 textlab 目录;如果提示目录已存在,进入已有练习项目或换一个空目录,不要覆盖陌生文件。出现链接器错误时,应补齐官方安装说明要求的平台构建工具。

本课结束保留 Cargo.toml、Cargo 生成的 Cargo.lock、src/main.rs 和空的 examples/。后面每个语言实验都有独立文件,主入口在第 12 课才更换。

参考资料