Rust 语言入门 Introduction to Rust
第一部分: 语言基础
1.
配置开发环境
❱
1.1.
使用 rustup 配置 Rust 工具链
1.2.
第一个 rust 程序 hello world
1.3.
RustRover IDE
1.4.
VS Code
2.
基础数据类型 Primitives
❱
2.1.
整数类型 Integers
2.2.
浮点类型 Floating Point Numbers
2.3.
布尔类型 Boolean
2.4.
字符 char
2.5.
数组 array
2.6.
元组 tuple
2.7.
切片 slice
2.8.
字符串 str
2.9.
字符串常量
2.10.
指针 pointer
2.11.
类型别名 Type Alias
2.12.
类型转换 Casting
3.
表达式 Expressions
❱
3.1.
变量 Variables
3.2.
条件判断表达式 if 与 if let
3.3.
匹配表达式 match
3.4.
返回表达式 return
3.5.
循环表达式 loop
3.6.
下划线表达式 Underscore
3.7.
代码块表达式 Block
3.8.
操作符表达式 Operators
3.9.
其它表达式
4.
模块 Modules
❱
4.1.
Crate 的组成部分
4.2.
模块 Modules
4.3.
文件系统结构 Filesystem Hierarchy
4.4.
路径 Path
4.5.
可见性 Visibility
4.6.
预先导入 Preludes
5.
所有权 Ownership
❱
5.1.
所有权 Ownership
5.2.
C++ 中的移动语义 Move Semantics
5.3.
转移所有权 Move Ownership
5.4.
不需要转移所有权 Clone 与 Copy traits
5.5.
使用 Rc 与 Arc 共享所有权
5.6.
引用 References
6.
引用 References
❱
6.1.
引用的操作
6.2.
引用的内存结构
6.3.
引用的安全性 Reference Safety
6.4.
共享引用 Shared Reference
6.5.
可变更引用 Mutable References
6.6.
reborrow
6.7.
借用检查器 Borrow Checker
7.
生命周期 Lifetimes
❱
7.1.
标注生命周期 Lifetime marker
7.2.
函数中的生命周期
7.3.
结构体生命周期
7.4.
泛型生命周期
7.5.
省去标注生命周期 Lifetime Elision
7.6.
常量 Const
7.7.
静态变量 Static
7.8.
static 静态生命周期
7.9.
Non-lexical lifetimes NLL
第二部分: 自定义类型
8.
结构体 Structs
❱
8.1.
定义结构体 Definition
8.2.
定义方法 Implementation
8.3.
调用结构体的方法
8.4.
New Type
8.5.
内存布局 Memory Layout
9.
枚举 Enums
❱
9.1.
内存布局 Memory Layout
9.2.
定义方法 impl
9.3.
Option
9.4.
Result
10.
联合体 Unions
❱
10.1.
定义联合体
10.2.
模式匹配
10.3.
内存布局 Memory Layout
10.4.
泛型联合体
11.
接口 Trait
❱
11.1.
使用 Trait
11.2.
定义和实现 Trait
11.3.
Derive: 自动继承常见的 trait
11.4.
关联的项目 Associated Items
11.5.
Trait Objects
11.6.
静态派发与动态派发 Static Dispatch and Dynamic Dispatch
11.7.
隐藏名称 Name Hiding
12.
函数与闭包 Functions and Closures
❱
12.1.
函数 function
12.2.
函数属性
12.3.
重载 Overloading
12.4.
函数传递参数的几种方法
12.5.
闭包 Closure
12.6.
闭包的内存布局
12.7.
Fn, FnMut 与 FnOnce
12.8.
回调函数
12.9.
函数声名示例
13.
泛型 Generics
❱
13.1.
泛型函数 Generic Functions
13.2.
泛型结构体 Generic Structs
13.3.
泛型 Traits Generic Traits
13.4.
常量泛型参数 Const Generics
14.
模式匹配 Pattern Matching
❱
14.1.
模式 Patterns
14.2.
匹配值 Matching Values
14.3.
使用条件匹配 Match Guards
14.4.
解构 Destructing
14.5.
let 控制流
14.6.
matches 宏
第三部分: 标准库
15.
操作符重载 Operator Overloading
❱
15.1.
算术与比特位操作符 Arithmetic and bitwise operators
15.2.
Range
15.3.
索引 Index 与 IndexMut
15.4.
相等与比较 Eq and Ord
16.
迭代器 Iterators
❱
16.1.
Iterator 与 IntoIterator
16.2.
ExactSizeIterator
16.3.
DoubleEndedIterator
16.4.
FromIterator
16.5.
Extend
16.6.
求和 Sum
16.7.
乘积 Product
16.8.
迭代器的适配器 Adapters
16.9.
使用 Iterator
17.
常用的 Traits
❱
17.1.
Drop
17.2.
Default
17.3.
Write
17.4.
Debug 与 Display
17.5.
FromStr 与 ToString
17.6.
Clone 与 Copy
17.7.
ToOwned
17.8.
From 与 Into
17.9.
TryFrom 与 TryInto
17.10.
AsRef 与 AsMut
17.11.
Deref 与 DerefMut
17.12.
Borrow 与 BorrowMut
17.13.
Send 与 Sync
17.14.
Sized
17.15.
Hash 与 Hasher
17.16.
反射 Any
18.
容器类 Collections
❱
18.1.
数组 Vec
❱
18.1.1.
使用 Vec
18.1.2.
结构体定义与内存布局
18.1.3.
管理容量
18.1.4.
迭代器
18.2.
双端队列 VecDeque
❱
18.2.1.
使用 VecDeque
18.2.2.
结构定义与内存布局
18.2.3.
管理容量
18.2.4.
迭代器
18.2.5.
与 Vec 比较
18.3.
双链表 LinkedList
18.4.
优先级队表 BinaryHeap
18.5.
HashMap & HashSet
18.6.
BTreeMap & BTreeSet
19.
字符串 String
❱
19.1.
Unicode 编码
19.2.
UTF-8 编码
19.3.
String 类
19.4.
字符串格式化
19.5.
字符串内存布局
19.6.
其它类型的字符串
20.
输入输出 IO
第四部分: 内存管理
21.
内存管理基础
❱
21.1.
进程内存结构 Segments
21.2.
RAII
21.3.
Drop 对象的时机
22.
std::ptr 模块
❱
22.1.
read() 与 write() 函数
22.2.
addr_of!() 与 addr_of_mut!() 宏
22.3.
eq() 与 addr_eq() 函数
22.4.
swap() 与 replace() 函数
22.5.
swap_nonoverlapping() 函数
22.6.
copy() 与 copy_nonoverlapping() 函数
22.7.
drop_in_place() 函数
22.8.
slice_from_raw_parts() 函数
22.9.
null() 与 null_mut() 函数
22.10.
NonNull 类
22.11.
Unique 类
23.
std::mem 模块
❱
23.1.
offset_of!() 宏
23.2.
size_of() 与 size_of_val() 函数
23.3.
align_of() 与 align_of_val() 函数
23.4.
zeroed() 函数
23.5.
MaybeUninit 类
23.6.
ManuallyDrop 类与 forget() 函数
23.7.
replace() 函数
23.8.
swap() 函数
23.9.
take() 函数
23.10.
transmute() 函数
24.
智能指针 Smart Pointers
❱
24.1.
原始指针 Raw pointer
24.2.
胖指针 Fat pointer
24.3.
使用 Box 分配堆内存
❱
24.3.1.
Box<T> 类
24.3.2.
Box::leak() 函数
24.3.3.
Box<[T]> 类
24.3.4.
Box<dyn Trait> 类
24.3.5.
Box<dyn Any> 实现类型反射
24.3.6.
探寻 Box<T> 内部
24.4.
Rc 在线程内的引用计数
❱
24.4.1.
Rc 的内存布局
24.4.2.
使用 Weak 解决循环引用问题
24.4.3.
内部可变性: Rc<Refcell> 的使用
24.4.4.
对比 C++ 里的 shared_from_this
24.4.5.
Rc<[T]> 切片
24.5.
Cell 与 RefCell
❱
24.5.1.
内部可变性 Interior Mutability
24.5.2.
Cell 类
24.5.3.
Cell 的内存布局
24.5.4.
RefCell 类
24.5.5.
RefCell 的内存布局
24.5.6.
OnceCell 类
24.5.7.
LazyCell 类
24.5.8.
UnsafeCell 类
24.6.
写时复制 borrow::Cow 与 borrow::ToOwned
25.
内存管理
❱
25.1.
内存模型 Memory Model
25.2.
marker::PhantomData 类
25.3.
固定内存 pin::Pin 以及 marker::Unpin
25.4.
初始化内存 Initialize Memory
25.5.
内存对齐 Memory Alignment
25.6.
内存布局 Memory Layout
25.7.
空类 Zero Sized Types
25.8.
Sanitizers
25.9.
使用 valgrind 检查内存泄露
25.10.
Miri
26.
内存分配器
❱
26.1.
内存分配器关系图
26.2.
内存分配器的基本接口 GlobalAlloc
26.3.
Allocator Trait
26.4.
标准库中的内存分配器
26.5.
自定义内存分配器
26.6.
Arena 分配器
26.7.
jemalloc 库
第五部分: 并发编程
27.
Linux 下的线程基础
❱
27.1.
线程的创建与终止
27.2.
取消线程 Thread Cancellation
27.3.
线程相关的更多信息
27.4.
线程同步 Thread Synchronization
❱
27.4.1.
互斥锁 Mutex
27.4.2.
条件变量 Condition Variable
27.4.3.
读写锁 RwLock
27.4.4.
自旋锁 Spinlock
27.4.5.
内存屏障 Barrier
27.4.6.
信号量 Semaphore
27.5.
Per-thread Storage
❱
27.5.1.
One-time initialization
27.5.2.
Thread-Specific Data
27.5.3.
线程本地存储 Thread-Local Storage
27.5.4.
线程本地存储 TLS 是如何实现的
28.
Linux 下的进程间通信 IPC
❱
28.1.
进程间通信概述 Overview
28.2.
信号 Signal
28.3.
文件锁 File Locking
28.4.
管道 Pipe
28.5.
FIFO
28.6.
eventfd
28.7.
Unix Domain Socket
28.8.
System V IPC
❱
28.8.1.
System V Message Queue
28.8.2.
System V Semaphore
28.8.3.
System V Shared Memory
28.9.
内存映射 Memory Map
28.10.
POSIX IPC
❱
28.10.1.
POSIX Message Queue
28.10.2.
POSIX Semaphore
28.10.3.
POSIX Shared Memory
29.
并发编程基础 Concurrency Basic
❱
29.1.
并发编程模型 concurrency models
29.2.
线程 Threads
29.3.
线程本地存储 Thread Local Storage
29.4.
多线程与线程池
29.5.
rayon 线程池库
29.6.
Send 与 Sync trait
29.7.
基于共享内存的并发带来的不确定性
30.
消息传递 Message passing
❱
30.1.
使用 Channel 传递消息
30.2.
Channel 是如何实现的
31.
基于锁的并发 Lock-based Concurrency
❱
31.1.
锁相关的 API
31.2.
自旋锁 Spinlock
31.3.
互斥琐 Mutex 与 MutexGuard
31.4.
读写锁 RwLock 与 RwLockGuards
31.5.
可重入锁 ReentrantLock
31.6.
条件变量 Condition Variable
31.7.
Barrier
31.8.
Once
31.9.
OnceLock
31.10.
LazyLock
31.11.
信号量 Semaphore
31.12.
全局变量 Global Variables
31.13.
Arc 跨线程的引用计数
❱
31.13.1.
Arc 的内存布局
31.13.2.
使用 Arc<Mutex>
31.13.3.
使用 Arc<(Mutex, CondVar)>
31.13.4.
使用 Arc<RwLock>
31.13.5.
使用 Arc<AtomicUsize>
31.13.6.
使用 Weak 解决循环引用的问题
32.
无锁并发 Lock-free Concurrency
33.
原子操作内部 Atomic Internals
❱
33.1.
原子操作 Atomic
33.2.
内存顺序 Memory Order
33.3.
在用户空间实现的快速锁 futex
33.4.
重新实现自旋锁 Spinlock
33.5.
重新实现互斥锁 Mutex
33.6.
重新实现读写锁 RwLock
33.7.
重新实现条件变量 CondVar
33.8.
重新实现 Arc
33.9.
重新实现 Channel
33.10.
crossbeam 库
33.11.
parking_lot 库
33.12.
qcell 库
34.
并行计算 Parallel Computing
❱
34.1.
SIMD 基础
34.2.
SIMD 实践
34.3.
OpenMP
34.4.
MPI
34.5.
CUDA
第六部分: 异步编程
35.
异步 async/await
❱
35.1.
第一个 async 程序
35.2.
剖析 async 程序
35.3.
理解 Futures 与 Tasks
35.4.
理解 async/await
35.5.
coroutine
35.6.
生命周期与内存固定 Lifetimes and Pinning
35.7.
Async Drop
35.8.
异步迭代器 async iterator
36.
futures 库
❱
36.1.
任务的执行者 Executor
36.2.
管理任务 Tasks
36.3.
一次执行多个 Futures
36.4.
使用 channel 传递信息
36.5.
异步 IO
36.6.
Stream 与迭代器
36.7.
同步 Synchronization
37.
tokio 库
❱
37.1.
mio 库
37.2.
异步IO io-uring
37.3.
如何调试 debug
37.4.
Actor Model 模型
38.
其它异步运行时 Runtime
❱
38.1.
async-std
38.2.
smol
38.3.
Glommio
38.4.
手动实现一个运行时
第七部分: 工程实践
39.
错误处理 Error handling
❱
39.1.
Panic
39.2.
Panic Hook
39.3.
Error trait
39.4.
自定义错误类型
39.5.
thiserror 库
39.6.
anyhow 库
40.
日志与追踪 Logging && Tracing
❱
40.1.
打印日志到终端
40.2.
保存日志到文件
40.3.
保存日志到系统
40.4.
结构化日志
40.5.
Metrics
40.6.
追踪 Tracing
40.7.
遥测 Telemetry
40.8.
Sentry
40.9.
GlitchTip
40.10.
崩溃报告 Breakpad
41.
测试 Test
❱
41.1.
文档测试 Doc Test
41.2.
单元测试 Unit Test
41.3.
集成测试 Integrated Test
41.4.
代码覆盖率 Code Coverage
42.
运行时 Runtime
❱
42.1.
main() 函数
42.2.
调用 main() 函数之前发生了什么
42.3.
unwind
42.4.
运行时检查
43.
调试与性能优化 Debug & Profiling
❱
43.1.
调试模式 Debug
43.2.
GDB
43.3.
LLDB
43.4.
性能测试 Benchmark
❱
43.4.1.
divan 库
43.4.2.
criterian 库
43.5.
perf-tools
43.6.
加快编译速度
43.7.
优化二进制文件大小
43.8.
MIR
44.
汇编 Assembly
❱
44.1.
内联汇编 Inline Assembly
45.
宏 Macro
❱
45.1.
常用的宏 Common Macros
45.2.
声明宏 Declarative Macro
45.3.
过程宏 Procedure Macro
❱
45.3.1.
函数式宏 Function-like Macro
45.3.2.
继承宏 Derive Macro
45.3.3.
属性宏 Attribute Macro
45.4.
syn 库
45.5.
quote 库
46.
不安全的代码 Unsafe code
❱
46.1.
unsafe 块表达式
46.2.
unsafe 的函数
46.3.
unsafe trait
46.4.
访问原始指针 Dereference raw pointers
46.5.
Union
46.6.
访问静态变量
47.
调用外部接口接口 FFI
❱
47.1.
声明外部函数
47.2.
C ffi
47.3.
与C语言兼容的基础数据类型
47.4.
与C语言兼容的结构体
47.5.
C 语言格式的字符串
47.6.
声明外部函数以及变量
47.7.
使用外部库中的函数
47.8.
使用 CC 编译C代码并链接到内部
47.9.
自动生成语言绑定
48.
库 Crates
❱
48.1.
文档与注释
48.2.
指定使用特定的工具链 Custom Toolchain
48.3.
Cargo 基础
48.4.
Cargo 配置
48.5.
引用外部库
48.6.
构建脚本 build.rs
48.7.
工具
48.8.
目录结构
48.9.
属性 Attributes
48.10.
特性 Features
48.11.
条件编译 Conditional compilation
48.12.
跨平台 Cross Platform
48.13.
交叉编译 Cross Compilation
48.14.
静态编译 Static Compilation
48.15.
设置 no_std
49.
设计模式
❱
49.1.
创建型 Creational
❱
49.1.1.
简单工厂模式 Simple factory
49.1.2.
工厂方法模式 Factory method
49.1.3.
抽象工厂模式 Abstract factory
49.1.4.
建造者模式 Builder
49.1.5.
原型模式 Prototype
49.1.6.
单例模式 Singleton
49.2.
结构型 Structural
❱
49.2.1.
适配器模式 Adapter
49.2.2.
桥梁模式 Bridge
49.2.3.
组合模式 Composite
49.2.4.
装饰器模式 Decorator
49.2.5.
门面模式 Facade
49.2.6.
享元模式 Flyweight
49.2.7.
代理模式 Proxy
49.3.
行为型 Behavioral
❱
49.3.1.
责任链模式 Chain of Responsibility
49.3.2.
命令行模式 Command
49.3.3.
迭代器模式 Iterator
49.3.4.
中介者模式 Mediator
49.3.5.
备忘录模式 Memento
49.3.6.
观察者模式 Observer
49.3.7.
访问者模式 Visitor
49.3.8.
策略模式 Strategy
49.3.9.
装态模式 State
49.3.10.
模板方法模式 Template Method
第八部分: Rust语言的生态
50.
数据结构与算法 Algorithms
51.
新特性 Unstable Features
❱
51.1.
portable simd
52.
第三方库 crates.io
❱
52.1.
dashmap 库: 并发的 HashMap 实现
52.2.
libloading 库
52.3.
数据序列化 serde
52.4.
smallvec
52.5.
时间 Time
53.
网络编程 Network Programming
❱
53.1.
HTTP 请求: reqwest 库
53.2.
Web 服务: hyper 库
53.3.
基于 Actor 模型实现的 Web 服务: actix-web 库
53.4.
websocket 库: tokio-tungstenite
53.5.
openssl 的原生实现: rustls 库
53.6.
QUIC 协议: quinn 库
53.7.
gRPC 服务: tonic 库
54.
WebAssembly
❱
54.1.
WebAssembly 系统接口 wasi
54.2.
基于 LLVM 的编译器 emscripten
54.3.
编译器与工具链 binaryen
54.4.
wasmtime 运行时
54.5.
wasmer 运行时
54.6.
WasmEdge 运行时
54.7.
反编译与调试
55.
web 前端开发
❱
55.1.
web-sys 库
55.2.
wasm-bindgen 库
55.3.
wasm-pack 工具
55.4.
trunk 工具
55.5.
yew 库
55.6.
wgpu 库
55.7.
zu 库
55.8.
其它工具
56.
客户端程序 GUI
❱
56.1.
使用 tauri 替代 electron
56.2.
gtk
56.3.
egui
参考资料
Light
Rust
Coal
Navy
Ayu
Rust 语言入门 Introduction to Rust
GDB
DWARF 格式
TUI
变量及其格式化
内存
符号
快捷键
远程调试