1 智能指针

1.1 Box智能指针

01.Box基础
    a.堆分配
        Box<T>在堆上分配数据
        示例:let b = Box::new(5);
        栈上存储指针
        所有权语义
    b.使用场景
        大型数据避免栈溢出
        trait对象
        递归类型
        示例:Box<dyn Trait>
    c.解引用
        自动Deref
        示例:let x = *b;
        透明访问
        智能指针
    d.Drop
        离开作用域自动释放
        示例:RAII模式
        内存安全
        无需手动释放

02.递归类型
    a.问题
        直接递归类型大小未知
        示例:enum List { Cons(i32, List), Nil } // 错误
        编译器无法计算
        无限大小
    b.解决方案
        使用Box间接引用
        示例:enum List { Cons(i32, Box<List>), Nil }
        固定大小指针
        编译通过
    c.链表实现
        Cons List模式
        示例:Box<Node>构建链表
        函数式数据结构
        递归定义
    d.树结构
        二叉树等
        示例:struct Node { left: Box<Node>, right: Box<Node> }
        递归数据结构
        常用模式

03.Box与性能
    a.堆分配开销
        比栈分配慢
        示例:频繁分配影响性能
        权衡考虑
        必要时使用
    b.缓存局部性
        堆数据分散
        示例:不如Vec连续
        性能影响
        数据结构选择
    c.零成本抽象
        无运行时开销
        示例:编译期优化
        与裸指针性能相当
        安全保证
    d.优化建议
        避免不必要的Box
        考虑栈分配
        示例:小数据用栈
        性能优先

04.Box模式
    a.大型数据
        避免栈溢出
        示例:Box<[u8; 1000000]>
        堆上分配
        安全使用
    b.trait对象
        动态分发
        示例:Box<dyn Draw>
        类型擦除
        运行时多态
    c.所有权转移
        移动语义
        示例:函数返回Box
        避免复制
        高效传递
    d.可选所有权
        Option<Box<T>>
        示例:可能为空的堆数据
        空指针优化
        内存高效

1.2 Rc引用计数

01.Rc基础
    a.共享所有权
        多个所有者
        示例:let a = Rc::new(5); let b = Rc::clone(&a);
        引用计数
        自动管理
    b.clone方法
        增加引用计数
        示例:Rc::clone(&rc)
        浅拷贝
        高效共享
    c.strong_count
        查看引用数
        示例:Rc::strong_count(&rc)
        调试工具
        理解生命周期
    d.Drop行为
        计数归零时释放
        示例:最后一个Rc离开作用域
        自动清理
        内存安全

02.Rc使用场景
    a.图结构
        多个节点指向同一节点
        示例:DAG有向无环图
        共享数据
        避免复制
    b.缓存
        共享只读数据
        示例:配置对象
        多处访问
        节省内存
    c.不可变共享
        只读访问
        示例:Rc<T>不可变
        线程不安全
        单线程使用
    d.与RefCell组合
        内部可变性
        示例:Rc<RefCell<T>>
        共享可变
        运行时检查

03.Rc限制
    a.单线程
        不是线程安全
        示例:多线程用Arc
        Send和Sync
        类型系统保证
    b.循环引用
        可能内存泄漏
        示例:A引用B,B引用A
        计数永不归零
        需要Weak
    c.不可变性
        Rc<T>是不可变的
        示例:需要可变用RefCell
        借用规则
        编译期检查
    d.性能开销
        引用计数维护
        示例:clone有开销
        原子操作(Arc)
        权衡使用

04.Weak弱引用
    a.打破循环
        不增加strong_count
        示例:Weak<T>
        避免内存泄漏
        父子关系
    b.upgrade方法
        尝试获取Rc
        示例:weak.upgrade()
        返回Option<Rc<T>>
        可能失败
    c.使用场景
        父子节点
        示例:子节点Weak引用父节点
        观察者模式
        缓存
    d.weak_count
        弱引用计数
        示例:Rc::weak_count(&rc)
        调试信息
        理解引用关系

05.Rc vs Box
    a.所有权
        Box单一所有权
        Rc共享所有权
        示例:需要共享用Rc
        根据需求选择
    b.性能
        Box更快
        Rc有计数开销
        示例:单所有者用Box
        性能考虑
    c.可变性
        Box可以mut
        Rc需要RefCell
        示例:Box<T>可变,Rc<T>不可变
        设计权衡
    d.使用建议
        默认Box
        需要共享用Rc
        明确所有权
        简化设计

1.3 RefCell内部可变性

01.RefCell基础
    a.内部可变性
        不可变引用下修改
        示例:let cell = RefCell::new(5); *cell.borrow_mut() = 6;
        运行时借用检查
        绕过编译期限制
    b.borrow和borrow_mut
        获取引用
        示例:let r = cell.borrow();
        运行时检查
        panic如果违反规则
    c.借用规则
        多个不可变或一个可变
        示例:运行时强制
        违反会panic
        动态检查
    d.使用场景
        需要内部可变性
        示例:Rc<RefCell<T>>
        共享可变数据
        单线程

02.RefCell vs Cell
    a.Cell
        Copy类型
        示例:Cell<i32>
        get和set
        无引用
    b.RefCell
        非Copy类型
        示例:RefCell<String>
        返回引用
        借用检查
    c.性能
        Cell更快
        RefCell有检查开销
        示例:简单类型用Cell
        权衡选择
    d.选择建议
        Copy类型用Cell
        其他用RefCell
        根据类型
        性能考虑

03.Rc<RefCell<T>>模式
    a.共享可变
        多个所有者+可变
        示例:Rc<RefCell<Vec<i32>>>
        常用组合
        灵活强大
    b.使用示例
        图结构修改
        示例:节点间共享可变数据
        复杂数据结构
        实用模式
    c.注意事项
        运行时panic风险
        示例:违反借用规则
        小心使用
        测试充分
    d.替代方案
        重新设计
        示例:避免共享可变
        函数式方法
        更安全

04.内部可变性模式
    a.缓存
        懒加载
        示例:RefCell<Option<T>>
        首次计算
        后续复用
    b.观察者模式
        通知订阅者
        示例:Rc<RefCell<Vec<Observer>>>
        动态修改
        设计模式
    c.mock对象
        测试替身
        示例:RefCell记录调用
        测试辅助
        验证行为
    d.配置对象
        运行时修改
        示例:全局配置
        灵活配置
        谨慎使用

05.RefCell最佳实践
    a.最小化使用
        优先编译期检查
        示例:重新设计避免RefCell
        类型安全
        更可靠
    b.文档说明
        标注借用规则
        示例:/// Panics if...
        用户警示
        避免误用
    c.测试覆盖
        测试panic情况
        示例:#[should_panic]
        边界条件
        健壮性
    d.考虑替代
        消息传递
        示例:channel通信
        更安全
        并发友好

1.4 Arc线程安全引用计数

01.Arc基础
    a.原子引用计数
        线程安全的Rc
        示例:let a = Arc::new(5);
        原子操作
        多线程共享
    b.clone方法
        增加引用计数
        示例:Arc::clone(&arc)
        原子增加
        线程安全
    c.Send和Sync
        可以跨线程
        示例:Arc<T>: Send + Sync
        类型系统保证
        安全并发
    d.性能开销
        原子操作成本
        示例:比Rc慢
        必要时使用
        权衡性能

02.Arc使用场景
    a.多线程共享
        跨线程数据
        示例:Arc<Vec<i32>>
        只读共享
        并发安全
    b.线程池
        共享配置
        示例:Arc<Config>
        所有线程访问
        避免复制
    c.并发数据结构
        共享状态
        示例:Arc<Mutex<T>>
        安全并发
        常用组合
    d.异步编程
        Future间共享
        示例:Arc<Data>
        跨await点
        生命周期管理

03.Arc<Mutex<T>>模式
    a.共享可变状态
        多线程修改
        示例:Arc<Mutex<HashMap<K, V>>>
        互斥访问
        线程安全
    b.lock方法
        获取锁
        示例:let mut data = mutex.lock().unwrap();
        阻塞等待
        自动释放
    c.死锁风险
        多个锁顺序
        示例:锁顺序不一致
        避免嵌套
        设计考虑
    d.性能考虑
        锁竞争
        示例:减少临界区
        细粒度锁
        优化策略

04.Arc vs Rc
    a.线程安全
        Arc线程安全
        Rc单线程
        示例:多线程必须Arc
        编译器强制
    b.性能
        Rc更快
        Arc原子开销
        示例:单线程用Rc
        性能优化
    c.使用选择
        根据线程需求
        示例:默认Rc,需要时Arc
        类型系统指导
        编译期检查
    d.转换
        不能直接转换
        示例:需要重新创建
        设计决策
        提前规划

