章节目录

序章:如何学习 Rust 与使用本书

本章目标

读完这一章,你要先建立三个判断:

  • Rust 不是“更难的 C++”,它是一门把内存、并发、错误处理显式摆到你面前的系统语言。
  • 本书不是语法速查表,而是一条从零基础到能拆工程、写基础轮子的路线。
  • 学 Rust 时最重要的不是背规则,而是理解每条规则在保护什么资源、避免什么错误。

它是什么

Rust 是一门系统编程语言。系统编程的意思不是只能写操作系统,而是你可以控制程序如何使用内存、文件、网络、线程和 CPU 时间。你既能写命令行工具,也能写 Web 服务、数据库组件、游戏服务器、嵌入式程序和高性能后端。

Rust 的核心承诺是:在没有垃圾回收器的情况下,让大量内存错误在编译期暴露出来。它通过所有权、借用、生命周期、类型系统和模式匹配,把很多“运行时才炸”的问题提前成“编译器不让过”。

为什么需要

如果你只写脚本语言,很多资源管理细节会被运行时隐藏。隐藏不是坏事,但它会让你在工程变大时看不见成本:内存复制、对象共享、锁竞争、错误丢失、文件句柄泄漏、网络请求阻塞。

Rust 迫使你回答这些问题:

问题Rust 让你怎么面对
这个值归谁管所有权
谁可以临时看它不可变借用
谁可以修改它可变借用
错误能不能被忽略Result
空值能不能突然出现Option
多线程共享会不会数据竞争类型系统与锁

这些问题听起来啰嗦,但它们正是工程质量的骨架。

怎么使用

本书推荐你按下面节奏学习:

  1. 先读一章,不急着写完整项目。
  2. 把章内代码复制到小文件里运行。
  3. 故意改坏代码,看编译器如何报错。
  4. 写完练习,再回到当前 RinBlog 项目观察真实函数。
  5. 每完成一个部分,做一次“造轮子任务”。

学习时不要把编译错误当失败。Rust 的编译错误通常是教程的一部分:它在告诉你程序哪里没有被清楚地建模。

逐行解释

先看一个最小 Rust 程序:

fn main() {
    let message = "Hello, Rust";
    println!("{message}");
}
  • fn 表示定义函数。函数是一段可以被调用的代码。
  • main 是程序入口。可执行程序启动时会先运行它。
  • () 表示参数列表为空。这里的 main 不接收参数。
  • { ... } 是函数体。Rust 用花括号表示一段作用域。
  • let message = "Hello, Rust"; 创建一个变量绑定。message 绑定到一个字符串字面量。
  • println!("{message}"); 调用标准库宏,把内容输出到终端。
  • 每条普通语句用分号结束。分号表示“执行这个动作,不把它当作表达式结果返回”。

这段代码虽然短,但已经有 Rust 的基本味道:入口函数、变量绑定、宏调用、作用域、语句结束。

常见坑

  • 一开始不要追求“写得像高手”。能清楚表达意图比炫技重要。
  • 不要看到生命周期就慌。生命周期主要是在说明引用必须活得足够久。
  • 不要把 unwrap 当成习惯。学习时可以用,工程代码里要知道失败时该怎么办。
  • 不要跳过编译器提示。Rust 报错通常会给出可操作的建议。

练习

  1. 新建一个临时目录,运行 cargo new hello-rust
  2. 修改 src/main.rs,输出你的名字和今天学 Rust 的目标。
  3. 删除一处分号,观察编译器提示。
  4. message 改成数字,再观察 println! 是否仍然工作。

造轮子任务

写一个“学习日志”小程序:程序启动后创建一个字符串变量,里面写今天学到的三个关键词,然后打印出来。暂时不需要读取用户输入,重点是熟悉 Rust 文件、函数和变量。

小结

Rust 的学习曲线来自它不愿意替你隐藏资源管理。你要学会和编译器合作:让类型说明数据长什么样,让所有权说明数据归谁,让错误类型说明失败怎么处理。从下一章开始,我们先把工具链装好,让代码真正跑起来。