- 欢迎来到 Comprehensive Rust 🦀
- 1. 授课
❱
- 1.1. 课程结构
- 1.2. 键盘快捷键
- 1.3. 翻译
- 2. 使用 Cargo
❱
- 2.1. Rust 生态系统
- 2.2. 代码示例
- 2.3. 在本地运行 Cargo
- 第一天:上午
- 3. 欢迎
- 4. Hello, World
❱
- 4.1. 什么是 Rust?
- 4.2. Rust 的优势
- 4.3. Playground
- 5. 类型和值
❱
- 5.1. Hello, World
- 5.2. 变量
- 5.3. 值
- 5.4. 算术
- 5.5. 类型推导
- 5.6. 练习:Fibonacci
❱
- 5.6.1. 解答
- 6. 控制流基础
❱
- 6.1. if 表达式
- 6.2. 循环控制
❱
- 6.2.1. for
- 6.2.2. loop
- 6.3. break 和 continue
❱
- 6.3.1. Labels
- 6.4. 代码块和作用域
❱
- 6.4.1. 作用域和遮蔽(Shadowing)
- 6.5. 函数
- 6.6. 宏
- 6.7. 练习:考拉兹序列
❱
- 6.7.1. 解答
- 第一天:下午
- 7. 欢迎
- 8. 元组和数组
❱
- 8.1. 数组(Arrays)
- 8.2. 元组(Tuples)
- 8.3. 数组迭代
- 8.4. 解构
- 8.5. 练习:嵌套数组
❱
- 8.5.1. 解答
- 9. 引用
❱
- 9.1. 共享引用
- 9.2. 独占引用
- 9.3. Slices: &\[T\]
- 9.4. 字符串
- 9.5. 练习:几何图形
❱
- 9.5.1. 解答
- 10. 用户定义的类型
❱
- 10.1. 结构体
- 10.2. 元组结构体
- 10.3. 枚举
- 10.4. static
- 10.5. 常量
- 10.6. 类型别名
- 10.7. 练习:电梯事件
❱
- 10.7.1. 解答
- 第二天:上午
- 11. 欢迎
- 12. 模式匹配
❱
- 12.1. Matching Values
- 12.2. 解构
- 12.3. let 控制流
- 12.4. 练习:表达式求值
❱
- 12.4.1. 解答
- 13. 方法和特征
❱
- 13.1. 方法
- 13.2. 特征(Trait)
❱
- 13.2.1. 实现 Unsafe Trait
- 13.2.2. 更多 trait
- 13.2.3. 共享类型
- 13.3. 派生特征
- 13.4. 练习:通用日志
❱
- 13.4.1. 解答
- 14. 泛型
❱
- 14.1. 泛型函数
- 14.2. 泛型类型
- 14.3. 泛型
- 14.4. 特征边界
- 14.5. impl Trait
- 14.6. 练习:通用 min 函数
❱
- 14.6.1. 解答
- 第二天:下午
- 15. 欢迎
- 16. 标准库类型
❱
- 16.1. 标准库
- 16.2. 文档
- 16.3. Option
- 16.4. Result
- 16.5. String
- 16.6. Vec
- 16.7. HashMap
- 16.8. 练习:计数器
❱
- 16.8.1. 解答
- 17. 标准库特征
❱
- 17.1. 比较
- 17.2. 运算符
- 17.3. From 和 Into
- 17.4. 类型转换
- 17.5. Read 和 Write
- 17.6. Default,结构体更新语法
- 17.7. 闭包
- 17.8. 练习:ROT13
❱
- 17.8.1. 解答
- 第三天:上午
- 18. 欢迎
- 19. 内存管理
❱
- 19.1. 回顾:程序的内存分配
- 19.2. 内存管理方法
- 19.3. 所有权
- 19.4. 移动语义
- 19.5. Clone
- 19.6. 复合类型
- 19.7. Drop
- 19.8. 练习:构建器类型
❱
- 19.8.1. 解答
- 20. 智能指针
❱
- 20.1. Box<T>
- 20.2. Rc
- 20.3. 特征对象
- 20.4. 练习:二叉树
❱
- 20.4.1. 解答
- 第三天:下午
- 21. 欢迎
- 22. 借用
❱
- 22.1. 借用值
- 22.2. 借用检查
- 22.3. 内部可变性
- 22.4. 练习:健康统计
❱
- 22.4.1. 解答
- 23. 结构体生命周期
❱
- 23.1. 生命周期注解
- 23.2. 生命周期省略
- 23.3. 结构体生命周期
- 23.4. 练习:Protobuf 解析
❱
- 23.4.1. 解答
- 第四天:上午
- 24. 欢迎
- 25. 迭代器
❱
- 25.1. Iterator
- 25.2. IntoIterator
- 25.3. FromIterator
- 25.4. 练习:迭代器方法链
❱
- 25.4.1. 解答
- 26. 模块
❱
- 26.1. 模块
- 26.2. 文件系统层级结构
- 26.3. 可见性
- 26.4. use、super、self
- 26.5. 练习:面向 GUI 库的模块
❱
- 26.5.1. 解答
- 27. 测试
❱
- 27.1. 测试模块
- 27.2. 其他类型的测试
- 27.3. 编译器 Lint 和 Clippy
- 27.4. 练习:卢恩算法
❱
- 27.4.1. 解答
- 第四天:下午
- 28. 欢迎
- 29. 错误处理
❱
- 29.1. Panics
- 29.2. 尝试运算符
- 29.3. 尝试转换
- 29.4. Error 特征
- 29.5. thiserror 和 anyhow
- 29.6. 练习:使用 Result 进行重写
❱
- 29.6.1. 解答
- 30. 不安全 Rust
❱
- 30.1. Unsafe
- 30.2. 解引用裸指针
- 30.3. 可变的静态变量
- 30.4. 联合体
- 30.5. Unsafe 函数
- 30.6. Unsafe 特征
- 30.7. 练习:FFI 封装容器
❱
- 30.7.1. 解答
- Android
- 31. 欢迎
- 32. 设置
- 33. 构建规则
❱
- 33.1. 可执行文件
- 33.2. 库
- 34. AIDL
❱
- 34.1. /\*\* Birthday service interface. \*/
❱
- 34.1.1. 接口
- 34.1.2. Service API
- 34.1.3. 服务器
- 34.1.4. 服务器
- 34.1.5. 部署
- 34.1.6. 客户端
- 34.1.7. 更改 API
- 34.1.8. 实现
- 34.2. 类型
❱
- 34.2.1. Primitive Types
- 34.2.2. 数组(Arrays)
- 34.2.3. 特征对象
- 34.2.4. 变量
- 34.2.5. Sending Files
- 35. 测试
❱
- 35.1. GoogleTest
- 35.2. 模拟
- 36. 日志记录
- 37. 互操作性
❱
- 37.1. 与 C 语言交互
❱
- 37.1.1. 使用 Bindgen 调用 C 语言
- 37.1.2. 从 C 语言调用 Rust 语言
- 37.2. 与 C++ 交互
❱
- 37.2.1. 桥接模块
- 37.2.2. Rust 桥接
- 37.2.3. 生成的 C++ 代码
- 37.2.4. C++ 桥接
- 37.2.5. 共享类型
- 37.2.6. 共享枚举
- 37.2.7. Rust 错误处理
- 37.2.8. C++ 错误处理
- 37.2.9. 其他类型
- 37.2.10. 为 Android 构建:C++
- 37.2.11. 为 Android 构建:Genrule
- 37.2.12. 为 Android 构建:Rust
- 37.3. 与 Java 交互
- 38. 习题
- Chromium
- 39. 欢迎
- 40. 设置
- 41. Chromium 和 Cargo 的生态对比
- 42. 政策
- 43. 构建规则
❱
- 43.1. 不安全代码
- 43.2. 在 Chromium C++ 中导入 Rust 代码
- 43.3. Visual Studio Code
- 43.4. 练习
- 44. 测试
❱
- 44.1. rust_gtest_interop 库
- 44.2. Rust 测试的 GN 规则
- 44.3. chromium::import! 宏
- 44.4. 练习
- 45. 与 C++ 的互操作性
❱
- 45.1. 绑定示例
- 45.2. CXX 的局限性
- 45.3. CXX 错误处理
❱
- 45.3.1. 错误处理:QR 码示例
- 45.3.2. 错误处理:PNG 示例
- 45.4. 在 Chromium 中使用 CXX
- 45.5. 练习
- 46. 添加第三方 Crate
❱
- 46.1. 配置 Cargo.toml
- 46.2. 配置 gnrt_config.toml
- 46.3. 下载 Crate
- 46.4. 生成 gn 构建规则
- 46.5. 解决问题
❱
- 46.5.1. 构建用于生成代码的脚本
- 46.5.2. 构建用于构建 C++ 或执行任意操作的脚本
- 46.6. 依赖于 Crate
- 46.7. 审查和审核
- 46.8. 提交到 Chromium 源代码
- 46.9. 及时更新 Crate
- 46.10. 练习
- 47. 综合应用练习
- 48. 练习解答
- 裸机:上午
- 49. 欢迎
- 50. no_std
❱
- 50.1. 最小示例
- 50.2. alloc
- 51. 微控制器
❱
- 51.1. 原始 MMIO
- 51.2. PAC
- 51.3. HAL Crate
- 51.4. 板级支持 Crate
- 51.5. 类型状态模式
- 51.6. embedded-hal
- 51.7. probe-rs 和 cargo-embed
❱
- 51.7.1. 调试
- 51.8. 其他项目
- 52. 习题
❱
- 52.1. 罗盘
- 52.2. 解答
- 裸机:下午
- 53. 应用处理器
❱
- 53.1. 准备使用 Rust
- 53.2. 内联汇编
- 53.3. MMIO
- 53.4. 编写 UART 驱动程序
❱
- 53.4.1. 更多特征
- 53.5. 优化 UART 驱动程序
❱
- 53.5.1. Bitflags
- 53.5.2. 多寄存器
- 53.5.3. 驱动程序
- 53.5.4. 开始使用
- 53.6. 日志记录
❱
- 53.6.1. 开始使用
- 53.7. 异常
- 53.8. 其他项目
- 54. 实用 Crate
❱
- 54.1. zerocopy
- 54.2. aarch64-paging
- 54.3. buddy_system_allocator
- 54.4. tinyvec
- 54.5. spin
- 55. Android
❱
- 55.1. vmbase
- 56. 习题
❱
- 56.1. RTC 驱动
- 56.2. 解答
- 并发:上午
- 57. 欢迎
- 58. 线程
❱
- 58.1. 范围线程
- 59. 通道
❱
- 59.1. 无界通道
- 59.2. 有界通道
- 60. Send 和 Sync
❱
- 60.1. Send
- 60.2. Sync
- 60.3. 示例
- 61. 共享状态
❱
- 61.1. Arc
- 61.2. 互斥器(Mutex)
- 61.3. 示例
- 62. 习题
❱
- 62.1. 哲学家就餐问题
- 62.2. 多线程链接检查器
- 62.3. 解答
- 并发:下午
- 63. 异步基础
❱
- 63.1. async/await
- 63.2. Futures
- 63.3. Runtimes
❱
- 63.3.1. Tokio
- 63.4. 任务
- 63.5. 异步通道
- 64. 控制流
❱
- 64.1. 加入
- 64.2. 选择
- 65. 误区
❱
- 65.1. 阻塞执行器
- 65.2. Pin
- 65.3. 异步特征
- 65.4. 消除
- 66. 习题
❱
- 66.1. 哲学家就餐问题
- 66.2. 广播聊天应用
- 66.3. 解答
- 结束语
- 67. 谢谢!
- 68. 词汇表
- 69. 其他资源
- 70. 鸣谢