05.智能指针组合
    a.常用组合
        Arc<Mutex<T>>:共享可变
        Rc<RefCell<T>>:单线程共享可变
        Box<dyn Trait>:trait对象
        示例:根据需求组合
    b.选择指导
        所有权:Box
        共享:Rc/Arc
        可变:Mutex/RefCell
        组合使用
    c.性能权衡
        最简单方案
        示例:避免过度设计
        必要时复杂化
        实测验证
    d.设计建议
        优先所有权
        必要时共享
        明确需求
        简化设计

1.5 内存管理

01.内存布局
    a.栈vs堆
        栈:快速,固定大小
        堆:灵活,动态分配
        示例:局部变量栈,Box堆
        性能差异
    b.智能指针布局
        栈上指针
        堆上数据
        示例:Box<T>占一个指针大小
        内存效率
    c.胖指针
        额外元数据
        示例:&[T]、&dyn Trait
        两个指针大小
        运行时信息
    d.对齐
        内存对齐要求
        示例:结构体填充
        性能优化
        硬件要求

02.内存安全
    a.无悬垂指针
        所有权保证
        示例:编译期检查
        生命周期
        类型安全
    b.无double free
        Drop自动管理
        示例:离开作用域释放
        RAII模式
        资源安全
    c.无内存泄漏
        通常情况
        示例:循环引用例外
        使用Weak
        最佳实践
    d.线程安全
        Send和Sync
        示例:编译期保证
        类型系统
        并发安全

03.自定义智能指针
    a.Deref trait
        解引用
        示例:impl Deref for MyBox<T> { }
        自动解引用
        透明访问
    b.Drop trait
        析构
        示例:impl Drop for MyBox<T> { }
        资源清理
        RAII
    c.实现示例
        简单Box
        示例:struct MyBox<T>(*mut T);
        理解原理
        学习工具
    d.注意事项
        unsafe代码
        示例:裸指针操作
        小心使用
        充分测试

04.内存优化
    a.避免分配
        栈上优先
        示例:小数据避免Box
        性能优化
        减少开销
    b.对象池
        复用对象
        示例:避免频繁分配
        性能提升
        特定场景
    c.内存对齐
        优化布局
        示例:字段排序
        减少填充
        空间效率
    d.零拷贝
        避免复制
        示例:引用传递
        性能关键
        设计考虑

2 并发编程

2.1 线程

01.创建线程
    a.spawn函数
        创建新线程
        示例:thread::spawn(|| { println!("thread"); });
        闭包参数
        返回JoinHandle
    b.join方法
        等待线程结束
        示例:handle.join().unwrap();
        阻塞等待
        获取返回值
    c.move闭包
        转移所有权
        示例:thread::spawn(move || { use_value(v); });
        线程安全
        避免悬垂引用
    d.线程返回值
        JoinHandle<T>
        示例:let result = handle.join().unwrap();
        Result类型
        错误处理

02.线程安全
    a.Send trait
        可以跨线程传递
        示例:Arc<T>: Send
        编译期检查
        类型系统保证
    b.Sync trait
        可以跨线程共享引用
        示例:&T: Send if T: Sync
        线程安全
        自动推导
    c.编译器检查
        防止数据竞争
        示例:Rc<T>不是Send
        类型安全
        编译期保证
    d.unsafe实现
        自定义Send/Sync
        示例:unsafe impl Send for MyType { }
        小心使用
        充分理由

03.线程局部存储
    a.thread_local!宏
        线程私有数据
        示例:thread_local!(static FOO: RefCell<u32> = RefCell::new(1));
        每线程独立
        无竞争
    b.访问方式
        with方法
        示例:FOO.with(|f| *f.borrow_mut() += 1);
        闭包访问
        安全封装
    c.使用场景
        线程上下文
        示例:请求ID、日志上下文
        避免传参
        性能优化
    d.注意事项
        初始化开销
        示例:每线程初始化
        内存占用
        谨慎使用

04.线程池
    a.rayon库
        数据并行
        示例:use rayon::prelude::*; vec.par_iter()
        自动并行
        简单易用
    b.threadpool库
        任务队列
        示例:pool.execute(|| { work(); });
        控制线程数
        复用线程
    c.使用场景
        批量任务
        示例:并行处理
        性能提升
        资源控制
    d.配置
        线程数
        示例:根据CPU核心数
        队列大小
        性能调优

05.线程同步
    a.Barrier
        等待所有线程
        示例:barrier.wait();
        同步点
        协调执行
    b.Condvar
        条件变量
        示例:cvar.wait(guard);
        等待通知
        线程协作
    c.Once
        一次初始化
        示例:INIT.call_once(|| { setup(); });
        线程安全
        惰性初始化
    d.使用建议
        选择合适工具
        示例:简单用Barrier
        复杂用Condvar
        根据需求

2.2 消息传递

01.Channel基础
    a.创建channel
        mpsc::channel
        示例:let (tx, rx) = mpsc::channel();
        发送者接收者
        类型安全
    b.send方法
        发送消息
        示例:tx.send(value).unwrap();
        转移所有权
        可能失败
    c.recv方法
        接收消息
        示例:let msg = rx.recv().unwrap();
        阻塞等待
        返回Result
    d.try_recv
        非阻塞接收
        示例:match rx.try_recv() { }
        立即返回
        轮询模式

02.多生产者
    a.clone发送者
        多个发送者
        示例:let tx2 = tx.clone();
        mpsc模式
        并发发送
    b.所有发送者drop
        接收者recv返回错误
        示例:通道关闭
        优雅退出
        资源清理
    c.使用场景
        多线程生产
        示例:工作线程发送结果
        汇总处理
        常用模式
    d.注意事项
        发送者生命周期
        示例:确保适时drop
        避免死锁
        设计考虑

03.Channel类型
    a.无界channel
        mpsc::channel
        示例:无限缓冲
        可能内存问题
        默认选择
    b.有界channel
        mpsc::sync_channel
        示例:sync_channel(10)
        限制缓冲
        背压控制
    c.选择建议
        默认无界
        示例:需要控制用有界
        内存考虑
        性能权衡
    d.阻塞行为
        有界满时阻塞
        示例:send阻塞
        流量控制
        系统稳定

04.迭代器模式
    a.for循环接收
        迭代channel
        示例:for msg in rx { }
        简洁语法
        自动结束
    b.iter方法
        显式迭代器
        示例:rx.iter()
        阻塞迭代
        通道关闭结束
    c.try_iter
        非阻塞迭代
        示例:for msg in rx.try_iter() { }
        当前消息
        不等待
    d.使用场景
        消息循环
        示例:事件处理
        简化代码
        清晰逻辑

05.消息传递模式
    a.工作队列
        任务分发
        示例:主线程发送,工作线程接收
        负载均衡
        并行处理
    b.扇出
        一对多
        示例:broadcast消息
        多个接收者
        需要第三方库
    c.扇入
        多对一
        示例:mpsc天然支持
        结果汇总
        常用模式
    d.请求响应
        双向通信
        示例:发送请求channel
        回复channel
        RPC模式

2.3 共享状态并发

01.Mutex互斥锁
    a.创建Mutex
        Mutex::new
        示例:let m = Mutex::new(5);
        包装数据
        互斥访问
    b.lock方法
        获取锁
        示例:let mut num = m.lock().unwrap();
        阻塞等待
        返回MutexGuard
    c.自动释放
        Guard离开作用域
        示例:RAII模式
        自动解锁
        防止死锁
    d.poisoning
        panic时标记
        示例:lock返回Result
        错误处理
        数据一致性

02.RwLock读写锁
    a.读写分离
        多读一写
        示例:let lock = RwLock::new(5);
        并发读
        互斥写
    b.read方法
        获取读锁
        示例:let r = lock.read().unwrap();
        共享访问
        不阻塞其他读
    c.write方法
        获取写锁
        示例:let mut w = lock.write().unwrap();
        独占访问
        阻塞所有
    d.使用场景
        读多写少
        示例:配置缓存
        性能优化
        并发提升

03.Arc<Mutex<T>>模式
    a.跨线程共享
        Arc提供共享
        示例:let counter = Arc::new(Mutex::new(0));
        Mutex提供可变
        常用组合
    b.使用示例
        多线程计数器
        示例:*counter.lock().unwrap() += 1;
        线程安全
        简单直接
    c.注意事项
        锁粒度
        示例:减少临界区
        避免死锁
        性能考虑
    d.替代方案
        原子类型
        示例:简单计数用AtomicUsize
        无锁
        更高效

04.死锁问题
    a.死锁条件
        循环等待
        示例:线程A等B,B等A
        互斥持有
        资源竞争
    b.避免策略
        锁顺序一致
        示例:总是先锁A再锁B
        超时机制
        try_lock
    c.检测工具
        parking_lot
        示例:死锁检测
        调试辅助
        开发工具
    d.设计建议
        减少锁
        示例:消息传递
        细粒度锁
        无锁结构

