11
0
0

01 - Rust 简介

2026-11-04
2026-11-06
01 - Rust 简介
文章摘要
|

Rust 是一门专注于安全、并发与性能的系统级编程语言。它在不引入垃圾回收(GC)的前提下,通过所有权系统与借用检查器在编译期杜绝空指针、悬垂引用、数据竞争等内存问题,性能可对标 C/C++。

文档更新时间:2026-11-02(最新稳定版为 1.99.1,2026-10-15 发布)


1. 一句话概览

维度

内容

语言定位

系统级、通用的多范式编译型语言(命令式 + 函数式 + 泛型)

设计目标

内存安全、并发安全、零成本抽象、高性能

内存管理

编译期所有权 + 借用检查,无 GC、无手动 free

创始人

Graydon Hoare(2006 年发起,2009 年起由 Mozilla 赞助)

首个稳定版

Rust 1.0,2015-05-15

当前稳定版

1.99.1(2026-10-15),每 6 周发布一次小版本

Edition

2015 / 2018 / 2021 / 2024(随 1.85.0 稳定)

开源许可

MIT + Apache-2.0 双协议

治理机构

Rust 基金会(2021 年成立,发起方含 AWS、Google、华为、微软、Mozilla)

社区口碑

自 2016 年起连续多年在 Stack Overflow 开发者调查中位居"最受推崇语言"榜首


2. 发展时间线

时间

事件

2006

Graydon Hoare 以个人项目形式启动 Rust

2009

Mozilla 开始赞助,Rust 进入官方孵化

2012-01

首个带版本号的编译器发布(0.1)

2015-05-15

Rust 1.0 稳定版发布,确立"稳定性承诺"

2016-2020

依次引入 impl Trait、异步 async/.await(1.39)、const generics(1.51)等关键能力

2018 / 2021 / 2024

分别发布 Rust 2018 / 2021 / 2024 Edition

2021-02

Rust 基金会成立,语言治理与商标脱离单一公司

2022-12

Rust 进入 Linux 内核(6.1 版本起作为第二官方语言)

2025-05

发布 1.87.0,庆祝 Rust 十周年

2025 至今

生态持续扩张:Windows 内核、Android、Chromium、Debian APT 等陆续引入 Rust 组件


3. 核心特性

特性

说明

带来的收益

所有权(Ownership)

每个值有唯一所有者,所有者离开作用域时资源自动释放

无需 GC 也不会内存泄漏

借用与生命周期(Borrow & Lifetime)

引用分为不可变 &T 与可变 &mut T,编译器校验有效期

编译期消灭悬垂引用与野指针

无数据竞争并发

类型系统保证"要么一个可变引用,要么多个不可变引用"

并发 bug 在编译期暴露

零成本抽象

泛型、trait、迭代器等抽象在编译后无运行时开销

高级写法 ≈ 手写底层代码的性能

无运行时 / 无 GC

编译为本地机器码,无虚拟机、无停顿

可用于内核、嵌入式、实时场景

模式匹配

match、if let、while let 穷尽性检查

强制处理所有分支,减少逻辑漏洞

代数类型与 Option/Result

没有 null,用 Option<T> / Result<T, E> 表达缺失与错误

空指针异常从根本上消失

trait 与泛型

类似接口 + 编译期单态化

抽象能力与静态分发性能兼得

宏系统

声明宏 macro_rules! + 过程宏 #[derive]

减少样板代码,支持 DSL

Cargo 工具链

内置包管理、构建、测试、文档、格式化

工程化开箱即用

unsafe 边界

需要底层操作时用 unsafe 显式隔离

安全是默认,能力不设上限


4. 所有权与借用速查

概念

规则 / 语法

示例

所有权三原则

①每个值有唯一所有者 ②同一时刻只能有一个所有者 ③所有者离开作用域,值被 drop

{ let s = String::from("hi"); } // s 在此释放

移动(Move)

对堆上类型赋值/传参默认移动,原变量失效

let a = String::from("x"); let b = a; // a 不再可用

拷贝(Copy)

实现 Copy 的标量类型按位复制,原变量仍可用

let x = 5; let y = x; // x 依然可用

不可变借用

&T,可同时存在多个,期间不能修改

let r = &s;

可变借用

&mut T,同一时刻只能有一个,且与不可变借用互斥

let r = &mut s; r.push_str("!");

借用规则

