01 - Rust 简介
Rust 是一门专注于安全、并发与性能的系统级编程语言。它在不引入垃圾回收(GC)的前提下,通过所有权系统与借用检查器在编译期杜绝空指针、悬垂引用、数据竞争等内存问题,性能可对标 C/C++。
文档更新时间:2026-11-02(最新稳定版为 1.99.1,2026-10-15 发布)
1. 一句话概览
维度 | 内容 |
|---|---|
语言定位 | 系统级、通用的多范式编译型语言(命令式 + 函数式 + 泛型) |
设计目标 | 内存安全、并发安全、零成本抽象、高性能 |
内存管理 | 编译期所有权 + 借用检查,无 GC、无手动 |
创始人 | 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 | 依次引入 |
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) | 引用分为不可变 | 编译期消灭悬垂引用与野指针 |
无数据竞争并发 | 类型系统保证"要么一个可变引用,要么多个不可变引用" | 并发 bug 在编译期暴露 |
零成本抽象 | 泛型、trait、迭代器等抽象在编译后无运行时开销 | 高级写法 ≈ 手写底层代码的性能 |
无运行时 / 无 GC | 编译为本地机器码,无虚拟机、无停顿 | 可用于内核、嵌入式、实时场景 |
模式匹配 |
| 强制处理所有分支,减少逻辑漏洞 |
代数类型与 Option/Result | 没有 | 空指针异常从根本上消失 |
trait 与泛型 | 类似接口 + 编译期单态化 | 抽象能力与静态分发性能兼得 |
宏系统 | 声明宏 | 减少样板代码,支持 DSL |
Cargo 工具链 | 内置包管理、构建、测试、文档、格式化 | 工程化开箱即用 |
unsafe 边界 | 需要底层操作时用 | 安全是默认,能力不设上限 |
4. 所有权与借用速查
概念 | 规则 / 语法 | 示例 |
|---|---|---|
所有权三原则 | ①每个值有唯一所有者 ②同一时刻只能有一个所有者 ③所有者离开作用域,值被 drop |
|
移动(Move) | 对堆上类型赋值/传参默认移动,原变量失效 |
|
拷贝(Copy) | 实现 |
|
不可变借用 |
|
|
可变借用 |
|
|
借用规则 | 任意时刻:要么 1 个 | 违反即编译报错 E0499 / E0502 |
切片 |
|
|
生命周期标注 |
|
|
智能指针 |
| 见第 8 节 |
5. 常用数据类型
类别 | 类型 | 说明 |
|---|---|---|
整数 |
| 定长有符号/无符号,默认 |
浮点 |
| 默认 |
标量 |
|
|
单元 |
| 类似 void |
元组 |
| 通过 |
数组 |
| 编译期定长,栈上分配 |
动态数组 |
| 堆上可变长序列 |
字符串 |
| 二者转换: |
哈希/有序映射 |
| 前者 O(1) 平均,后者有序 |
集合 |
| 去重集合 |
可选/结果 |
| 取代 null 与异常 |
自定义 |
|
|
6. 基础语法速查
主题 | 语法 | 备注 |
|---|---|---|
变量绑定 |
| 默认不可变,需显式 |
常量 |
| 类型必须标注 |
类型推断 |
| 多数场景可省略标注 |
遮蔽 |
| 同名重新绑定,可改变类型 |
函数 |
| 最后一个无分号表达式即返回值 |
控制流 |
|
|
模式匹配 |
| 必须穷尽所有可能 |
简写匹配 |
| 只关心一种分支 |
错误处理 |
| 库代码优先 |
结构体 |
| 支持方法 |
枚举 |
| 可携带任意数据 |
trait |
| 类似接口,支持默认实现 |
泛型 |
| trait 作为约束(bound) |
迭代器 |
| 惰性求值,零成本 |
闭包 |
| 可捕获环境变量 |
模块 |
| 默认私有,需 |
注释 |
|
|
7. Cargo 与工具链
命令 / 工具 | 作用 |
|---|---|
| 官方工具链管理器,安装/切换 stable、beta、nightly 及交叉编译目标 |
| 创建项目( |
| 编译( |
| 编译并运行 |
| 运行单元/集成测试 |
| 只做类型检查,比 build 快,适合开发期 |
| 代码格式化( |
| 官方 lint 工具,捕捉惯用法问题 |
| 生成并打开项目文档 |
| 添加依赖(写入 |
| 更新依赖 / 查看依赖树 |
| 清单文件:依赖、版本、edition、特性开关 |
| 锁定依赖精确版本,保证可复现构建 |
包仓库 | crates.io,官方生态索引 |
8. 内存管理与并发模型
场景 | 推荐工具 | 说明 |
|---|---|---|
单一所有权的堆分配 |
| 递归类型、大对象转移 |
单线程共享所有权 |
| 引用计数 |
多线程共享所有权 |
| 原子引用计数 |
内部可变性(单线程) |
| 运行时检查借用规则 |
内部可变性(多线程) |
| 常与 |
线程创建 |
| 闭包需 |
消息传递并发 |
| "用通信共享内存" |
异步并发 |
| 高并发 I/O 场景首选 |
FFI 调用 C |
| 与既有 C 库互操作 |
裸底层操作 |
| 解裸指针、调用 unsafe 函数;安全责任由开发者承担 |
9. 与其他语言对比
对比项 | Rust | C/C++ | Go | Java / C# |
|---|---|---|---|---|
内存管理方式 | 编译期所有权 + 借用检查 | 手动 | 垃圾回收(GC) | 垃圾回收(GC) |
内存安全 | 编译期保证(除 | 依赖开发者,易出野指针/泄漏 | 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 | 高并发低延迟场景 |
命令行工具 |
| 替代传统 C 工具,速度更快 |
前端 / 跨端 |
| 构建工具链与桌面应用新宠 |
数据库 | TiKV、SurrealDB、Databend、Polars | 存储引擎与数据分析 |
区块链 | Solana、Polkadot(Substrate)、Near | 高性能与安全性需求 |
游戏与图形 | Bevy 引擎、 | 无 GC 卡顿,适合实时渲染 |
嵌入式 |
|
|
AI 基础设施 |
| 推理/预处理性能敏感环节 |
11. 学习路径与资源
资源 | 类型 | 说明 |
|---|---|---|
官方教程 | 最权威入门书,俗称 "The Book" | |
中文社区教程 | 中文讲解深入,适合进阶 | |
示例集 | 通过可运行例子学习 | |
交互式练习 | 边改错边学,强推新手 | |
参考手册 | API 查询必备 | |
包仓库 | 找第三方库 | |
在线运行 | 免安装试代码 | |
社区周刊 | 跟踪生态动态 |
建议学习顺序:基础语法 → 所有权与借用(最关键,需反复理解)→ 结构体/枚举/错误处理 → trait 与泛型 → 集合与迭代器 → 智能指针与并发 → 异步编程 → 实战项目。
12. 优势与挑战
优势 | 挑战 |
|---|---|
编译期内存与并发安全,大幅降低线上崩溃与 CVE | 所有权/生命周期概念学习曲线陡峭,初期频繁与编译器"搏斗" |
性能对标 C/C++,无 GC 停顿 | 编译速度相对较慢,大型项目构建耗时 |
零成本抽象,代码表达力强且高效 | 部分领域生态(如 GUI、某些企业框架)成熟度不如 Java/Python |
Cargo + crates.io 工程化体验优秀 | 招聘与人才储备相对少于主流后端语言 |
跨平台与 WebAssembly 支持良好 | 与 C/C++ 大型存量代码集成需维护 FFI 边界 |
社区活跃,版本发布稳定(6 周节奏 + Edition 兼容机制) | 异步生态存在运行时分野(tokio 为主流,需选型) |
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