05.并发数据结构
    a.DashMap
        并发HashMap
        示例:use dashmap::DashMap;
        分片锁
        高性能
    b.crossbeam
        无锁队列
        示例:crossbeam::queue
        lock-free
        高并发
    c.parking_lot
        优化锁
        示例:更快的Mutex
        性能提升
        替代标准库
    d.选择建议
        简单用标准库
        示例:性能要求高用第三方
        根据场景
        实测对比

2.4 原子操作

01.原子类型
    a.AtomicBool
        原子布尔
        示例:AtomicBool::new(false)
        无锁
        线程安全
    b.AtomicUsize/AtomicIsize
        原子整数
        示例:AtomicUsize::new(0)
        计数器
        常用类型
    c.AtomicPtr
        原子指针
        示例:AtomicPtr::new(ptr)
        无锁数据结构
        高级用法
    d.使用场景
        简单共享状态
        示例:标志位、计数器
        性能关键
        无锁需求

02.原子操作
    a.load
        读取值
        示例:counter.load(Ordering::Relaxed)
        内存顺序
        原子读
    b.store
        写入值
        示例:flag.store(true, Ordering::Release)
        原子写
        内存顺序
    c.fetch_add
        原子加
        示例:counter.fetch_add(1, Ordering::SeqCst)
        返回旧值
        常用操作
    d.compare_exchange
        CAS操作
        示例:compare_and_swap
        无锁算法
        高级操作

03.内存顺序
    a.Relaxed
        最弱保证
        示例:Ordering::Relaxed
        无同步
        最快
    b.Acquire/Release
        获取释放
        示例:配对使用
        同步点
        常用顺序
    c.SeqCst
        顺序一致
        示例:Ordering::SeqCst
        最强保证
        最慢
    d.选择建议
        默认SeqCst
        示例:性能关键优化
        理解语义
        小心使用

04.无锁编程
    a.优势
        无阻塞
        示例:高并发性能
        避免死锁
        可扩展性
    b.挑战
        复杂性
        示例:ABA问题
        内存顺序
        难以调试
    c.使用场景
        性能关键
        示例:高频操作
        简单数据结构
        专家领域
    d.建议
        优先有锁
        示例:简单可靠
        必要时无锁
        充分测试

05.并发最佳实践
    a.优先消息传递
        而非共享状态
        示例:channel通信
        更安全
        易理解
    b.最小化共享
        减少锁范围
        示例:局部变量
        降低竞争
        提高性能
    c.使用高层抽象
        rayon、crossbeam
        示例:并行迭代器
        简化开发
        避免错误
    d.充分测试
        并发bug难复现
        示例:压力测试
        多次运行
        工具辅助

2.5 并发模式

01.生产者消费者
    a.channel实现
        队列传递
        示例:生产者send,消费者recv
        解耦
        常用模式
    b.多生产者
        clone发送者
        示例:多线程生产
        并发生产
        汇总消费
    c.多消费者
        需要特殊处理
        示例:使用Arc<Mutex<Receiver>>
        负载均衡
        复杂实现
    d.有界队列
        背压控制
        示例:sync_channel
        流量控制
        系统稳定

02.工作窃取
    a.rayon实现
        自动负载均衡
        示例:par_iter()
        高效并行
        简单使用
    b.原理
        空闲线程窃取任务
        示例:动态调度
        负载均衡
        性能优化
    c.使用场景
        数据并行
        示例:批量处理
        CPU密集
        可分割任务
    d.优势
        自动优化
        示例:无需手动分配
        高效利用
        简化开发

03.Actor模型
    a.消息驱动
        异步消息
        示例:actix框架
        隔离状态
        并发安全
    b.邮箱
        消息队列
        示例:每个actor独立
        顺序处理
        无锁
    c.使用场景
        复杂状态
        示例:游戏服务器
        高并发
        分布式
    d.框架
        actix、tokio
        示例:成熟生态
        生产就绪
        功能丰富

04.Fork-Join
    a.分治策略
        递归分解
        示例:归并排序
        并行计算
        合并结果
    b.rayon支持
        join函数
        示例:rayon::join(|| left, || right)
        自动并行
        简单API
    c.使用场景
        递归算法
        示例:快排、树遍历
        可分割
        独立子任务
    d.性能
        减少开销
        示例:粒度控制
        避免过度分割
        阈值设置

3 错误处理

3.1 Result类型

01.Result基础
    a.定义
        enum Result<T, E> { Ok(T), Err(E) }
        示例:Result<i32, String>
        成功或失败
        类型安全
    b.返回Result
        可能失败的函数
        示例:fn parse(s: &str) -> Result<i32, ParseIntError>
        显式错误
        强制处理
    c.unwrap
        取值或panic
        示例:let x = result.unwrap();
        开发调试
        生产慎用
    d.expect
        带消息panic
        示例:result.expect("failed to parse")
        错误信息
        调试友好

02.Result处理
    a.match模式
        显式处理
        示例:match result { Ok(v) => {}, Err(e) => {} }
        完整控制
        清晰逻辑
    b.if let
        简化单分支
        示例:if let Ok(v) = result { }
        简洁语法
        常用模式
    c.unwrap_or
        提供默认值
        示例:result.unwrap_or(0)
        安全取值
        避免panic
    d.unwrap_or_else
        惰性默认值
        示例:result.unwrap_or_else(|e| default())
        延迟计算
        性能优化

03.Result组合子
    a.map
        转换Ok值
        示例:result.map(|x| x * 2)
        保持Err
        链式调用
    b.and_then
        链式Result
        示例:result.and_then(|x| parse(x))
        扁平化
        避免嵌套
    c.or
        提供备选
        示例:result1.or(result2)
        失败回退
        组合多个
    d.map_err
        转换错误
        示例:result.map_err(|e| MyError::from(e))
        错误转换
        统一错误类型

04.?运算符
    a.错误传播
        简化返回
        示例:let x = parse(s)?;
        自动传播
        简洁语法
    b.工作原理
        Err早返回
        示例:等价于match
        语法糖
        可读性
    c.类型转换
        自动From转换
        示例:实现From trait
        错误兼容
        灵活使用
    d.使用限制
        返回Result或Option
        示例:main函数特殊处理
        类型匹配
        编译检查

05.Result最佳实践
    a.返回Result
        而非panic
        示例:库函数返回Result
        调用者决策
        更灵活
    b.使用?运算符
        简化代码
        示例:避免match嵌套
        可读性
        惯用模式
    c.自定义错误
        语义化错误
        示例:定义Error enum
        清晰意图
        易于处理
    d.文档说明
        标注错误情况
        示例:/// # Errors
        用户指导
        API清晰

3.2 Option类型

01.Option基础
    a.定义
        enum Option<T> { Some(T), None }
        示例:Option<i32>
        可能无值
        无空指针
    b.使用场景
        可选值
        示例:查找可能失败
        避免null
        类型安全
    c.unwrap
        取值或panic
        示例:opt.unwrap()
        确定有值时
        小心使用
    d.expect
        带消息panic
        示例:opt.expect("no value")
        调试信息
        开发辅助

02.Option处理
    a.match模式
        完整处理
        示例:match opt { Some(v) => {}, None => {} }
        显式逻辑
        清晰控制
    b.if let
        简化处理
        示例:if let Some(v) = opt { }
        简洁语法
        常用模式
    c.unwrap_or
        默认值
        示例:opt.unwrap_or(0)
        安全取值
        避免panic
    d.unwrap_or_default
        类型默认值
        示例:opt.unwrap_or_default()
        需要Default trait
        简化代码

03.Option组合子
    a.map
        转换Some值
        示例:opt.map(|x| x * 2)
        保持None
        链式调用
    b.and_then
        链式Option
        示例:opt.and_then(|x| find(x))
        扁平化
        避免嵌套
    c.or
        提供备选
        示例:opt1.or(opt2)
        None时使用
        组合多个
    d.filter
        条件过滤
        示例:opt.filter(|x| x > 0)
        转None
        条件判断

04.Option与Result
    a.ok_or
        Option转Result
        示例:opt.ok_or("error")
        提供错误
        类型转换
    b.ok
        Result转Option
        示例:result.ok()
        丢弃错误
        简化处理
    c.transpose
        嵌套转换
        示例:Option<Result<T, E>> <-> Result<Option<T>, E>
        类型变换
        高级用法
    d.选择使用
        可选值用Option
        示例:错误用Result
        语义清晰
        类型指导

05.Option最佳实践
    a.优先Option
        而非特殊值
        示例:不用-1表示无
        类型安全
        明确语义
    b.使用组合子
        而非unwrap
        示例:map、and_then
        安全处理
        函数式
    c.?运算符
        简化传播
        示例:let x = opt?;
        简洁代码
        惯用模式
    d.文档说明
        标注None情况
        示例:/// Returns None if...
        用户指导
        API清晰

3.3 自定义错误类型

