Rust 编程教程
欢迎学习 Rust 编程语言!本教程将带你从零基础开始,逐步掌握 Rust 的核心知识和技能。
什么是 Rust?
Rust 是一门系统编程语言,由 Mozilla 研发,专注于安全性、并发性和性能。它具有以下特点:
- 内存安全:通过所有权系统在编译时保证内存安全,无需垃圾回收
- 零成本抽象:高级抽象不会带来运行时开销
- 并发安全:编译器在编译时检测数据竞争
- 高性能:性能媲美 C/C++
- 实用性强:丰富的标准库和活跃的社区
为什么学习 Rust?
- 内存安全无需 GC:Rust 独特的所有权系统让它在保证内存安全的同时不牺牲性能
- 并发编程友好:编译器帮助你避免并发错误
- 行业需求增长:系统编程、WebAssembly、嵌入式开发等领域需求旺盛
- 优秀的开发体验:友好的编译器错误提示、强大的包管理器 Cargo
- 活跃的社区:丰富的第三方库(crates)和完善的学习资源
Rust 的应用场景
系统编程
- 操作系统内核
- 设备驱动
- 嵌入式系统
Web 开发
- WebAssembly 应用
- 后端服务(使用 Actix、Rocket 等框架)
- Web 服务器
命令行工具
- 现代化的 CLI 工具(如 ripgrep、bat、exa)
- 构建工具
网络服务
- 高性能代理服务器
- 分布式系统
- 微服务
游戏开发
- 游戏引擎
- 游戏逻辑
区块链
- 智能合约
- 区块链客户端
Rust 核心概念
所有权(Ownership)
所有权是 Rust 最独特的特性,它让 Rust 在没有垃圾回收器的情况下保证内存安全。
fn main() {
let s1 = String::from("hello"); // s1 拥有字符串的所有权
let s2 = s1; // 所有权从 s1 转移到 s2
// println!("{}", s1); // 错误!s1 不再有效
println!("{}", s2); // 正确
}
解释:
- Rust 中每个值都有一个所有者(owner)
- 同一时间只能有一个所有者
- 所有者离开作用域时,值会被自动释放
借用和引用
使用引用可以访问数据而不获取所有权:
fn main() {
let s = String::from("hello");
let len = calculate_length(&s); // 借用 s
println!("字符串 '{}' 的长度是 {}", s, len);
}
fn calculate_length(s: &String) -> usize {
s.len()
} // s 是引用,离开作用域时不会释放数据
借用规则
fn main() {
let mut s = String::from("hello");
// 规则:要么有一个可变引用,要么有多个不可变引用
let r1 = &s; // 不可变引用
let r2 = &s; // 不可变引用
println!("{} {}", r1, r2);
// r1 和 r2 不再使用
let r3 = &mut s; // 可变引用(正确,因为 r1、r2 已不再使用)
r3.push_str(" world");
println!("{}", r3);
}
教程目录
基础阶段
进阶阶段
- 结构体和枚举 - 自定义数据类型
- 错误处理 - panic! 和 Result
- 泛型和 Trait - 泛型编程和共享行为
- 生命周期 - 引用的有效性验证
- 模块系统 - 代码组织和模块管理
- 测试 - 单元测试和集成测试
高级阶段
知识速查
- 速查表 - Rust 常用语法和概念速查
学习建议
- 理解所有权:这是 Rust 最核心的概念,花时间彻底理解它
- 阅读编译器提示:Rust 编译器提供非常友好的错误信息
- 多写代码:Rust 的学习曲线较陡,实践是最好的老师
- 善用文档:使用
cargo doc和官方文档 - 参与社区:Rust 社区非常友好,有问题可以积极提问
版本说明
本教程基于 Rust 1.75+ 编写,涵盖以下内容:
- Rust 2021 Edition
- 异步编程(async/await)
- 模式匹配增强
- const 泛型
参考资源
准备好开始学习了吗?点击下一章开始你的 Rust 编程之旅!