Skip to content

Rust 简介

rust编程语言 Rust 是Mozilla 主导、现在由 Rust 基金会维护的系统级编程语言,2010年开始开发,1.0正式版2015年发布。核心口号:内存安全、零成本抽象、无GC垃圾回收、并发安全

定位:C/C++的替代方案,既能写底层内核、驱动、嵌入式,也能写后端服务、WebAssembly、CLI工具。

Rust 核心设计目标

  1. 内存安全,不使用GC 没有垃圾回收器,不靠运行时扫描内存;在编译期就把内存错误拦截掉。杜绝:空指针、野指针、内存泄漏、缓冲区溢出、重复释放、悬垂引用。
  2. 零成本抽象 高级语法不会带来运行时开销,抽象最终编译成和C一样高效机器码。
  3. 无畏并发 编译时检查多线程数据竞争,很多并发错误直接编译不通过。
  4. 高性能 性能对标C/C++,适合操作系统、数据库、网络代理、高性能后端。

Rust 最核心概念:所有权(Ownership)

这是Rust区别其他语言的灵魂,三条基础规则:

  1. 每个值有且仅有一个所有者变量
  2. 所有者离开作用域,值自动被释放,不需要手动free。
  3. 值同一时间只能有一个可变引用,或者多个不可变引用,不能同时混用

借用 & 引用

  • &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 serde

crates.io 是全球Rust开源库仓库。

Rust 优缺点

✅ 优点

  1. 编译期内存安全:绝大多数内存bug编译阶段就报错,运行时崩溃少。
  2. 高性能,无GC,适合底层开发。
  3. 并发安全:数据竞争编译拦截,写多线程更安心。
  4. 强大类型系统+模式匹配,代码健壮。
  5. Cargo生态完善,依赖管理、测试、文档一体化。
  6. 可以编译Wasm,前端也能用;可以调用C库,也可以被C调用。

❌ 缺点

  1. 学习曲线陡峭:所有权、借用、生命周期是最大门槛,新手大量编译报错。
  2. 编译速度偏慢,大型项目编译耗时明显高于Go。
  3. 生命周期语法复杂,复杂场景代码会变啰嗦。
  4. 生态规模不如Python/Go,部分领域库较少。

Rust 主流应用场景

  1. 系统底层:操作系统内核、驱动、嵌入式开发;Redox OS纯Rust操作系统。Linux内核也开始接纳Rust代码。
  2. 高性能后端服务:Tokio异步运行时,用于网络服务、网关、代理。
  3. CLI工具:ripgrep、exa、bat等知名工具。
  4. WebAssembly:浏览器高性能Web模块。
  5. 区块链:大量公链、智能合约使用Rust。
  6. 数据库、存储引擎、云原生组件。

Rust 知名项目

  • Tokio:最主流异步运行时
  • Serde:序列化反序列化库
  • Rustfmt/clippy:代码格式化、静态检查
  • Deno:JS运行时(Rust开发)
  • ripgrep:极速文本搜索工具

Rust vs Go vs C++简单对比

语言内存管理GC并发模型学习难度性能
Rust所有权+借用编译期安全并发接近C++
GoGCGoroutine中等
C++手动/智能指针无编译检查很高极高

Go追求开发效率;Rust追求安全+极致性能;C++自由度高但容易内存出错。

Rust 新手学习建议

  1. 官方书《The Rust Programming Language》(俗称红宝书)是最好入门资料。
  2. 不要跳过所有权、借用、生命周期,这是核心难点。
  3. 多写小例子,不要一上来写大项目。
  4. 善用cargo clippy做静态检查,编译器提示非常友好。