01.Error trait
    a.std::error::Error
        错误trait
        示例:impl Error for MyError { }
        标准接口
        错误处理
    b.source方法
        错误链
        示例:fn source(&self) -> Option<&(dyn Error + 'static)>
        底层错误
        追踪原因
    c.Display实现
        错误消息
        示例:impl Display for MyError { }
        用户友好
        必须实现
    d.Debug实现
        调试信息
        示例:#[derive(Debug)]
        开发辅助
        通常派生

02.枚举错误
    a.定义错误enum
        多种错误
        示例:enum MyError { Io(io::Error), Parse(ParseError) }
        分类错误
        类型安全
    b.From实现
        错误转换
        示例:impl From<io::Error> for MyError { }
        自动转换
        ?运算符支持
    c.match处理
        不同错误不同处理
        示例:match err { MyError::Io(e) => {}, }
        精确控制
        灵活处理
    d.使用场景
        库错误
        示例:统一错误类型
        API设计
        错误分类

03.错误上下文
    a.添加上下文
        丰富错误信息
        示例:Err(format!("failed to read {}: {}", path, e))
        调试友好
        定位问题
    b.错误链
        保留原始错误
        示例:source方法
        追踪根因
        完整信息
    c.backtrace
        堆栈跟踪
        示例:Error::backtrace
        调试工具
        定位代码
    d.最佳实践
        保留足够信息
        示例:文件名、行号
        便于调试
        用户友好

04.Result别名
    a.类型别名
        简化签名
        示例:type Result<T> = std::result::Result<T, MyError>;
        统一错误
        简洁代码
    b.模块级别
        crate内使用
        示例:pub type Result<T> = ...;
        一致性
        易维护
    c.标准库模式
        io::Result
        示例:std::io::Result<T>
        常见模式
        学习参考
    d.使用建议
        库定义别名
        示例:导出给用户
        API简化
        类型清晰

05.错误设计原则
    a.语义化
        清晰错误类型
        示例:FileNotFound vs GenericError
        易理解
        易处理
    b.可恢复性
        区分可恢复和不可恢复
        示例:Result vs panic
        调用者决策
        灵活性
    c.信息完整
        足够调试信息
        示例:包含上下文
        定位问题
        用户友好
    d.向后兼容
        错误类型稳定
        示例:添加变体谨慎
        API稳定性
        版本管理

3.4 错误处理库

01.anyhow库
    a.动态错误
        Box<dyn Error>
        示例:use anyhow::Result;
        简化应用
        灵活错误
    b.context方法
        添加上下文
        示例:.context("failed to read config")?
        链式调用
        丰富信息
    c.使用场景
        应用程序
        示例:不需要精确错误类型
        快速开发
        简化代码
    d.优势
        简单易用
        示例:减少样板代码
        backtrace支持
        开发效率

02.thiserror库
    a.派生宏
        自动实现Error
        示例:#[derive(Error, Debug)]
        减少代码
        类型安全
    b.错误消息
        #[error("...")]
        示例:格式化消息
        声明式
        清晰简洁
    c.from属性
        自动From实现
        示例:#[from]
        错误转换
        简化代码
    d.使用场景
        库开发
        示例:精确错误类型
        API设计
        类型安全

03.anyhow vs thiserror
    a.应用vs库
        anyhow用于应用
        示例:thiserror用于库
        不同场景
        选择建议
    b.类型擦除
        anyhow擦除类型
        示例:thiserror保留类型
        灵活vs精确
        权衡选择
    c.组合使用
        库用thiserror
        示例:应用用anyhow
        最佳实践
        生态协作
    d.迁移
        库到应用
        示例:thiserror -> anyhow
        类型转换
        兼容性

04.错误处理模式
    a.快速失败
        遇错即返
        示例:?运算符
        简化代码
        常用模式
    b.错误恢复
        尝试修复
        示例:重试、降级
        提高可用性
        复杂逻辑
    c.错误聚合
        收集多个错误
        示例:验证多个字段
        完整反馈
        用户体验
    d.错误转换
        统一错误类型
        示例:From trait
        API一致性
        简化处理

05.panic vs Result
    a.panic使用
        不可恢复错误
        示例:程序bug
        开发调试
        快速失败
    b.Result使用
        可恢复错误
        示例:用户输入错误
        调用者处理
        生产环境
    c.选择指导
        库返回Result
        示例:应用可以panic
        API设计
        用户体验
    d.unwrap使用
        原型开发
        示例:确定不会失败
        生产替换
        代码审查

3.5 错误处理最佳实践

01.库设计
    a.返回Result
        不要panic
        示例:让调用者决定
        灵活性
        可测试性
    b.自定义错误
        使用thiserror
        示例:清晰错误类型
        类型安全
        易于处理
    c.文档化
        标注错误情况
        示例:/// # Errors
        用户指导
        API清晰
    d.稳定性
        错误类型稳定
        示例:谨慎添加变体
        向后兼容
        版本管理

02.应用设计
    a.使用anyhow
        简化错误处理
        示例:统一Result类型
        快速开发
        减少样板
    b.添加上下文
        context方法
        示例:丰富错误信息
        便于调试
        用户友好
    c.日志记录
        记录错误
        示例:log::error!
        问题追踪
        运维支持
    d.用户反馈
        友好错误消息
        示例:避免技术细节
        用户体验
        可操作建议

03.错误传播
    a.使用?运算符
        简化代码
        示例:避免match嵌套
        可读性
        惯用模式
    b.错误转换
        实现From
        示例:自动转换
        类型兼容
        简化调用
    c.保留信息
        错误链
        示例:source方法
        追踪根因
        完整上下文
    d.适时处理
        就近处理
        示例:有足够信息时
        避免过早
        合理层次

04.测试
    a.错误路径测试
        测试失败情况
        示例:#[should_panic]
        完整覆盖
        健壮性
    b.错误类型检查
        验证错误类型
        示例:match具体错误
        精确测试
        类型安全
    c.错误消息
        验证消息内容
        示例:assert_eq!(err.to_string(), ...)
        用户体验
        文档一致
    d.边界条件
        测试边界
        示例:空输入、大数据
        发现问题
        质量保证

4 异步编程

4.1 async/await基础

01.async函数
    a.async fn
        异步函数
        示例:async fn foo() -> i32 { 42 }
        返回Future
        惰性执行
    b.await关键字
        等待Future
        示例:let result = foo().await;
        挂起执行
        非阻塞
    c.async块
        异步代码块
        示例:let fut = async { do_work().await };
        创建Future
        灵活使用
    d.执行器
        运行Future
        示例:tokio::runtime
        驱动执行
        必需组件

02.Future trait
    a.定义
        trait Future { type Output; fn poll(...) -> Poll<Output> }
        示例:异步计算
        状态机
        核心抽象
    b.Poll类型
        Ready或Pending
        示例:Poll::Ready(value)
        完成状态
        继续等待
    c.poll方法
        推进Future
        示例:executor调用
        状态转换
        手动实现
    d.Pin
        固定内存
        示例:Pin<&mut Self>
        自引用
        安全保证

03.async运行时
    a.tokio
        最流行运行时
        示例:#[tokio::main]
        功能丰富
        生产就绪
    b.async-std
        标准库风格
        示例:async_std::task::block_on
        简单易用
        替代选择
    c.smol
        轻量运行时
        示例:小巧高效
        嵌入式
        特定场景
    d.选择建议
        默认tokio
        示例:生态完善
        社区活跃
        文档丰富

04.异步任务
    a.spawn
        创建任务
        示例:tokio::spawn(async { })
        并发执行
        返回JoinHandle
    b.join
        等待完成
        示例:handle.await
        获取结果
        错误处理
    c.并发执行
        多个await
        示例:tokio::join!(fut1, fut2)
        同时等待
        提高效率
    d.select
        竞争执行
        示例:tokio::select!
        第一个完成
        取消其他

05.异步vs同步
    a.性能
        高并发场景
        示例:IO密集
        资源利用
        吞吐量
    b.复杂性
        异步更复杂
        示例:生命周期、Pin
        学习曲线
        调试困难
    c.使用场景
        网络服务
        示例:Web服务器
        IO密集
        高并发
    d.选择建议
        IO密集用异步
        示例:CPU密集用同步
        根据场景
        实测验证

4.2 异步IO

01.tokio IO
    a.TcpListener
        异步TCP服务器
        示例:TcpListener::bind("127.0.0.1:8080").await
        非阻塞
        高性能
    b.TcpStream
        异步TCP连接
        示例:stream.read(&mut buf).await
        读写操作
        异步IO
    c.文件IO
        tokio::fs
        示例:tokio::fs::read("file.txt").await
        异步文件
        避免阻塞
    d.缓冲IO
        BufReader/BufWriter
        示例:tokio::io::BufReader
        提高效率
        批量操作

02.异步读写
    a.AsyncRead trait
        异步读
        示例:impl AsyncRead
        poll_read方法
        非阻塞读
    b.AsyncWrite trait
        异步写
        示例:impl AsyncWrite
        poll_write方法
        非阻塞写
    c.辅助方法
        read_to_end、write_all
        示例:便利方法
        简化操作
        常用模式
    d.超时
        timeout函数
        示例:tokio::time::timeout
        避免永久等待
        错误处理

03.异步网络
    a.HTTP客户端
        reqwest库
        示例:reqwest::get(url).await
        异步请求
        简单易用
    b.HTTP服务器
        axum、actix-web
        示例:高性能框架
        路由处理
        中间件
    c.WebSocket
        tokio-tungstenite
        示例:异步WebSocket
        双向通信
        实时应用
    d.gRPC
        tonic库
        示例:异步RPC
        高性能
        类型安全

04.异步流
    a.Stream trait
        异步迭代器
        示例:impl Stream
        多个值
        异步生成
    b.StreamExt
        扩展方法
        示例:map、filter
        组合操作
        函数式
    c.创建Stream
        stream!宏
        示例:async_stream::stream!
        简化创建
        生成器语法
    d.使用场景
        事件流
        示例:消息队列
        数据流
        实时处理

05.异步通道
    a.mpsc
        多生产者单消费者
        示例:tokio::sync::mpsc
        异步消息
        任务通信
    b.oneshot
        一次性通道
        示例:tokio::sync::oneshot
        请求响应
        简单场景
    c.broadcast
        广播通道
        示例:tokio::sync::broadcast
        多消费者
        事件分发
    d.watch
        状态通知
        示例:tokio::sync::watch
        最新值
        状态同步

4.3 异步同步原语

01.异步Mutex
    a.tokio::sync::Mutex
        异步互斥锁
        示例:let guard = mutex.lock().await;
        非阻塞等待
        异步安全
    b.vs std::sync::Mutex
        异步vs同步
        示例:异步上下文用tokio
        避免阻塞
        性能考虑
    c.使用场景
        异步任务共享
        示例:跨await点
        状态保护
        并发控制
    d.注意事项
        锁粒度
        示例:减少持有时间
        避免死锁
        性能优化

02.异步RwLock
    a.读写锁
        多读一写
        示例:tokio::sync::RwLock
        异步读写
        并发优化
    b.read和write
        获取锁
        示例:lock.read().await
        非阻塞
        自动释放
    c.使用场景
        读多写少
        示例:配置缓存
        性能提升
        并发读
    d.性能
        比Mutex快
        示例:读操作并发
        适用场景
        权衡选择

03.异步Semaphore
    a.信号量
        限制并发数
        示例:Semaphore::new(10)
        资源控制
        流量限制
    b.acquire
        获取许可
        示例:let permit = sem.acquire().await
        等待可用
        自动释放
    c.使用场景
        限流
        示例:并发请求数
        资源池
        背压控制
    d.配置
        许可数
        示例:根据资源
        性能调优
        系统稳定

04.异步Barrier
    a.屏障
        同步点
        示例:Barrier::new(3)
        等待所有任务
        协调执行
    b.wait方法
        等待其他任务
        示例:barrier.wait().await
        同步执行
        阶段划分
    c.使用场景
        多任务协调
        示例:初始化完成
        测试同步
        并发控制
    d.注意事项
        任务数固定
        示例:动态任务慎用
        死锁风险
        设计考虑

05.异步Notify
    a.通知机制
        唤醒等待
        示例:Notify::new()
        事件通知
        简单高效
    b.notify_one
        唤醒一个
        示例:notify.notify_one()
        单任务通知
        精确控制
    c.notify_waiters
        唤醒所有
        示例:notify.notify_waiters()
        广播通知
        批量唤醒
    d.使用场景
        事件驱动
        示例:状态变化
        条件等待
        简单同步

4.4 异步模式

01.并发模式
    a.join
        等待所有
        示例:tokio::join!(fut1, fut2, fut3)
        并发执行
        全部完成
    b.try_join
        遇错即停
        示例:tokio::try_join!
        错误传播
        快速失败
    c.select
        竞争执行
        示例:tokio::select! { _ = fut1 => {}, _ = fut2 => {} }
        第一个完成
        取消其他
    d.spawn
        后台任务
        示例:tokio::spawn
        独立执行
        不等待

02.超时模式
    a.timeout
        限时等待
        示例:tokio::time::timeout(dur, fut).await
        避免永久等待
        错误处理
    b.sleep
        延迟执行
        示例:tokio::time::sleep(dur).await
        定时任务
        速率限制
    c.interval
        周期执行
        示例:tokio::time::interval(dur)
        定时器
        心跳检测
    d.使用场景
        网络请求
        示例:超时重试
        健康检查
        资源清理

03.取消模式
    a.CancellationToken
        取消信号
        示例:tokio_util::sync::CancellationToken
        优雅关闭
        任务取消
    b.select取消
        竞争取消
        示例:select! { _ = work => {}, _ = cancel => {} }
        响应取消
        清理资源
    c.Drop取消
        JoinHandle drop
        示例:自动取消
        资源管理
        RAII
    d.最佳实践
        检查取消
        示例:定期检查token
        及时响应
        优雅退出

04.重试模式
    a.简单重试
        循环重试
        示例:for i in 0..3 { if let Ok(r) = try_work().await { } }
        固定次数
        基本模式
    b.指数退避
        延迟递增
        示例:sleep(2^i * base_delay)
        避免雪崩
        系统友好
    c.重试库
        tokio-retry
        示例:配置策略
        灵活控制
        生产就绪
    d.使用场景
        网络请求
        示例:临时故障
        提高可用性
        用户体验

05.流处理模式
    a.缓冲
        buffer方法
        示例:stream.buffer_unordered(10)
        并发处理
        控制并发数
    b.批处理
        chunks方法
        示例:stream.chunks(100)
        批量操作
        提高效率
    c.过滤转换
        filter_map
        示例:stream.filter_map(|x| async move { })
        组合操作
        函数式
    d.错误处理
        try_for_each
        示例:处理错误
        优雅降级
        健壮性

4.5 异步最佳实践

01.性能优化
    a.避免阻塞
        不用std::sync
        示例:用tokio::sync
        保持异步
        性能关键
    b.批量操作
        减少await
        示例:join多个Future
        降低开销
        提高吞吐
    c.缓冲控制
        限制并发
        示例:Semaphore
        资源保护
        系统稳定
    d.零拷贝
        避免复制
        示例:Bytes类型
        性能优化
        内存效率

02.错误处理
    a.?运算符
        传播错误
        示例:let r = foo().await?;
        简洁代码
        惯用模式
    b.超时处理
        避免永久等待
        示例:timeout包装
        健壮性
        用户体验
    c.重试机制
        临时故障
        示例:指数退避
        提高可用性
        系统友好
    d.优雅降级
        部分失败
        示例:返回部分结果
        可用性
        用户体验

03.资源管理
    a.连接池
        复用连接
        示例:deadpool
        性能优化
        资源限制
    b.超时清理
        避免泄漏
        示例:timeout释放
        资源回收
        系统稳定
    c.优雅关闭
        取消任务
        示例:CancellationToken
        清理资源
        数据一致性
    d.监控指标
        性能监控
        示例:任务数、延迟
        问题发现
        性能调优

04.调试技巧
    a.日志
        异步日志
        示例:tracing库
        问题追踪
        性能分析
    b.tokio-console
        运行时监控
        示例:可视化任务
        调试工具
        性能分析
    c.测试
        tokio::test
        示例:异步测试
        单元测试
        集成测试
    d.错误追踪
        backtrace
        示例:错误上下文
        问题定位
        调试辅助

5 unsafe Rust

5.1 unsafe基础

01.unsafe关键字
    a.unsafe块
        不安全代码
        示例:unsafe { *raw_ptr }
        绕过检查
        程序员保证
    b.unsafe函数
        声明不安全
        示例:unsafe fn dangerous() { }
        调用需unsafe
        明确标记
    c.unsafe trait
        实现需unsafe
        示例:unsafe trait Foo { }
        安全约束
        编译器无法验证
    d.unsafe impl
        实现unsafe trait
        示例:unsafe impl Send for MyType { }
        程序员保证
        小心使用

02.unsafe超能力
    a.解引用裸指针
        *const T、*mut T
        示例:*raw_ptr
        无借用检查
        可能悬垂
    b.调用unsafe函数
        unsafe fn
        示例:调用FFI
        外部代码
        未检查
    c.访问可变静态
        static mut
        示例:修改全局变量
        数据竞争
        谨慎使用
    d.实现unsafe trait
        Send、Sync等
        示例:线程安全保证
        编译器信任
        正确性关键

03.何时使用unsafe
    a.FFI
        调用C代码
        示例:extern "C"
        必需unsafe
        边界清晰
    b.性能优化
        避免检查
        示例:跳过边界检查
        确定安全时
        微优化
    c.底层抽象
        实现安全抽象
        示例:Vec内部
        封装unsafe
        对外安全
    d.硬件交互
        内存映射IO
        示例:嵌入式
        直接访问
        特定场景

04.unsafe规则
    a.最小化范围
        尽量小的unsafe块
        示例:只包含必需代码
        减少风险
        易于审查
    b.封装
        提供安全接口
        示例:unsafe内部,安全API
        隐藏细节
        用户安全
    c.文档说明
        标注安全要求
        示例:/// # Safety
        使用约束
        审查依据
    d.充分测试
        覆盖边界
        示例:Miri工具
        发现问题
        质量保证

05.unsafe最佳实践
    a.避免使用
        优先安全代码
        示例:重新设计
        类型系统
        编译器帮助
    b.隔离unsafe
        独立模块
        示例:封装到函数
        限制影响
        清晰边界
    c.代码审查
        仔细检查
        示例:多人审查
        发现问题
        知识共享
    d.工具辅助
        Miri、Valgrind
        示例:检测UB
        自动化
        持续验证

5.2 裸指针

01.裸指针类型
    a.*const T
        不可变裸指针
        示例:let ptr: *const i32 = &x;
        只读访问
        可能悬垂
    b.*mut T
        可变裸指针
        示例:let ptr: *mut i32 = &mut x;
        读写访问
        无别名检查
    c.创建裸指针
        从引用转换
        示例:&x as *const i32
        安全创建
        使用需unsafe
    d.null指针
        std::ptr::null
        示例:let ptr = std::ptr::null::<i32>();
        空指针
        检查null

02.裸指针操作
    a.解引用
        *ptr
        示例:unsafe { *ptr }
        需unsafe块
        可能UB
    b.偏移
        offset方法
        示例:ptr.offset(1)
        指针运算
        边界检查
    c.读写
        read、write
        示例:ptr::read(ptr)
        避免drop
        移动语义
    d.比较
        ==、<等
        示例:ptr1 == ptr2
        地址比较
        安全操作

03.裸指针vs引用
    a.借用检查
        引用有检查
        示例:裸指针无检查
        编译期vs运行时
        安全性
    b.生命周期
        引用有生命周期
        示例:裸指针无生命周期
        编译器保证
        手动管理
    c.别名
        引用有别名规则
        示例:裸指针无限制
        数据竞争
        程序员保证
    d.使用场景
        引用优先
        示例:必要时裸指针
        类型系统
        安全第一

04.裸指针模式
    a.双向链表
        多个可变引用
        示例:prev和next指针
        借用检查限制
        unsafe实现
    b.自引用结构
        内部指针
        示例:Pin<Box<T>>
        固定内存
        异步Future
    c.类型擦除
        void指针
        示例:FFI传递
        泛型实现
        运行时类型
    d.内存池
        手动管理
        示例:对象池
        性能优化
        复用内存

05.裸指针安全
    a.空指针检查
        is_null方法
        示例:if !ptr.is_null() { }
        避免解引用null
        防御编程
    b.对齐检查
        is_aligned
        示例:确保对齐
        硬件要求
        UB避免
    c.边界检查
        手动验证
        示例:ptr < end_ptr
        数组访问
        内存安全
    d.生命周期管理
        确保有效
        示例:不超过数据生命周期
        悬垂指针
        内存安全

5.3 FFI外部函数接口

01.调用C函数
    a.extern声明
        声明外部函数
        示例:extern "C" { fn abs(input: i32) -> i32; }
        C ABI
        链接外部库
    b.调用
        unsafe块
        示例:unsafe { abs(-3) }
        无安全检查
        程序员保证
    c.链接库
        #[link]属性
        示例:#[link(name = "m")]
        指定库名
        链接器处理
    d.类型对应
        C类型映射
        示例:c_int、c_char
        std::os::raw
        ABI兼容

02.导出Rust函数
    a.#[no_mangle]
        禁止名称修饰
        示例:#[no_mangle] pub extern "C" fn call_from_c()
        C可见名称
        导出符号
    b.extern "C"
        C调用约定
        示例:pub extern "C"
        ABI兼容
        跨语言调用
    c.返回类型
        C兼容类型
        示例:i32、*const c_char
        避免Rust特有
        安全边界
    d.错误处理
        返回错误码
        示例:返回-1表示错误
        C风格
        无panic

03.类型转换
    a.基本类型
        直接映射
        示例:i32 <-> c_int
        ABI保证
        安全转换
    b.字符串
        CString、CStr
        示例:CString::new("hello")
        null结尾
        内存管理
    c.数组
        裸指针+长度
        示例:*const T, usize
        C数组
        手动管理
    d.结构体
        #[repr(C)]
        示例:C内存布局
        字段对齐
        互操作

04.内存管理
    a.所有权边界
        明确责任
        示例:谁分配谁释放
        避免泄漏
        文档说明
    b.Box::into_raw
        转移所有权
        示例:返回给C
        手动释放
        配对使用
    c.Box::from_raw
        重获所有权
        示例:从C接收
        自动释放
        unsafe操作
    d.内存泄漏
        忘记释放
        示例:std::mem::forget
        特殊场景
        谨慎使用

05.FFI最佳实践
    a.安全封装
        提供安全API
        示例:封装unsafe调用
        类型安全
        用户友好
    b.错误处理
        转换C错误
        示例:errno -> Result
        Rust风格
        类型安全
    c.文档说明
        标注安全要求
        示例:/// # Safety
        使用约束
        清晰边界
    d.测试
        集成测试
        示例:实际调用
        边界条件
        内存安全

5.4 内联汇编

01.asm!宏
    a.基本语法
        asm!指令
        示例:asm!("nop")
        内联汇编
        平台相关
    b.输入输出
        操作数
        示例:asm!("add {0}, {1}", in(reg) a, in(reg) b)
        寄存器分配
        数据传递
    c.选项
        options
        示例:options(nostack, nomem)
        编译器优化
        副作用声明
    d.使用场景
        性能关键
        示例:SIMD指令
        硬件特性
        极致优化

02.全局汇编
    a.global_asm!
        模块级汇编
        示例:global_asm!(".section .text")
        启动代码
        特殊段
    b.使用场景
        裸机编程
        示例:中断向量
        启动代码
        嵌入式
    c.注意事项
        平台相关
        示例:不可移植
        仔细测试
        文档说明
    d.替代方案
        优先Rust
        示例:必要时汇编
        可维护性
        可移植性

03.汇编最佳实践
    a.最小化使用
        优先Rust
        示例:编译器优化
        可维护性
        可移植性
    b.文档说明
        详细注释
        示例:指令作用
        寄存器使用
        副作用
    c.测试验证
        多平台测试
        示例:x86、ARM
        边界条件
        正确性
    d.性能测试
        实际测量
        示例:benchmark
        是否值得
        权衡复杂性

5.5 高级unsafe

01.未定义行为
    a.常见UB
        悬垂指针
        示例:use after free
        数据竞争
        对齐错误
    b.避免UB
        遵守规则
        示例:借用规则
        生命周期
        对齐要求
    c.检测工具
        Miri
        示例:运行时检测
        UB发现
        测试辅助
    d.文档参考
        Rustonomicon
        示例:UB定义
        安全要求
        学习资源

02.内存模型
    a.原子操作
        Ordering
        示例:Acquire/Release
        内存顺序
        并发正确性
    b.数据竞争
        未同步访问
        示例:多线程写
        UB来源
        避免方法
    c.happens-before
        顺序关系
        示例:同步点
        内存可见性
        并发语义
    d.fence
        内存屏障
        示例:std::sync::atomic::fence
        同步保证
        高级用法

03.类型双关
    a.transmute
        类型转换
        示例:std::mem::transmute
        位级转换
        极度危险
    b.union
        联合体
        示例:union MyUnion { }
        共享内存
        手动管理
    c.使用场景
        底层优化
        示例:避免复制
        FFI
        特殊需求
    d.安全替代
        优先其他方法
        示例:From/Into
        类型安全
        编译器检查

04.Pin和Unpin
    a.Pin<P>
        固定指针
        示例:Pin<Box<T>>
        防止移动
        自引用
    b.Unpin trait
        可移动
        示例:大多数类型
        自动实现
        安全保证
    c.使用场景
        async/await
        示例:Future自引用
        固定内存
        安全抽象
    d.!Unpin
        不可移动
        示例:PhantomPinned
        标记类型
        编译器检查

05.unsafe设计模式
    a.新类型包装
        封装unsafe
        示例:struct Safe(UnsafeType);
        安全接口
        隐藏细节
    b.不变量维护
        内部约束
        示例:保证有效性
        文档说明
        仔细验证
    c.恐慌安全
        异常安全
        示例:保持一致性
        清理资源
        RAII
    d.审查清单
        检查要点
        示例:UB、内存、并发
        代码审查
        质量保证

6 宏编程

6.1 声明宏

01.macro_rules!基础
    a.定义宏
        macro_rules! name
        示例:macro_rules! say_hello { () => { println!("Hello!"); } }
        模式匹配
        代码生成
    b.调用宏
        name!()
        示例:say_hello!()
        编译期展开
        零运行时开销
    c.宏展开
        编译器处理
        示例:cargo expand查看
        代码替换
        调试工具
    d.使用场景
        减少重复
        示例:DSL、代码生成
        编译期计算
        类型安全

02.模式匹配
    a.匹配语法
        ( pattern ) => { expansion }
        示例:($x:expr) => { $x + 1 }
        多个分支
        优先匹配
    b.片段类型
        expr、stmt、ty等
        示例:$name:ident
        类型约束
        语法正确
    c.重复
        $(...)*、$(...)+
        示例:$($x:expr),*
        可变参数
        列表处理
    d.分隔符
        ,、;等
        示例:$($x:expr),+
        语法要求
        清晰结构

03.片段类型
    a.ident
        标识符
        示例:$name:ident
        变量名
        函数名
    b.expr
        表达式
        示例:$value:expr
        任意表达式
        最常用
    c.ty
        类型
        示例:$t:ty
        类型参数
        泛型
    d.其他类型
        stmt、pat、block等
        示例:$s:stmt
        不同语法元素
        灵活组合

04.宏卫生
    a.变量捕获
        避免冲突
        示例:宏内变量独立
        作用域隔离
        安全性
    b.标识符透明
        $crate
        示例:$crate::module
        路径解析
        跨crate
    c.使用建议
        避免捕获外部
        示例:明确参数
        可预测
        减少意外
    d.调试
        cargo expand
        示例:查看展开
        理解行为
        问题定位

05.声明宏模式
    a.可变参数
        重复模式
        示例:vec![1, 2, 3]
        灵活参数
        常用模式
    b.递归宏
        自我调用
        示例:TT muncher
        复杂处理
        高级技巧
    c.内部规则
        @标记
        示例:辅助规则
        模块化
        可维护
    d.DSL
        领域语言
        示例:自定义语法
        表达力
        类型安全

6.2 过程宏

01.过程宏类型
    a.派生宏
        #[derive(MyMacro)]
        示例:自动实现trait
        代码生成
        最常用
    b.属性宏
        #[my_macro]
        示例:修改项
        元编程
        灵活强大
    c.函数式宏
        my_macro!(...)
        示例:类似声明宏
        完全控制
        复杂逻辑
    d.使用场景
        代码生成
        示例:序列化、ORM
        减少样板
        类型安全

02.派生宏
    a.定义
        proc-macro crate
        示例:#[proc_macro_derive(MyTrait)]
        独立crate
        编译期执行
    b.TokenStream
        输入输出
        示例:解析和生成
        语法树
        代码操作
    c.syn和quote
        解析和生成
        示例:syn::parse、quote!
        辅助库
        简化开发
    d.实现示例
        自动Debug
        示例:派生宏实现
        代码生成
        学习参考

03.属性宏
    a.定义
        #[proc_macro_attribute]
        示例:修改函数、结构体
        元数据
        代码转换
    b.参数
        属性参数
        示例:#[route(GET, "/")]
        配置宏
        灵活控制
    c.使用场景
        框架集成
        示例:Web路由
        AOP
        代码注入
    d.实现
        解析属性
        示例:修改item
        生成代码
        组合原有

04.函数式宏
    a.定义
        #[proc_macro]
        示例:类似macro_rules!
        完全控制
        复杂逻辑
    b.与声明宏区别
        更强大
        示例:完整语法树
        类型检查
        错误提示
    c.使用场景
        DSL
        示例:SQL、HTML
        复杂语法
        编译期验证
    d.实现
        解析TokenStream
        示例:自定义语法
        生成代码
        错误处理

05.过程宏开发
    a.项目结构
        独立crate
        示例:proc-macro = true
        依赖syn、quote
        标准布局
    b.syn库
        解析Rust
        示例:DeriveInput
        语法树
        模式匹配
    c.quote库
        生成代码
        示例:quote! { ... }
        插值
        类型安全
    d.测试
        trybuild
        示例:编译测试
        错误消息
        回归测试

6.3 宏最佳实践

01.设计原则
    a.清晰语法
        直观易用
        示例:类似Rust语法
        学习成本
        用户体验
    b.错误提示
        友好错误
        示例:compile_error!
        定位问题
        调试辅助
    c.文档说明
        使用示例
        示例:/// 宏文档
        参数说明
        用户指导
    d.测试覆盖
        各种情况
        示例:正常、错误
        边界条件
        质量保证

02.性能考虑
    a.编译时间
        宏展开开销
        示例:复杂宏慢
        权衡使用
        优化策略
    b.代码膨胀
        生成代码量
        示例:泛型单态化
        二进制大小
        控制生成
    c.增量编译
        影响缓存
        示例:宏改变重编译
        开发效率
        设计考虑
    d.优化建议
        简化宏
        示例:减少生成
        缓存结果
        性能测试

03.调试技巧
    a.cargo expand
        查看展开
        示例:理解生成
        问题定位
        学习工具
    b.编译错误
        定位问题
        示例:错误位置
        语法检查
        类型错误
    c.println调试
        过程宏
        示例:打印TokenStream
        理解输入
        开发辅助
    d.单元测试
        测试宏
        示例:trybuild
        自动化
        回归防护

04.常见陷阱
    a.卫生问题
        变量捕获
        示例:意外覆盖
        作用域
        命名冲突
    b.递归限制
        宏递归深度
        示例:编译器限制
        设计考虑
        替代方案
    c.类型推导
        宏内类型
        示例:需要标注
        编译器限制
        显式类型
    d.错误传播
        宏内错误
        示例:难以定位
        错误处理
        用户体验

7 高级特性

7.1 高级Trait

01.关联类型进阶
    a.泛型关联类型
        GAT特性
        示例:type Item<'a>;
        高级抽象
        灵活设计
    b.默认关联类型
        提供默认
        示例:type Item = i32;
        简化实现
        可覆盖
    c.约束关联类型
        where子句
        示例:where Self::Item: Display
        类型约束
        灵活组合
    d.使用场景
        迭代器
        示例:lending iterator
        高级模式
        类型设计

02.高阶trait约束
    a.HRTB
        for<'a>语法
        示例:for<'a> F: Fn(&'a str)
        任意生命周期
        高级约束
    b.使用场景
        闭包约束
        示例:接受任意生命周期
        灵活API
        类型系统
    c.Fn trait族
        Fn、FnMut、FnOnce
        示例:高阶约束
        闭包类型
        灵活设计
    d.实现技巧
        理解语义
        示例:生命周期关系
        编译器推导
        类型安全

