欢迎开启 Rust 编程之旅!本项目采用 Cargo Workspace (工作空间) 模式组织,每一章都是一个独立的 Package,每一个知识点都是一个独立的二进制程序。
learn-rust/
├── Cargo.toml # 工作空间配置 (Workspace)
├── README.md # 本文档
├── pXX_章节名称/ # 文件夹带编号,独立文件夹 (Package)
│ ├── Cargo.toml # 该 Package 的独立配置与依赖
│ └── src/bin/ # 存放独立知识点的文件夹
│ └── sXX_知识点名称.rs # 带编号的独立程序 (每个文件都有 main 函数)
└── output_lab/ # 🎯 实战产出实验室 (各个阶段的大型输出任务)
你可以通过以下方式运行特定的知识点程序:
cargo run -p <包名> --bin <文件名>
例如:cargo run -p p01_basics --bin s01_variables
- s01_variables: 变量定义、不可变性、Shadowing。
- s02_types: 标量类型(含 1.92.0 字符处理)与复合类型。
- s03_control_flow:
if表达式(含Result返回优化)。
- s01_ownership: 移动 (Move) 与 克隆 (Clone) 的底层内存逻辑。
- s02_references: 引用与不变量借用规则。
- s03_lifetimes: 理解引用流转与生命周期标注。
- s01_structs: 结构体定义与
impl方法块。 - s02_enums: 关联数据枚举、
Option与Result的深度用法。 - s03_never_type: (🌟 1.92.0) 理解
!类型在不可到达路径中的应用。
- s01_generics: 泛型函数与泛型结构体。
- s02_traits: 特性定义、Trait Bound 约束(Java Interface 对比)。
- s03_const_context: (🌟 1.92.0) 在
const环境下的切片操作。
- s01_errors: 自定义错误、
?运算符链式调用。 - s02_modules:
pub,use作用域与 Crate 层级管理。
- s01_smart_pointers:
Box,Rc,Arc与new_zeroed零初始化。 - s02_interior_mutability:
RefCell与RwLock的动态借用检查。
- s01_threads: 多线程协作、消息传递 (Channel)。
- s02_async:
async/await异步流、Tokio 基础应用。
- s01_optimization: (🌟 1.92.0) Cargo 构建加速与 Profile 配置。
- s02_debugging: 利用 1.92.0 改进的 Backtrace 进行调试。
- s01_struct_references: 结构体持有引用时的
'a约束。 - s02_reborrowing: 借用穿透与多层引用传递逻辑。
- s03_hrtb: 高阶 Trait 约束 (
for<'a>) 与闭包。 - s04_pin_unpin: 理解自引用结构与
Pin指针。
- s01_decl_macros:
macro_rules!声明式宏实战。 - s02_proc_macros:
Derive与Attribute过程宏开发。 - s03_unsafe: 裸指针操作、内存 Layout 与 FFI。
- s01_future_trait: 手写
Future与状态机理解。 - s02_executor: 手撸简易异步运行时。
每当学习完一个阶段的所有知识点(sXX)后,请到 output_lab/ 目录下完成对应的综合练习:
- 阶段一 (入门):
r-grep-lite—— 实现一个支持参数解析的基础搜索工具。 - 阶段二 (所有权):
my-vec—— 手写一个能自动扩容的动态数组容器(理解 Move)。 - 阶段三 (类型):
ast-interpreter—— 利用枚举支持简单的数学表达式递归求值。 - 阶段四 (抽象):
generic-serializer—— 编写一个能将不同结构体序列化为 CSV 的 Trait。 - 阶段九 (生命周期):
zero-copy-parser—— 实现一个禁止拷贝、完全基于引用的高性能日志解析器。 - 阶段十 (元编程):
sql-derive—— 编写宏自动根据结构体生成 SQL 语句。 - 阶段十一 (异步):
mini-runtime—— 手工实现Poll和Waker以驱动异步任务。
- 关注
!类型:在 Java 中方法不返回则抛异常;在 Rust 1.92 中利用!在编译期确信某路径不会进入。 - 内存布局思维:Java 屏蔽了内存地址,在完成
my-vec和zero-copy-parser时要时刻思考数据在栈还是堆。