任意时刻:要么 1 个 &mut,要么任意多个 &,不能共存

违反即编译报错 E0499 / E0502

切片

&str、&[T] 是对连续数据的借用视图

let part = &s[0..3];

生命周期标注

'a 描述引用的有效范围,多数场景可自动推断

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str

智能指针

Box<T> 堆分配、Rc<T> 共享、Arc<T> 线程共享、RefCell<T> 内部可变性

见第 8 节


5. 常用数据类型

类别

类型

说明

整数

i8 i16 i32 i64 i128 isize / u8 u16 u32 u64 u128 usize

定长有符号/无符号,默认 i32

浮点

f32 / f64

默认 f64,遵循 IEEE-754

标量

bool、char(4 字节 Unicode)

char 支持中文、emoji

单元

()

类似 void

元组

(i32, f64, char)

通过 .0 或解构访问

数组

[T; N]

编译期定长,栈上分配

动态数组

Vec<T>

堆上可变长序列

字符串

&str(切片借用)/ String(拥有所有权,堆分配,UTF-8)

二者转换:String::from(s) / s.as_str()

哈希/有序映射

HashMap<K, V> / BTreeMap<K, V>

前者 O(1) 平均,后者有序

集合

HashSet<T> / BTreeSet<T>

去重集合

可选/结果

Option<T>(Some / None)/ Result<T, E>(Ok / Err)

取代 null 与异常

自定义

struct、enum(可携带数据)、type 别名

enum 是 Rust 表达力核心


6. 基础语法速查

主题

语法

备注

变量绑定

let x = 1; / let mut y = 2;

默认不可变,需显式 mut

常量

const MAX: u32 = 100; / static G: i32 = 0;

类型必须标注

类型推断

let v: Vec<i32> = Vec::new();

多数场景可省略标注

遮蔽

let x = x + 1;

同名重新绑定,可改变类型

函数

fn add(a: i32, b: i32) -> i32 { a + b }

最后一个无分号表达式即返回值

控制流

if / else、loop、while、for x in iter

if 是表达式,可直接赋值

模式匹配

match v { 1 => "one", _ => "other" }

必须穷尽所有可能

简写匹配

if let Some(x) = opt { ... }

只关心一种分支

错误处理

? 运算符提前返回 Err,unwrap() / expect() 直接 panic

库代码优先 ?,示例代码可用 unwrap

结构体

struct User { name: String, age: u8 }

支持方法 impl User { fn ... }

枚举

enum Msg { Quit, Text(String) }

可携带任意数据

trait

trait Summary { fn summarize(&self) -> String; }

类似接口,支持默认实现

泛型

fn largest<T: PartialOrd>(list: &[T]) -> &T

trait 作为约束(bound)

迭代器

iter().map().filter().collect()

惰性求值,零成本

闭包

let f = |x: i32| x * 2;

可捕获环境变量

模块

mod / use / pub

默认私有,需 pub 暴露

注释

// 行注释、/// 文档注释

cargo doc 可生成文档


7. Cargo 与工具链

命令 / 工具

作用

rustup

官方工具链管理器,安装/切换 stable、beta、nightly 及交叉编译目标

cargo new <name>

创建项目(--lib 创建库)

cargo build

编译(--release 开启优化)

cargo run

编译并运行

cargo test

运行单元/集成测试

cargo check

只做类型检查,比 build 快,适合开发期

cargo fmt

代码格式化(rustfmt),统一风格

cargo clippy

官方 lint 工具,捕捉惯用法问题

cargo doc --open

生成并打开项目文档

cargo add <crate>

添加依赖(写入 Cargo.toml)

cargo update / cargo tree

更新依赖 / 查看依赖树

Cargo.toml

清单文件:依赖、版本、edition、特性开关

Cargo.lock

锁定依赖精确版本,保证可复现构建

包仓库

crates.io,官方生态索引


8. 内存管理与并发模型

场景

推荐工具

说明

单一所有权的堆分配

Box<T>

递归类型、大对象转移

单线程共享所有权

Rc<T>

引用计数

多线程共享所有权

Arc<T>

原子引用计数

内部可变性(单线程)

RefCell<T>

运行时检查借用规则

内部可变性(多线程)

Mutex<T> / RwLock<T>

常与 Arc 组合:Arc<Mutex<T>>

线程创建

std::thread::spawn