03.特化
    a.min_specialization
        特化实现
        示例:为特定类型优化
        性能优化
        实验特性
    b.default impl
        默认实现
        示例:可被覆盖
        代码复用
        灵活扩展
    c.使用场景
        性能关键
        示例:SIMD优化
        特定类型
        高级优化
    d.注意事项
        不稳定特性
        示例:需nightly
        谨慎使用
        未来变化

04.负trait实现
    a.!Trait语法
        否定实现
        示例:impl !Send for MyType
        标记不满足
        类型约束
    b.使用场景
        标记类型
        示例:单线程类型
        编译器检查
        安全保证
    c.自动trait
        Send、Sync等
        示例:自动推导
        手动覆盖
        特殊需求
    d.注意事项
        不稳定特性
        示例:需nightly
        谨慎使用
        替代方案

05.trait别名
    a.定义别名
        trait MyTrait = Trait1 + Trait2
        示例:组合trait
        简化约束
        可读性
    b.使用场景
        复杂约束
        示例:多个trait组合
        API简化
        类型清晰
    c.与类型别名
        不同概念
        示例:trait vs type
        各有用途
        合理使用
    d.限制
        不稳定特性
        示例:需nightly
        替代方案
        where子句

7.2 高级类型

01.类型投影
    a.<T as Trait>::Type
        完全限定
        示例:访问关联类型
        消除歧义
        明确指定
    b.使用场景
        多个trait
        示例:同名关联类型
        类型推导
        明确意图
    c.约束
        where子句
        示例:where <T as Iterator>::Item: Display
        灵活约束
        类型安全
    d.实践
        API设计
        示例:清晰类型
        避免歧义
        可维护性

