先跑起来,再讲道理
学一门新语言最快的方式不是读语法书,而是让第一个程序在屏幕上打出字来。这一章我们只干一件事:装好工具、建个项目、跑起来。中间遇到的每个名词都当场讲清楚,道理留到后面慢慢讲。
装 Rust:一条命令的事
Rust 官方的安装工具叫 rustup——大白话就是「Rust 的版本管家」,负责帮你装编译器、以后升级、切换版本。在 macOS 或 Linux 上,打开终端,一行:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Windows 用户去 rustup.rs 下载 rustup-init.exe 双击运行即可。装完后终端里多出三个命令,记住它们的分工:
rustc:编译器本尊,把 Rust 源代码翻译成机器能跑的程序;cargo:构建工具兼包管理器——大白话是「项目大管家」:编译、跑测试、下载别人写好的库,全归它管;rustup:管前面这两位的版本。
验证装好了:
rustc --version
# rustc 1.8x.0 (xxxx 2025-xx-xx)
建项目:让 cargo 干体力活
在别的语言里你可能手动建文件夹、写构建脚本。Rust 里这一切交给 cargo:
cargo new hello
cd hello
它生成了两样东西,看一眼:
hello/
├── Cargo.toml # 项目的「档案卡」:名字、版本、依赖了哪些库
└── src/
└── main.rs # 源代码,入口在这
打开 src/main.rs,你会发现 cargo 连第一个程序都替你写好了:
fn main() {
println!("Hello, world!");
}
逐字读一遍:fn 是 function 的缩写,声明一个函数;main 是程序的入口,程序从这里开始执行;println! 往屏幕打印一行。注意那个感叹号——它说明 println! 不是一个普通函数,而是一个宏(macro),大白话是「编译期帮你生成代码的模板」。现在不用深究,只要记住:看到名字后面带 ! 的,就是宏。
编译和运行:一条命令还是两条?
Rust 是编译型语言:代码必须先整体翻译成机器码,产出一个可执行文件,然后才能运行——不像 Python 那样边解释边跑。这就是为什么第一章说的那些检查能在「程序跑起来之前」做掉:编译这一步,就是编译器审账的时刻。
日常开发你只需要一条:
cargo run
# Compiling hello v0.1.0
# Finished `dev` profile ...
# Running `target/debug/hello`
# Hello, world!
它默默做了三件事:调用 rustc 编译、把可执行文件放到 target/debug/、运行它。想分开做也行:cargo build 只编译不运行,cargo check 更进一步——只做检查、连可执行文件都不产出。写代码改错时多敲 cargo check,它最快,是家常便饭。
还有一个值得早知道的区别:cargo build 默认产出的是调试版,带调试信息、没开优化,编译快但跑得慢。真正要发布时用 cargo build --release,编译器会花更多时间做优化,产出的程序性能完全不是一个量级。测性能时拿调试版的数据会闹笑话。
第一次体会那个「严格的朋友」
做个小实验。把 println! 故意拼错成 printl!,再 cargo run。编译器会立刻报错,而且报得很具体:哪个文件、哪一行、问题是什么。更妙的是,它会直接补一句「你是不是想写 println!?」——它经常把改法直接写出来,就差替你敲键盘了。
现在就建立这个习惯:Rust 的报错信息是要逐字读的,它不是吓唬你,是在辅导你。很多情况下照着报错改,代码就过了。这也是这门语言「入门曲线陡但有人扶」的原因——陡坡是所有权规则,扶手是报错信息。
装个顺手的搭档
最后一步,给编辑器装上 rust-analyzer——一个实时分析 Rust 代码的插件(VS Code 里搜这个名字即可)。它会在你敲代码的同时标出错误、补全方法名、显示变量类型。有了它,编译器那个严格的朋友就搬进了你的编辑器,你打错字的下一秒它就咳嗽一声。
至此,环境齐了:rustup 管版本,cargo 管项目,rustc 管翻译,rust-analyzer 管实时提醒。下一章开始,我们正式进入语言本身,从一条最小、却最能体现 Rust 气质的规则开始:变量,默认是不许变的。