- 欢迎来到 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. 代码块和作用域
- 6.2. if 表达式
- 6.3. match Expressions
- 6.4. 循环控制
❱
- 6.4.1. for
- 6.4.2. loop
- 6.5. break 和 continue
❱
- 6.5.1. Labels
- 6.6. 函数
- 6.7. 宏
- 6.8. 练习:考拉兹序列
❱
- 6.8.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. 切片
- 9.4. 字符串
- 9.5. Reference Validity
- 9.6. 练习:几何图形
❱
- 9.6.1. 解答
- 10. 用户定义的类型
❱
- 10.1. 结构体
- 10.2. 元组结构体
- 10.3. 枚举
- 10.4. 类型别名
- 10.5. 常量
- 10.6. static
- 10.7. 练习:电梯事件
❱
- 10.7.1. 解答
- 第二天:上午
- 11. 欢迎
- 12. 模式匹配
❱
- 12.1. Irrefutable Patterns
- 12.2. Matching Values
- 12.3. Destructuring Structs
- 12.4. Destructuring Enums
- 12.5. let 控制流
❱
- 12.5.1. if let Expressions
- 12.5.2. while let Statements
- 12.5.3. let else
- 12.6. 练习:表达式求值
❱
- 12.6.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. dyn Trait
- 14.7. 练习:通用 min 函数
❱
- 14.7.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. Closure Syntax
- 17.2. Capturing
- 17.3. Closure Traits
- 17.4. Exercise: Log Filter
❱
- 17.4.1. 解答
- 18. 标准库特征
❱
- 18.1. 比较
- 18.2. 运算符
- 18.3. From 和 Into
- 18.4. 类型转换
- 18.5. Read 和 Write
- 18.6. Default,结构体更新语法
- 18.7. 练习:ROT13
❱
- 18.7.1. 解答
- 第三天:上午
- 19. 欢迎
- 20. 内存管理
❱
- 20.1. 回顾:程序的内存分配
- 20.2. 内存管理方法
- 20.3. 所有权
- 20.4. 移动语义
- 20.5. Clone
- 20.6. 复合类型
- 20.7. Drop
- 20.8. 练习:构建器类型
❱
- 20.8.1. 解答
- 21. 智能指针
❱
- 21.1. Box<T>
- 21.2. Rc
- 21.3. Owned Trait Objects
- 21.4. 练习:二叉树
❱
- 21.4.1. 解答
- 第三天:下午
- 22. 欢迎
- 23. 借用
❱
- 23.1. 借用值
- 23.2. 借用检查
- 23.3. Borrow Errors
- 23.4. 内部可变性
❱
- 23.4.1. Cell
- 23.4.2. RefCell
- 23.5. 练习:健康统计
❱
- 23.5.1. 解答
- 24. 结构体生命周期
❱
- 24.1. 生命周期注解
- 24.2. 生命周期省略
- 24.3. 数据结构中的生命周期
- 24.4. 练习:Protobuf 解析
❱
- 24.4.1. 解答
- 第四天:上午
- 25. 欢迎
- 26. 迭代器
❱
- 26.1. Motivation
- 26.2. Iterator Trait
- 26.3. Iterator Helper Methods
- 26.4. collect
- 26.5. IntoIterator
- 26.6. 练习:迭代器方法链
❱
- 26.6.1. 解答
- 27. 模块
❱
- 27.1. 模块
- 27.2. 文件系统层级结构
- 27.3. 可见性
- 27.4. Encapsulation
- 27.5. use、super、self
- 27.6. 练习:面向 GUI 库的模块
❱
- 27.6.1. 解答
- 28. 测试
❱
- 28.1. 单元测试
- 28.2. 其他类型的测试
- 28.3. 编译器 Lint 和 Clippy
- 28.4. 练习:卢恩算法
❱
- 28.4.1. 解答
- 第四天:下午
- 29. 欢迎
- 30. 错误处理
❱
- 30.1. Panics
- 30.2. Result
- 30.3. 尝试运算符
- 30.4. 尝试转换
- 30.5. Error 特征
- 30.6. thiserror
- 30.7. anyhow
- 30.8. 练习:使用 Result 进行重写
❱
- 30.8.1. 解答
- 31. 不安全 Rust
❱
- 31.1. Unsafe
- 31.2. 解引用裸指针
- 31.3. 可变的静态变量
- 31.4. 联合体
- 31.5. Unsafe 函数
❱
- 31.5.1. Unsafe Rust Functions
- 31.5.2. Unsafe External Functions
- 31.5.3. 调用 Unsafe 函数
- 31.6. Unsafe 特征
- 31.7. 练习:FFI 封装容器
❱
- 31.7.1. 解答
- Android
- 32. 欢迎
- 33. 设置
- 34. 构建规则
❱
- 34.1. 可执行文件
- 34.2. 库
- 35. AIDL
❱
- 35.1. /\*\* Birthday service interface. \*/
❱
- 35.1.1. 接口
- 35.1.2. Service API
- 35.1.3. 服务器
- 35.1.4. 服务器
- 35.1.5. 部署
- 35.1.6. 客户端
- 35.1.7. 更改 API
- 35.1.8. 实现
- 35.2. 类型
❱
- 35.2.1. Primitive Types
- 35.2.2. 数组(Arrays)
- 35.2.3. 特征对象
- 35.2.4. 变量
- 35.2.5. Sending Files
- 36. 测试
❱
- 36.1. GoogleTest
- 36.2. 模拟
- 37. 日志记录
- 38. 互操作性
❱
- 38.1. 与 C 语言交互
❱
- 38.1.1. A Simple C Library
- 38.1.2. Bindgen
- 38.1.3. Running Our Binary
- 38.1.4. A Simple Rust Library
- 38.1.5. 从 C 语言调用 Rust 语言
- 38.2. 与 C++ 交互
❱
- 38.2.1. 桥接模块
- 38.2.2. Rust 桥接
- 38.2.3. 生成的 C++ 代码
- 38.2.4. C++ 桥接
- 38.2.5. 共享类型
- 38.2.6. 共享枚举
- 38.2.7. Rust 错误处理
- 38.2.8. C++ 错误处理
- 38.2.9. 其他类型
- 38.2.10. 为 Android 构建:Genrule
- 38.2.11. 为 Android 构建:C++
- 38.2.12. 为 Android 构建:Rust
- 38.3. 与 Java 交互
- 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.4.2. 开始使用
- 53.5. 优化 UART 驱动程序
❱
- 53.5.1. Bitflags
- 53.5.2. 多寄存器
- 53.5.3. 驱动程序
- 53.6. safe-mmio
❱
- 53.6.1. 驱动程序
- 53.6.2. 开始使用
- 53.7. 日志记录
❱
- 53.7.1. 开始使用
- 53.8. 异常
- 53.9. aarch64-rt
- 53.10. 其他项目
- 54. 实用 Crate
❱
- 54.1. zerocopy
- 54.2. aarch64-paging
- 54.3. buddy_system_allocator
- 54.4. tinyvec
- 54.5. spin
- 55. Bare-Metal on Android
❱
- 55.1. vmbase
- 56. 习题
❱
- 56.1. RTC 驱动
- 56.2. 解答
- 并发:上午
- 57. 欢迎
- 58. 线程
❱
- 58.1. Plain Threads
- 58.2. 范围线程
- 59. 通道
❱
- 59.1. Senders and Receivers
- 59.2. 无界通道
- 59.3. 有界通道
- 60. Send 和 Sync
❱
- 60.1. Marker Traits
- 60.2. Send
- 60.3. Sync
- 60.4. 示例
- 61. 共享状态
❱
- 61.1. Arc
- 61.2. 互斥器(Mutex)
- 61.3. 示例
- 62. 习题
❱
- 62.1. 哲学家就餐问题
- 62.2. 多线程链接检查器
- 62.3. 解答
- 并发:下午
- 63. 欢迎
- 64. 异步基础
❱
- 64.1. async/await
- 64.2. Futures
- 64.3. State Machine
- 64.4. Runtimes
❱
- 64.4.1. Tokio
- 64.5. 任务
- 65. Channels and Control Flow
❱
- 65.1. 异步通道
- 65.2. 加入
- 65.3. 选择
- 66. 误区
❱
- 66.1. 阻塞执行器
- 66.2. Pin
- 66.3. 异步特征
- 66.4. 消除
- 67. 习题
❱
- 67.1. 哲学家就餐问题
- 67.2. 广播聊天应用
- 67.3. 解答
- Idiomatic Rust
- 68. 欢迎
- 69. Leveraging the Type System
❱
- 69.1. Newtype Pattern
❱
- 69.1.1. Semantic Confusion
- 69.1.2. Parse, Don't Validate
- 69.1.3. Is It Encapsulated?
- Unsafe
- 70. 欢迎
- 71. 设置
- 72. Motivations
❱
- 72.1. 互操作性
- 72.2. Data Structures
- 72.3. Performance
- 73. Foundations
❱
- 73.1. What is unsafe?
- 73.2. When is unsafe used?
- 73.3. Data structures are safe
- 73.4. Actions might not be
- 73.5. Less powerful than it seems
- 结束语
- 74. 谢谢!
- 75. 词汇表
- 76. 其他资源
- 77. 鸣谢