02.存在类型
    a.impl Trait
        存在类型
        示例:fn foo() -> impl Trait
        隐藏具体类型
        简化签名
    b.参数位置
        接受impl Trait
        示例:fn bar(x: impl Trait)
        泛型语法糖
        简洁代码
    c.返回位置
        返回impl Trait
        示例:返回闭包
        隐藏类型
        灵活实现
    d.限制
        单一具体类型
        示例:不能返回不同类型
        编译期确定
        设计考虑

03.类型别名impl Trait
    a.TAIT特性
        type Foo = impl Trait;
        示例:定义存在类型
        模块化
        实验特性
    b.使用场景
        复杂返回类型
        示例:异步函数
        简化签名
        隐藏细节
    c.约束
        trait约束
        示例:impl Trait + Send
        灵活组合
        类型安全
    d.注意事项
        不稳定特性
        示例:需nightly
        未来标准化
        谨慎使用

04.Never类型
    a.!类型
        永不返回
        示例:fn exit() -> !
        类型系统底类型
        可转任意类型
    b.使用场景
        panic、exit
        示例:发散函数
        无限循环
        类型推导
    c.转换
        !可转任意类型
        示例:let x: i32 = panic!();
        类型系统
        灵活性
    d.实践
        错误处理
        示例:不可达分支
        类型安全
        编译器优化

