目标装好环境、跑通第一个程序、理解 main、println!、cargo 三件套。一、环境搭建动手 5 分钟1. 安装 Rust# Linux / macOScurl--protohttps--tlsv1.2-sSfhttps://sh.rustup.rs|sh# Windows下载 rustup-init.exe 运行安装后验证rustc--version# 编译器版本cargo--version# 包管理与构建工具版本2. 两个核心工具的区别rustc 是编译器负责把单个 .rs 文件编译成可执行程序类似 gcc。cargo 是项目管理工具负责创建项目、管理依赖、构建、运行、测试类似 npm 加 make 的组合。日常开发几乎只用 cargorustc 了解即可。3. 创建第一个项目cargonew hello_rustcdhello_rustcargorun你会看到目录结构hello_rust/ ├── Cargo.toml # 项目配置依赖、元信息 └── src/ └── main.rs # 入口文件二、第一段代码解读fnmain(){println!(Hello, Rust!);}逐行拆解fn 是定义函数的关键字function。main 是程序入口每个可执行程序必须有且仅有一个。() 是参数列表这里为空。{ } 是函数体。println! 是宏注意末尾的 !不是函数它会在编译期展开。“Hello, Rust!” 是字符串字面量。; 是语句结束符Rust 中大部分语句都要分号。⚠️ 新手最易错点写成 println(…) 会报错 cannot find function println。记住 ! 是宏的标志。三、多元化练习题含答案与解读 练习 1基础打印多行要求让程序输出以下内容我叫Rust我从2015年开始稳定 我喜欢安全与速度参考答案fnmain(){println!(我叫 Rust);println!(我从 2015 年开始稳定);println!(我喜欢安全与速度);}解读每个 println! 自带换行。若想一行内输出多个内容可用多个 {} 占位符或用 print! 不换行。 练习 2理解宏占位符 {}要求用一个 println! 输出 1 1 2其中数字用变量代入。参考答案fnmain(){leta1;letb1;println!({} {} {},a,b,ab);}解读{} 是占位符按顺序被后面的参数填充。这是 Rust 格式化输出的基础。参数可以是变量也可以是表达式如 a b。 练习 3调试思维找出错误下面代码无法编译请指出几处错误fnmain(){println(Hello)}参考答案2 处错误第一处println 缺少 !应为 println!。第二处语句末尾缺少 ;。正确写法fnmain(){println!(Hello);}解读Rust 编译器报错非常友好会明确告诉你 “help: use println!” 和 “help: add ;”。学会读编译器提示是 Rust 学习的关键技能。 练习 4拓展转义与原始字符串要求输出一行 路径是: C:\Users\rust分别用转义和原始字符串两种写法。参考答案fnmain(){// 方法一转义反斜杠println!(路径是: C:\\Users\\rust);// 方法二原始字符串 r...println!(r路径是: C:\Users\rust);}解读\ 表示一个字面反斜杠。r… 是原始字符串raw string内部不处理转义适合写正则、路径。 练习 5综合自己动手建项目要求用 cargo new my_first_app 创建项目修改 main.rs 打印你的名字和今天的日期用 cargo run 运行用 cargo build --release 构建发布版观察 target/release/ 目录参考步骤cargonew my_first_appcdmy_first_app# 编辑 src/main.rscargoruncargobuild--releaselstarget/release/解读cargo run 等于编译debug加运行。cargo build 只编译不运行。–release 开启优化产物更大但更快用于正式发布。 思考题 1为什么 println! 是宏不是函数参考答案核心原因有三个第一可变参数。println! 可以接受任意数量的参数println!(“{} {}”, a, b, c)而 Rust 的普通函数不支持可变参数。第二编译期格式检查。宏在编译期展开编译器能检查占位符 {} 的数量和类型是否与参数匹配。如果写成函数检查只能推迟到运行时出错更晚、代价更高。第三零成本抽象。宏展开后直接生成拼接字符串的代码没有函数调用开销。解读Rust 用宏来实现“看起来像语法糖、实际是编译期代码生成”的功能。类似的还有 vec![]、format!、assert!。 思考题 2cargo run 和直接 rustc main.rs ./main 有什么区别参考答案主要区别有四点第一依赖管理。cargo 会自动下载、编译 Cargo.toml 里声明的依赖rustc 需要手动处理。第二目录结构。cargo 把产物放在 target/debug/源码在 src/rustc 默认把可执行文件放在当前目录。第三配置与缓存。cargo 会缓存已编译的依赖增量编译rustc 每次全量编译。第四debug 与 release。cargo 用 --release 切换优化模式rustc 需要手动加 -O 等参数。解读cargo 是工程化工具rustc 是底层编译器。cargo 内部其实也是调用 rustc。小脚本可以用 rustc实际项目一律用 cargo。 思考题 3如果 main 函数返回一个值会发生什么参考答案main 可以返回 ()默认或者实现了 Termination trait 的类型比如 Result(), E。usestd::fs::File;fnmain()-Result(),std::io::Error{let_fFile::open(不存在.txt)?;Ok(())}返回 Ok(()) 时进程退出码为 0成功返回 Err(e) 时Rust 会打印错误并以非零退出码结束。解读这是第 8 课 Result 和错误处理的伏笔。? 运算符会自动向上传播错误让 main 成为最终的错误收口处。普通的 i32 等类型不能直接作为 main 的返回类型因为没实现 Termination。四、知识点总结第1课安装rustup 管理工具链cargo 管项目。入口fn main() { } 是程序起点。宏 vs 函数println! 是宏带 !普通函数不带。宏支持可变参数、编译期检查。语句结束大多数语句以 ; 结尾。占位符{} 按顺序填充参数参数可以是变量或表达式。转义\ 转义反斜杠r… 原始字符串。Cargo 命令new / run / build / build --release。日常开发用 cargorustc 是底层。main 返回值可返回 () 或 Result(), E影响进程退出码。编译报错认真阅读 help: 提示它会教你改。五、下一课预告第2课变量、可变性与常量· let vs let mut· 常量 const 与 static· 变量遮蔽shadowing· 数据类型初探 本课心法Rust 的学习曲线陡但编译器是你的老师。每一条报错都是在教你写更安全的代码。别怕红色读懂它你就赢了。