FORMA

Rust 基础

Rust 是注重内存安全并发安全的系统级语言,通过所有权在编译期保证安全,无 GC。见 后端入门概览

本章介绍工具链安装与 Cargo,从认识语言到写出第一个程序。

学习路径

顺序主题文档
1安装、Cargo、第一个程序本文
2变量、标量、控制流语法与类型
3所有权、借用、生命周期核心概念
4结构体、枚举、集合复合类型
5泛型、trait泛型与 Trait
6Result / Option错误处理
7模块、crate、工作空间包管理
8线程、async异步
9测试、cargo doc测试与文档
10宏、unsafe、FFI进阶

1.1 Rust 是什么

系统编程语言:性能、安全、并发

Rust 的设计目标非常明确:像 C 和 C++ 那样对硬件有精细的控制力,同时在语言层面消除一大类常见错误。它天生适合编写操作系统、浏览器引擎、嵌入式固件、WebAssembly 模块、CLI 工具和高性能网络服务。

零成本抽象、无 GC、内存安全(通过所有权)

这三点是 Rust 最核心的承诺:

  • 零成本抽象:高阶语法不会引入额外运行时开销。你用的迭代器、闭包在编译后通常能优化得和手写循环一样快。
  • 无垃圾回收(GC):Rust 没有全局垃圾收集器,内存管理完全在编译期确定,保证了运行时的稳定低延迟。
  • 内存安全:Rust 通过一套所有权概念,让编译器在编译时就能拒绝悬垂指针、二次释放、数据竞争等问题,无需垃圾回收器也不需要手动小心翼翼。

应用领域

除了上面提到的操作系统、嵌入式、WebAssembly、CLI、网络服务,Rust 也越来越多地出现在数据分析管道、区块链、游戏引擎甚至前端工具链中。其“一旦编译通过,就能安全稳定运行”的特性,特别适合需要长期维护的基础设施项目。

1.2 安装与配置

rustup:管理工具链

rustup 是 Rust 的官方安装器和工具链管理器。一行命令就能完成安装,并随时切换 stablebetanightly 通道。

在 Linux / macOS 上打开终端执行:

bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Windows 用户可以直接下载并运行 rustup-init.exe

安装完成后,可以通过 rustup 查看、安装和切换工具链:

bash
rustup toolchain list          # 查看已安装的工具链
rustup default stable          # 将 stable 设为默认
rustup update                  # 更新工具链

rustc 与 cargo

安装 Rust 后你会获得两个核心命令:

  • rustc:Rust 编译器,可以直接把 .rs 文件编译成可执行文件或库。
  • cargo:Rust 的包管理与构建系统,负责创建项目、下载依赖、运行测试、生成文档等。

日常开发中几乎总是通过 cargo 与 Rust 交互,直接调用 rustc 的情况很少。

验证安装

bash
rustc --version
cargo --version

如果两条命令都正常输出版本号,说明环境就绪。

编辑器 / IDE 推荐

  • VS Code + rust-analyzer:安装 VS Code 后,在扩展市场搜索“rust-analyzer”并安装。它提供代码补全、实时错误提示、跳转定义、悬停类型等信息,是目前最主流的 Rust 开发环境。
  • IntelliJ Rust:如果习惯 JetBrains 生态,使用 CLion 或 IntelliJ IDEA 并安装 Rust 插件,也能获得优秀的开发体验。

1.3 第一个程序

创建项目

bash
cargo new hello_world

这条命令会生成一个名为 hello_world 的目录,包含:

text
hello_world
├── Cargo.toml      # 项目清单文件
└── src
    └── main.rs     # 程序入口
  • Cargo.toml:采用 TOML 格式,记录项目名称、版本、作者、依赖等信息。
  • src/main.rs:默认的二进制入口文件。

打开 main.rs,你会看到:

rust
fn main() {
    println!("Hello, world!");
}
  • fn main() 是 Rust 程序的入口点,每个可执行程序必须有且仅有一个 main 函数。
  • println! 是一个(以 ! 结尾),而非普通函数。宏能生成重复代码或实现变长参数,println! 是使用这类宏的最常见例子。

编译与运行

在项目目录下可以使用以下命令:

  • cargo run:编译并运行程序。如果代码未改动,下次会直接运行编译结果。
  • cargo build:仅编译(默认创建 debug 版本),生成结果位于 target/debug/
  • cargo check:快速检查代码是否可编译,但不生成最终可执行文件。适合开发过程中频繁验证语法和类型。

如果想编译为优化后的发布版本,可以加上 --release

bash
cargo build --release   # 生成到 target/release/

release 版编译时间更长,但运行效率远高于 debug 版,适合最终分发。

1.4 Cargo 进阶

日常开发不仅仅是“编译运行”,Cargo 提供了一整套从依赖管理到发布的工作流。

Cargo.toml 与 Cargo.lock

  • Cargo.toml:供开发者编辑的清单,声明了项目元数据和所需依赖的版本范围(例如 "0.8" 表示兼容 0.8.x)。
  • Cargo.lock:由 Cargo 自动生成,精确锁定了每一次构建中每个依赖的具体版本。二进制项目建议将 Cargo.lock 提交版本控制,以保证所有环境和 CI 的构建一致性;库项目则通常不提交,由使用方自行解析。

添加依赖

有两种方式为项目添加依赖:

  1. 使用 cargo add(Rust 1.62.0 起内置):
    bash
    cargo add serde           # 添加最新版 serde
    cargo add tokio --features full   # 添加时启用 features
    
  2. 手动编辑 Cargo.toml
    toml
    [dependencies]
    serde = "1.0"
    

    然后运行 cargo build,Cargo 会自动下载并编译依赖。

包都发布在社区注册中心 crates.io,Cargo 默认从这里拉取。

构建配置:profile.dev / profile.release

Cargo.toml 中可以通过 [profile] 小节覆盖默认的编译选项:

toml
[profile.dev]
opt-level = 0   # 无优化,编译快
debug = true    # 包含调试信息

[profile.release]
opt-level = 3   # 最大化优化
debug = false   # 不包含调试信息

你还可以调整 LTO、代码展开程度、溢出检查等,以满足不同场景的需求。

工作空间(workspace)

当项目逐渐庞大,可能拆分为多个相互依赖的 crate。工作空间能让它们共享同一个 Cargo.locktarget 目录,统一构建。

根目录的 Cargo.toml 声明工作空间成员:

toml
[workspace]
members = [
    "core",
    "cli",
    "web",
]

每个子目录都是独立的 crate(有自己的 Cargo.toml)。在根目录执行 cargo build 将一次性构建所有成员,并自动处理内部依赖。

常用命令速览

  • cargo test:运行项目中的单元测试、集成测试和文档测试。
  • cargo doc --open:为所有依赖和本地代码生成 HTML 文档,并自动在浏览器中打开。文档注释 /// 会被编译为漂亮文档页,这是 Rust 生态的优良传统。
  • cargo publish:将 crate 发布到 crates.io。发布前需要先登录、确保清单信息完整。发布后,社区即可通过 cargo add 使用你的代码。

继续学习:类型泛型与 Trait

参考文献

以下链接在编写时均可正常访问:

资料说明
Rust 程序设计语言官方书
rustup工具链安装
Cargo 手册包管理

相关文章