05.动态大小类型
    a.DST概念
        编译期大小未知
        示例:str、[T]、dyn Trait
        必须间接使用
        引用或Box
    b.Sized trait
        标记固定大小
        示例:默认T: Sized
        编译器自动
        可选退出
    c.?Sized
        允许DST
        示例:fn foo<T: ?Sized>(x: &T)
        灵活参数
        trait对象
    d.使用场景
        泛型函数
        示例:接受str和String
        API灵活性
        类型设计

7.3 高级生命周期

01.生命周期子类型
    a.'a: 'b
        'a至少和'b长
        示例:约束关系
        类型系统
        编译器检查
    b.使用场景
        复杂引用
        示例:嵌套结构
        约束关系
        类型安全
    c.协变逆变
        生命周期变化
        示例:&'a T协变
        类型理论
        高级概念
    d.实践
        API设计
        示例:灵活约束
        类型推导
        编译器辅助

02.生命周期边界
    a.T: 'a
        T包含的引用至少活'a
        示例:约束类型
        生命周期传播
        类型安全
    b.使用场景
        泛型约束
        示例:存储引用
        生命周期关系
        编译器检查
    c.where子句
        复杂约束
        示例:where T: 'a + Display
        清晰表达
        可读性
    d.实践
        结构体
        示例:包含引用
        生命周期管理
        类型设计

