Rust 简介
Rust 是Mozilla 主导、现在由 Rust 基金会维护的系统级编程语言,2010年开始开发,1.0正式版2015年发布。核心口号:内存安全、零成本抽象、无GC垃圾回收、并发安全。
定位:C/C++的替代方案,既能写底层内核、驱动、嵌入式,也能写后端服务、WebAssembly、CLI工具。
Rust 核心设计目标
- 内存安全,不使用GC 没有垃圾回收器,不靠运行时扫描内存;在编译期就把内存错误拦截掉。杜绝:空指针、野指针、内存泄漏、缓冲区溢出、重复释放、悬垂引用。
- 零成本抽象 高级语法不会带来运行时开销,抽象最终编译成和C一样高效机器码。
- 无畏并发 编译时检查多线程数据竞争,很多并发错误直接编译不通过。
- 高性能 性能对标C/C++,适合操作系统、数据库、网络代理、高性能后端。
Rust 最核心概念:所有权(Ownership)
这是Rust区别其他语言的灵魂,三条基础规则:
- 每个值有且仅有一个所有者变量。
- 所有者离开作用域,值自动被释放,不需要手动free。
- 值同一时间只能有一个可变引用,或者多个不可变引用,不能同时混用。
借用 & 引用
&T:不可变借用,只读,可以多个同时存在&mut T:可变借用,同一时刻只能有一个
编译器会检查生命周期,保证引用永远不会指向已经销毁的数据,杜绝悬垂指针。
简单示例:
rust
fn main() {
let s1 = String::from("hello");
// 借用,不转移所有权
let s2 = &s1;
println!("{} {}", s1, s2);
let mut s3 = String::from("hi");
let s4 = &mut s3;
s4.push_str(" world");
println!("{}", s4);
}所有权转移(Move)
Rust默认移动语义,不是浅拷贝。
rust
let a = String::from("test");
let b = a; // a的所有权移动给b,a失效,不能再使用a
// println!("{}", a); // 编译报错!如果需要复制,显式调用.clone()。
Rust 基础语法特点
1. 变量与可变性
默认不可变,想要修改必须加mut
rust
let x = 10;
// x = 20; //报错
let mut y = 20;
y = 30;2. 模式匹配 match
强大的模式匹配,类似switch,但能力强很多:
rust
let num = 3;
match num {
1 => println!("一"),
2..=5 => println!("2到5之间"),
_ => println!("其他"),
}3. Option / Result 代替空指针、异常
Rust没有null。
Option<T>:有值Some(T),无值None,处理空场景Result<T,E>:返回结果Ok(T)或者错误Err(E),不用异常panic
rust
fn divide(a:i32,b:i32) -> Result<i32,&'static str> {
if b == 0 {
return Err("除数不能为0");
}
Ok(a/b)
}4. 结构体、枚举、Trait(特征)
- struct结构体:定义数据结构
- enum枚举:远强于C枚举,可以携带数据,Rust最常用
- Trait(特征)≈接口:给类型定义行为,支持泛型约束
rust
trait Speak {
fn say(&self);
}
struct Dog;
impl Speak for Dog {
fn say(&self) {
println!("汪汪");
}
}Rust 工具链:Cargo
Rust官方包管理器+构建工具,开箱即用。
bash
# 创建项目
cargo new my_project
# 编译运行
cargo run
# 构建release发布版本
cargo build --release
# 单元测试
cargo test
# 添加第三方库,crates.io是Rust包仓库
cargo add serdecrates.io 是全球Rust开源库仓库。
Rust 优缺点
✅ 优点
- 编译期内存安全:绝大多数内存bug编译阶段就报错,运行时崩溃少。
- 高性能,无GC,适合底层开发。
- 并发安全:数据竞争编译拦截,写多线程更安心。
- 强大类型系统+模式匹配,代码健壮。
- Cargo生态完善,依赖管理、测试、文档一体化。
- 可以编译Wasm,前端也能用;可以调用C库,也可以被C调用。
❌ 缺点
- 学习曲线陡峭:所有权、借用、生命周期是最大门槛,新手大量编译报错。
- 编译速度偏慢,大型项目编译耗时明显高于Go。
- 生命周期语法复杂,复杂场景代码会变啰嗦。
- 生态规模不如Python/Go,部分领域库较少。
Rust 主流应用场景
- 系统底层:操作系统内核、驱动、嵌入式开发;Redox OS纯Rust操作系统。Linux内核也开始接纳Rust代码。
- 高性能后端服务:Tokio异步运行时,用于网络服务、网关、代理。
- CLI工具:ripgrep、exa、bat等知名工具。
- WebAssembly:浏览器高性能Web模块。
- 区块链:大量公链、智能合约使用Rust。
- 数据库、存储引擎、云原生组件。
Rust 知名项目
- Tokio:最主流异步运行时
- Serde:序列化反序列化库
- Rustfmt/clippy:代码格式化、静态检查
- Deno:JS运行时(Rust开发)
- ripgrep:极速文本搜索工具
Rust vs Go vs C++简单对比
| 语言 | 内存管理 | GC | 并发模型 | 学习难度 | 性能 |
|---|---|---|---|---|---|
| Rust | 所有权+借用 | 无 | 编译期安全并发 | 高 | 接近C++ |
| Go | GC | 有 | Goroutine | 低 | 中等 |
| C++ | 手动/智能指针 | 无 | 无编译检查 | 很高 | 极高 |
Go追求开发效率;Rust追求安全+极致性能;C++自由度高但容易内存出错。
Rust 新手学习建议
- 官方书《The Rust Programming Language》(俗称红宝书)是最好入门资料。
- 不要跳过所有权、借用、生命周期,这是核心难点。
- 多写小例子,不要一上来写大项目。
- 善用
cargo clippy做静态检查,编译器提示非常友好。