闭包需 'static 或配合 Arc

消息传递并发

std::sync::mpsc 通道

"用通信共享内存"

异步并发

async / .await + 运行时(tokio、async-std)

高并发 I/O 场景首选

FFI 调用 C

extern "C" + unsafe

与既有 C 库互操作

裸底层操作

unsafe { ... }

解裸指针、调用 unsafe 函数;安全责任由开发者承担


9. 与其他语言对比

对比项

Rust

C/C++

Go

Java / C#

内存管理方式

编译期所有权 + 借用检查

手动 malloc/free 或 RAII

垃圾回收(GC)

垃圾回收(GC)

内存安全

编译期保证(除 unsafe)

依赖开发者,易出野指针/泄漏

GC 保证,无悬垂引用

GC 保证

并发数据竞争

类型系统阻止

需自行加锁/审查

需自行避免(有 race detector)

需自行避免

运行时 / GC 停顿

无

无

有 GC 停顿(已大幅优化)

有 GC 停顿

抽象开销

零成本抽象

低

少量(接口、GC)

较高(虚方法、JIT、GC)

性能量级

与 C/C++ 同档

最高

略低于 Rust/C++

明显低于原生

编译速度

较慢

中等~慢

快

快

学习曲线

陡(所有权/生命周期心智负担)

陡(内存管理复杂)

平缓

平缓

典型场景

系统、内核、嵌入式、高性能服务、WASM

系统、游戏引擎、驱动

云原生、微服务、中间件

企业应用、后端业务


10. 应用场景与代表项目

领域

代表项目 / 案例

说明

操作系统内核

Linux 内核(6.1+ 支持 Rust)、Windows 内核部分组件、Android 系统组件

用内存安全降低漏洞密度

浏览器

Firefox(Servo 引擎、Stylo 样式系统)、Chromium 部分模块

Mozilla 出身,落地最早

基础设施 / 云原生

AWS(Firecracker、S3 部分核心)、Cloudflare(Pingora)、Dropbox

高并发低延迟场景

命令行工具

ripgrep、fd、bat、delta、zoxide、eza

替代传统 C 工具,速度更快

前端 / 跨端

swc、Rspack、Biome、Tauri、Rust → WebAssembly

构建工具链与桌面应用新宠

数据库

TiKV、SurrealDB、Databend、Polars

存储引擎与数据分析

区块链

Solana、Polkadot(Substrate)、Near

高性能与安全性需求

游戏与图形

Bevy 引擎、wgpu、Embark 工具链

无 GC 卡顿,适合实时渲染

嵌入式

embedded-hal、RTIC、ESP32 / STM32 生态

no_std 支持裸机运行

AI 基础设施

tokenizers(Hugging Face)、candle、llama.cpp 相关生态

推理/预处理性能敏感环节


11. 学习路径与资源

资源

类型

说明

Rust 程序设计语言(中文版)

官方教程

最权威入门书,俗称 "The Book"

Rust 语言圣经(Rust Course)

中文社区教程

中文讲解深入,适合进阶

Rust By Example

示例集

通过可运行例子学习

Rustlings

交互式练习

边改错边学,强推新手

Rust 标准库文档

参考手册

API 查询必备

crates.io / lib.rs

包仓库

找第三方库

Rust Playground

在线运行

免安装试代码

This Week in Rust

社区周刊

跟踪生态动态

建议学习顺序:基础语法 → 所有权与借用(最关键,需反复理解)→ 结构体/枚举/错误处理 → trait 与泛型 → 集合与迭代器 → 智能指针与并发 → 异步编程 → 实战项目。


12. 优势与挑战

优势

挑战

编译期内存与并发安全,大幅降低线上崩溃与 CVE

所有权/生命周期概念学习曲线陡峭,初期频繁与编译器"搏斗"

性能对标 C/C++,无 GC 停顿

编译速度相对较慢,大型项目构建耗时

零成本抽象,代码表达力强且高效

部分领域生态(如 GUI、某些企业框架)成熟度不如 Java/Python

Cargo + crates.io 工程化体验优秀

招聘与人才储备相对少于主流后端语言

跨平台与 WebAssembly 支持良好

与 C/C++ 大型存量代码集成需维护 FFI 边界

社区活跃,版本发布稳定(6 周节奏 + Edition 兼容机制)

异步生态存在运行时分野(tokio 为主流,需选型)


支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!