03.高阶生命周期
    a.for<'a>
        任意生命周期
        示例:for<'a> F: Fn(&'a str)
        HRTB
        高级约束
    b.使用场景
        闭包trait
        示例:灵活约束
        类型系统
        高级API
    c.实现
        编译器处理
        示例:自动推导
        类型检查
        安全保证
    d.调试
        理解错误
        示例:生命周期不匹配
        编译器提示
        学习资源

04.生命周期省略进阶
    a.复杂场景
        多个引用
        示例:方法返回
        省略规则
        编译器推导
    b.显式标注
        消除歧义
        示例:明确意图
        可读性
        维护性
    c.最佳实践
        优先省略
        示例:必要时标注
        简洁代码
        清晰逻辑
    d.常见错误
        生命周期过长
        示例:不必要的'static
        设计问题
        重新思考

7.4 性能优化

01.零成本抽象
    a.概念
        抽象无运行时开销
        示例:泛型、trait
        编译期优化
        性能保证
    b.实现机制
        单态化
        示例:为每个类型生成代码
        内联
        编译器优化
    c.验证
        汇编检查
        示例:cargo asm
        性能测试
        实际测量
    d.最佳实践
        使用抽象
        示例:迭代器
        信任编译器
        实测验证

02.内联优化
    a.#[inline]
        建议内联
        示例:小函数
        减少调用开销
        编译器决定
    b.#[inline(always)]
        强制内联
        示例:性能关键
        代码膨胀
        谨慎使用
    c.#[inline(never)]
        禁止内联
        示例:调试、代码大小
        特殊需求
        明确控制
    d.使用建议
        小函数inline
        示例:getter/setter
        性能测试
        权衡利弊

03.SIMD优化
    a.std::simd
        SIMD类型
        示例:f32x4
        向量化
        并行计算
    b.使用场景
        数值计算
        示例:图像处理
        批量操作
        性能提升
    c.可移植性
        平台相关
        示例:检测支持
        回退实现
        兼容性
    d.库支持
        packed_simd
        示例:跨平台SIMD
        高级抽象
        易用性

04.内存优化
    a.对齐
        #[repr(align(N))]
        示例:缓存行对齐
        性能优化
        硬件友好
    b.布局
        #[repr(C)]、#[repr(packed)]
        示例:控制内存布局
        减少填充
        FFI兼容
    c.零拷贝
        避免复制
        示例:引用传递
        Bytes类型
        性能关键
    d.内存池
        对象复用
        示例:避免分配
        性能提升
        特定场景

05.分支优化
    a.likely/unlikely
        分支预测
        示例:std::intrinsics
        热路径优化
        CPU友好
    b.#[cold]
        冷路径标记
        示例:错误处理
        优化布局
        性能提升
    c.match优化
        编译器优化
        示例:跳转表
        模式匹配
        高效执行
    d.最佳实践
        热路径优先
        示例:常见情况
        性能测试
        实际测量

7.5 编译优化

01.优化级别
    a.opt-level
        0-3、s、z
        示例:release用3
        速度vs大小
        权衡选择
    b.debug vs release
        开发vs生产
        示例:不同配置
        性能差异
        构建时间
    c.自定义profile
        [profile.custom]
        示例:特定优化
        灵活配置
        场景优化
    d.增量编译
        加速开发
        示例:缓存中间结果
        开发效率
        磁盘空间

02.LTO链接时优化
    a.启用LTO
        lto = true
        示例:跨crate优化
        性能提升
        编译时间
    b.thin LTO
        lto = "thin"
        示例:平衡优化
        并行编译
        实用选择
    c.fat LTO
        lto = "fat"
        示例:最大优化
        编译最慢
        性能最佳
    d.使用建议
        发布版启用
        示例:生产优化
        开发关闭
        权衡时间

03.代码生成
    a.codegen-units
        并行编译
        示例:codegen-units = 1
        优化vs速度
        发布用1
    b.target-cpu
        CPU特性
        示例:target-cpu = "native"
        平台优化
        可移植性
    c.panic策略
        panic = "abort"
        示例:减小二进制
        嵌入式
        特殊场景
    d.strip符号
        strip = true
        示例:减小体积
        发布优化
        调试信息

04.Profile引导优化
    a.PGO概念
        运行时数据
        示例:优化热路径
        性能提升
        两阶段编译
    b.使用流程
        收集profile
        示例:运行代表负载
        重新编译
        应用优化
    c.适用场景
        性能关键
        示例:服务器应用
        稳定负载
        值得投入
    d.工具支持
        rustc支持
        示例:-C profile-generate
        自动化
        持续优化

05.性能分析
    a.基准测试
        criterion
        示例:准确测量
        统计分析
        回归检测
    b.性能剖析
        perf、flamegraph
        示例:找热点
        可视化
        优化指导
    c.内存分析
        valgrind、heaptrack
        示例:内存泄漏
        分配热点
        优化内存
    d.持续监控
        CI集成
        示例:性能回归
        自动化
        质量保证

7.6 最佳实践总结

01.开发流程
    a.先正确后优化
        功能优先
        示例:过早优化是万恶之源
        可读性
        可维护性
    b.测量驱动
        实际测量
        示例:benchmark
        找瓶颈
        针对优化
    c.持续集成
        自动化测试
        示例:性能回归
        质量保证
        及时发现
    d.文档记录
        优化原因
        示例:注释说明
        知识传承
        维护友好

02.代码质量
    a.类型系统
        利用编译器
        示例:类型安全
        编译期检查
        减少bug
    b.错误处理
        Result而非panic
        示例:可恢复错误
        健壮性
        用户体验
    c.测试覆盖
        单元集成测试
        示例:完整覆盖
        质量保证
        重构信心
    d.代码审查
        团队协作
        示例:多人检查
        知识共享
        质量提升

03.性能权衡
    a.可读性优先
        清晰代码
        示例:避免过度优化
        维护成本
        团队效率
    b.实测验证
        性能测试
        示例:实际场景
        避免猜测
        数据驱动
    c.平台考虑
        目标平台
        示例:嵌入式vs服务器
        不同优化
        场景适配
    d.长期维护
        可维护性
        示例:简单优于复杂
        技术债务
        持续演进

04.学习资源
    a.官方文档
        The Book
        示例:基础学习
        权威资料
        持续更新
    b.Rustonomicon
        unsafe Rust
        示例:高级主题
        深入理解
        专家指南
    c.社区资源
        论坛、博客
        示例:实践经验
        问题解答
        最新动态
    d.开源项目
        学习代码
        示例:优秀实践
        真实案例
        贡献机会