🦀 Rust 学习路线
122 个互动教程
Rust 入门教程 — 现代系统编程语言
从零开始学习 Rust:了解 Rust 是什么、为什么学、写出第一个 Rust 程序
Rust Vec集合
学习Vec
Rust 字符串
String vs &str, 拼接, 格式化
Rust HashMap
键值对集合的创建与操作
Rust 字符串深入
学习String操作
Rust Cargo包管理
学习Cargo
Rust 所有权 — 最核心的概念
深入理解 Rust 所有权系统的三大规则:移动、克隆、借用
Rust 结构体与实现
struct 定义数据,impl 定义方法,derive 派生宏
Rust 模式匹配
学习match
Rust Trait — 接口抽象
trait 定义共享行为,impl Trait 语法
Rust Result 错误处理
Result<T,E>/unwrap/expect/?
Rust 闭包
|params| body 捕获环境
Rust 模块系统
学习mod
Rust 泛型与 trait 约束
泛型函数 + trait bound 类型安全
Rust 迭代器 — Iterator
iter/map/filter/collect 链式处理数据
Rust 生命周期
引用有效范围标注,编译器自动推断
Rust 测试
#[test] 单元测试、assert!
Rust 线程 — 并发执行
thread::spawn 创建线程,join 等待完成
Rust Channel 通道
mpsc 线程间安全通信
Rust 借用与引用 — 安全地共享数据
& 不可变借用、&mut 可变借用、借用规则详解
Rust Option 与 Result
Option/Result 枚举处理空值和错误
Rust ? 运算符
? 传播错误简化代码
Rust Trait 对象
dyn Trait 动态分发
Rust 切片类型
学习切片
Clone与Copy区别
理解Clone与Copy trait的核心区别:Copy是隐式按位复制,Clone是显式深度克隆。
Rust 枚举与模式匹配
enum/Option/Result/match/if let
Mutex与RwLock互斥读写
对比Mutex(单一锁)和RwLock(读写锁)的适用场景与性能差异。
rayon并行迭代器
使用rayon库将普通迭代器转换为并行迭代器,轻松实现数据并行处理。
Rust 异步编程深入
Rust异步深入:Pin固定/Unpin、Waker唤醒机制、async block/future、tokio Runtime运行原理、spawn任务调度、select!竞态选择
Rust FFI 外部函数接口
Rust FFI:extern "C"导出C接口、unsafe块调用外部函数、cbindgen生成C头文件、从Python/Node.js调用Rust库、内存布局对齐
Rust Serde 序列化库
Serde:Serialize/Deserialize derive宏、JSON/YAML/TOML等格式支持、#[serde(rename/alias/default/skip/flatten)]属性、自定义序列化/反序列化、与axum/actix集成
Rust Clippy 与代码质量
Rust代码质量:cargo clippy静态检查上百条lint规则、cargo fmt格式化、cargo deny依赖审计、cargo audit安全漏洞扫描、#[deny]/#[warn]属性控制
Rust Axum Web框架
Axum框架(Tokio生态):Router路由、Extractors提取器(Path/Query/Json/State共享状态)、Middleware tower层、Error Handling、WebSocket支持、与Actix-web对比
Rust Diesel ORM
Diesel ORM:Schema定义(diesel print-schema)、Model关联、CRUD操作(insert/update/delete/select)、Filter过滤、Join连接、Migration迁移管理、类型安全SQL构建
Rust unsafe 安全抽象
Rust unsafe:unsafe块/unsafe函数/unsafe trait/unsafe impl、原始指针dereference、调用FFI外部函数、实现Send/Sync、unsafe的最佳实践文档化Safety条件、用safe API封装unsafe代码
Rust Pin 与 Unpin 深入
Pin深入:为什么Future需要Pin(自引用结构体)、Pin<Box<T>>/pin!宏、Unpin auto trait(大部分类型都是Unpin)、Pin::as_mut()获取可变引用、与async/await底层关系
Rust Channel 消息传递
Rust Channel深入:std::sync::mpsc多生产者单消费者channel、sync_channel有界通道背压、crossbeam多生产者多消费者MPMC channel、tokio::sync::mpsc异步channel、oneshot单次channel
Rust Trait Object 与动态分发
Trait Object:dyn关键字、虚函数表vtable、何时使用Box<dyn Trait>(异构集合/依赖注入)、对象安全Object Safety(方法不能有泛型参数/不能返回Self)、与泛型静态分发对比
Rust Rayon 数据并行
Rayon并行计算库:.par_iter()/par_iter_mut()并行迭代器(自动拆分工作到线程池)、par_sort/par_extend、reduce/fold并行规约、ThreadPoolBuilder配置线程数、与std::thread手动并行的对比
Tokio 异步运行时深入
Tokio深入:#[tokio::main]宏展开(多线程调度器multi_thread/单线程current_thread)、tokio::select!宏竞赛模式、tokio::sync模块(Mutex/RwLock/Notify/Barrier/Semaphore/channel)、自定义Future实现
Rust Cargo Workspace 工作空间
Cargo Workspace多包管理:根Cargo.toml [workspace] members定义、包间依赖路径依赖、共享Cargo.lock统一版本、workspace.package集中配置、workspace.dependencies集中依赖版本管理
Rust build.rs 构建脚本
build.rs构建脚本:编译时执行(生成代码/编译C依赖/检测系统库/设置环境变量)、cargo:rerun-if-changed触发重编译条件、cargo:rustc-link-lib链接外部库、cc crate编译C文件
Rust 借用分割
Rust借用分割:结构体字段级借用(同时可变借用不同字段/编译器知道不冲突)、split_at_mut切分可变切片为两个不重叠部分、RefCell运行时借用检查、Cell内部可变性(Copy类型)
Rust Cow 写时克隆
Rust Cow<'a,T>(Clone on Write写时克隆):Borrowed引用不分配/ Owned需要修改时克隆、适合大多数情况不需修改的场景(字符串处理/配置/模板渲染)、from/std::borrow::Cow
Rust 声明宏深入
macro_rules!声明宏深入:匹配分支(pattern => template)、重复模式$(...)* + ? 、tt token tree、递归宏、调试macro_rules!(cargo expand展开)、与过程宏对比(简单/编译快/声明式)
Rust Criterion 基准测试
Criterion基准测试框架深入:#[bench]基准测试/基准组、通过HTML报告分析性能回归、参数化基准测试、与cargo bench标准库对比(防编译器优化死代码/Bencher黑盒)、测量统计p值判断差异是否显著
Rust 过程宏深入
Rust过程宏详细:#[proc_macro]函数式宏、#[proc_macro_derive]派生宏(Derive Macro)、#[proc_macro_attribute]属性宏、TokenStream→TokenStream输入输出Token操作、syn crate解析AST/quote crate生成TokenStream、proc_macro_error友好错误信息、编译性能注意事项
Cell内部可变性
通过Cell和RefCell实现内部可变性,绕过借用规则在不可变引用下修改数据。
Rust 线程局部存储
Rust线程局部存储:std::thread_local!宏(每个线程独立变量副本)、thread_local!(static FOO:RefCell<u32>=...)、LocalKey<T>的with方法借用访问、与全局static对比(避免全局锁/线程隔离)
Rust rustdoc 文档生成
rustdoc文档生成工具:///文档注释(支持Markdown/代码块测试自动cargo test执行)、//!模块级别文档、cargo doc生成HTML(cargo doc --open浏览器打开)、文档链接[module]/[struct@Foo]/[fn@function]、文档测试验证示例正确性、文档属性#[doc(hidden)]隐藏内部API
Rust Miri 未定义行为检测
Miri(MIR Interpreter/检测Rust代码中的Undefined Behavior未定义行为):cargo +nightly miri test运行测试检测UB(use-after-free/数据竞争/未对齐指针/null指针解引用/无效枚举判别值/栈内存返回/整数溢出)、与Sanitizers(ASan)对比(Miri在编译时MIR层/可在非x86上运行)
Rust no_std 嵌入式开发
Rust no_std标准库子集(嵌入式裸机/内核开发/WebAssembly不包含操作系统依赖):#![no_std]声明、core库(Option/Result/Iterator/slice基本类型)、alloc库(需要分配器的String/Vec/Box)、与libc crate交互
Rust 并发原语
Rust并发原语:Mutex/RwLock(阻塞/ std)、tokio::sync::Mutex(异步/不阻塞线程)、Notify(通知唤醒单个任务)、Barrier(屏障同步等待所有任务)、Semaphore(信号量限制并发数)、oneshot channel(单值异步通道)
Rust 枚举进阶模式
Rust枚举进阶:枚举携带数据的各种模式(Option<T>/Result<T,E>错误处理、带数据的命令模式、递归枚举如Expr需要Box缩进、Never type !/Infallible)、与Trait Object动态分发对比(枚举静态分发/编译时穷尽检查/adding variant需修改enum但类型安全更好)
Rust cargo-binstall 二进制安装
cargo-binstall二进制安装替代cargo install从源码编译:cargo binstall <crate>直接从GitHub Releases下载预编译二进制、自动检测平台架构、与cargo install对比速度快数十倍
filter_map过滤转换
利用filter_map同时完成过滤和映射操作,优雅处理Option和Result类型。
Rust 入门 — 安装与Hello World
Rust语言简介、rustup安装工具链、cargo包管理器(new/build/run)、第一个Hello World项目、Cargo.toml配置、Rust特点:内存安全/零成本抽象
Rust 借用与引用
Rust借用:不可变引用&T(可多个)、可变引用&mut T(同一时刻只能有一个)、引用的生命周期、悬垂引用编译错误、借用规则总结
Rust Vec 与 HashMap 集合
Rust集合:Vec<T>(push/pop/get/索引/遍历iter)、HashMap<K,V>(insert/get/entry/or_insert)、使用collect()从迭代器收集、元组解包遍历
Rust 结构体与枚举
Rust结构体(命名/元组/单元结构体)、impl实现方法、枚举enum、Option<T>(替代null/有None和Some<T>)、Result<T,E>(错误处理/Ok和Err)、match模式匹配
Rust智能指针详解
学习Box、Rc、RefCell等智能指针的原理与用法
Rust 错误处理 — Result与?运算符
Rust错误处理:Result<T,E>类型、unwrap/expect(panic风险)、?运算符传播错误、map_err转换错误类型、自定义错误类型、anyhow/thiserror库
Rust Deref特型:解引用操作符的秘密
理解Deref和DerefMut如何实现自动解引用与隐式转换
Rust Drop特型:资源清理的自动魔法
掌握Drop特型,实现自定义的资源释放逻辑
Rust宏编程入门
学习声明式宏和过程宏的基础概念与编写方法
Rust异步编程基础
理解async/await语法、Future特型和基本异步运行时
Rust Web开发 — Actix-Web框架
Rust Actix-Web:HttpServer启动、route路由、App配置、Extractors提取器(Path/Query/Json)、Middleware中间件、Actix Actor模型
Rust Tokio运行时实战
学习使用Tokio创建异步任务、处理并发和I/O操作
Rust Serde序列化框架
掌握使用Serde进行JSON、YAML等格式的序列化与反序列化
Rust Rayon并行计算
使用Rayon库轻松将迭代器转换为并行执行
Rust thiserror错误处理库
使用thiserror简化自定义错误类型的实现
Rust anyhow:灵活的错误处理
使用anyhow简化应用程序级错误处理与上下文传递
Rust 智能指针入门
学习 Box、Rc 和 RefCell 智能指针的概念与使用场景
Rust Deref 特征详解
理解 Deref 和 DerefMut trait 如何实现智能指针的解引用操作
Rust Drop 特征与资源清理
掌握 Drop trait 在变量离开作用域时自动释放资源的机制
Rust 宏编程基础
学习声明式宏(macro_rules!)和过程宏的概念与使用
Rust 异步编程入门
理解 async/await 语法和 Future trait 实现并发的基本方法
Rust Deref trait:智能指针的解引用魔法
学习Deref trait如何让智能指针像普通引用一样使用,以及自动解引用规则
Rust Drop trait:资源释放的精确控制
理解Drop trait如何自动清理资源,以及提前释放的技巧
Rust宏:元编程的利器
学习声明式宏和过程宏的基本概念,以及如何用宏减少重复代码
Rust异步编程入门
理解async/.await语法、Future trait以及运行时(如tokio)的基础使用
Rust异步编程基础
学习async/await语法和异步运行时
Rust 中静态派发与动态派发的性能陷阱
深入分析 trait 对象与泛型单态化的底层实现,揭示虚函数表开销与代码膨胀的权衡,并通过微基准测试验证不同场景下的性能差异。
PhantomData 与类型状态机:在编译期消除非法状态
利用 PhantomData 作为类型级标记,结合零大小类型构建类型状态机,将运行时错误(如读取未初始化资源)转化为编译错误,同时保持零运行时开销。
Pin 与 Unpin:安全构建自引用结构体
解析 Pin 的内存语义,通过自引用链表示例展示如何安全保证对象不移位,避免悬垂指针。对比 Box::pin 与 pin! 宏,讲解 Unpin auto trait 的作用。
Const 泛型与变长计算:编译期矩阵乘法优化
利用 const 泛型(如 N: usize)在类型层面表达矩阵维度,实现编译期形状检查,并配合 const 表达式展开循环,生成无运行时开销的矩阵乘法。
全局分配器重载与自定义 arena 分配器
实现 GlobalAlloc trait 构建线程局部分配器,分析标准分配器性能瓶颈,设计 arena 分配器用于高频短生命周期对象的零碎片分配。
Async Drop 与安全取消:构建可中止的异步任务
探讨 Rust 异步中异步析构(AsyncDrop 提案)的缺失,用 select! + cancellation token 模式实现资源安全释放,避免已取消 future 的内存泄漏。
FFI 安全边界:从 repr(C) 到 safer_ffi 过程宏
深入 Rust FFI 的内存布局隐患,演示 repr(C) 与 repr(align) 控制结构体对齐,使用 safer_ffi crate 自动生成 C 兼容接口并插入边界检查,避免未定义行为。
内联汇编与零成本抽象:Rust 中嵌入 SIMD 指令
使用 core::arch 中的平台特定内联函数与 asm! 宏直接生成 SIMD 指令,在保持 Rust 抽象能力的同时获得接近手写汇编的性能。
过程宏实战:解析、转换与生成 AST
从零实现派生宏和属性宏,深入 proc_macro::TokenStream 与 syn/quote 库,在编译期对结构体进行 AST 变换(如自动实现 Builder 模式)。
io_uring 与异步 I/O:零拷贝网络代理
利用 tokio-uring 或直接 io_uring 系统调用构建异步 TCP 代理,实现内核级零拷贝(splice),避免用户态缓冲区复制,达到接近硬件极限的吞吐量。
深入 unsafe:自定义 ABI 与内存布局的实战艺术
超越 FFI 基础,学习如何在 unsafe 中手动构造符合任意底层协议的内存布局,例如无头链表、定长池分配器。
Pin 投影实战:手动实现自引用结构与 PhantomPinned 的精妙配合
不再恐惧 Pin<&mut T>,通过构建一个自引用双向链表节点,掌握投影的安全边界与内部可变性。
类型级编程:用 GAT 和类型族模拟高阶类型(Higher-Kinded Types)
Rust 没有原生 HKT,但利用泛型关联类型(GAT)和 trait 约束可逼近其能力,实现抽象函子与 monad。
异步 Drop 与安全取消:构建结构化取消令牌(CancellationToken)
超越简单的 select!,深入 async 析构与取消的底层机制,编写生产级取消令牌。
自定义分配器:从头编写 Arena 分配器并与 Vec<T> 集成
不止是 GlobalAlloc,本教程教你实现一个引用跨度的区域分配器,并安全地用于集合。
const 泛型进阶:编译期向量数学库与 SIMD 代码生成
利用 const 泛型在编译期确定维度,自动生成 SIMD 加速的线性代数运算,无运行时泛型开销。
零拷贝反序列化:使用 &[u8] 和借贷系统构建无分配解析器
不依赖 serde 与 deserialize,手动从字节切片借出 &str 和 &[u8],实现真正的零拷贝。
Trait 型变与幽灵生命周期:设计安全的协变/逆变抽象
理解型变(variance)在 trait 上的深层影响,并用 PhantomData 控制子类型关系。
过程宏实战:自动生成状态机转换代码(状态模式编译器)
超越 derive 宏,编写一个属性宏,将枚举状态定义编译为类型安全的转换表与 match 代码。
无锁数据结构:从内存排序到构建无锁 MPMC 队列(只使用 std)
不依赖 crossbeam,只用 Atomic 操作和 Ordering 语义实现一个生产者-消费者队列。
Phantom类型与所有权魔术:零大小类型的生命周期博弈
揭秘PhantomData在所有权、生命周期和并发标记中的深层应用,掌握如何用零大小类型操控编译期约束。
Pin与Unpin的幕后:自引用结构的正确构建与异步陷阱
深入Pin的核心机制,揭示自引用结构如何在堆上安全存在,以及为什么异步块会悄悄引入Pin。
生命周期变体(Variance)实战:协变、逆变与不变的本质
不再畏惧编译器错误!理解函数签名中生命周期的协变/逆变规则,解开Fn trait与结构体泛型的神秘关系。
宏的透明性与卫生性:构建不会意外捕获标识符的声明宏
深入Rust宏卫生系统,揭示$crate、局部变量隔离与自定义上下文的秘密,避免宏污染调用者命名空间。
全局分配器定制:从线程局部缓存到无锁内存池
超越默认alloc,亲手实现一个全局分配器,理解内存布局、对齐和dealloc的安全契约。
析构顺序的编译期之舞:Drop Check与提前释放的安全性
揭示Rust如何通过dropck分析保证struct字段按声明顺序析构,以及如何用ManuallyDrop干预这一规则。
Unsafe Trait的生命周期契约:实现Send/Sync的非标准模式
探索如何为自定义类型安全地实现Send和Sync,特别是当类型包含内部可变性时,如何利用PhantomData标记正确的并发语义。
FFI生命周期桥梁:在C与Rust之间安全传递借用和所有权
超越简单的extern "C",掌握如何将Rust的生命周期模型映射到C的原始指针世界,防止内存泄漏和悬垂指针。
Never类型!的进阶用法:完美错误处理与类型级控制流
探索!类型在Result、match和异步代码中的妙用,实现无法到达的分支和编译期可证伪性。
泛型关联类型(GAT)的范式革命:表达高阶类型关系
GAT允许关联类型带有泛型参数,本教程教你如何用GAT实现迭代器工厂、借用模式抽象和类型级别计算。
零成本抽象的所有权错觉
剖析Rust中迭代器、闭包等零成本抽象在所有权系统中的真实开销与隐藏规则
PhantomData与型变:隐藏的类型兵器
揭示PhantomData在型变、生命周期标记、drop检查中的真实作用,超越官方文档示例
Pin: 不只是自引用——手动投影的艺术
构建自引用结构时Pin与unsafe的手动投影技术,以及如何安全地暴露字段
Negative impl与Auto trait的隐式逻辑
探索Rust nightly中的negative trait impl如何影响auto trait派生和并发安全
超越整数:const泛型中的enum与bool魔改
利用const泛型和min_const_generics实现基于enum状态和布尔值的编译期分发
HRTB生命周期异常:for<'a>的真实语义
深入HRTB(高阶trait约束)在闭包、函数指针和动态分发中的隐藏生命周期绑定规则
内联汇编的内存模型与编译器屏障
在Rust中使用asm!宏时如何正确控制内存顺序、避免编译器优化破坏并发逻辑
TAIT(Type alias impl Trait)的伪装与解构
稳定版中已经存在的impl Trait在类型别名中的局限,以及nightly TAIT如何改变抽象模式
Never类型!与穷尽模式匹配的隐藏力量
探索!类型在分歧函数、不变量编码和类型级空洞中的高级用法
派生宏实战:TokenStream解析与属性战争
从零构建一个派生宏,处理复杂的属性参数和字段级别标记,包括syn/quote深度使用