欢迎来到 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.
Hello World!
4.3.
Rust 的优势
4.4.
Playground
5.
类型和值
❱
5.1.
变量
5.2.
值
5.3.
算术
5.4.
字符串
5.5.
类型推导
5.6.
练习:Fibonacci
❱
5.6.1.
解答
6.
控制流
❱
6.1.
条件语句
6.2.
“for”循环
6.3.
break 和 continue
6.4.
代码块和作用域
6.5.
函数
6.6.
宏
6.7.
练习:考拉兹序列
❱
6.7.1.
解答
第一天:下午
7.
欢迎
8.
元组和数组
❱
8.1.
元组和数组
8.2.
迭代器
8.3.
模式匹配
8.4.
解构枚举
8.5.
练习:嵌套数组
❱
8.5.1.
解答
9.
引用
❱
9.1.
共享引用
9.2.
悬垂引用
9.3.
练习:几何图形
❱
9.3.1.
解答
10.
用户定义的类型
❱
10.1.
结构体
10.2.
元组结构体
10.3.
枚举
10.4.
静态变量与常量
10.5.
类型别名
10.6.
练习:电梯事件
❱
10.6.1.
解答
第二天:上午
11.
欢迎
12.
模式匹配
❱
12.1.
解构枚举
12.2.
控制流
12.3.
练习:表达式求值
❱
12.3.1.
解答
13.
方法和特征
❱
13.1.
方法
13.2.
特征(Trait)
13.3.
派生特征
13.4.
练习:通用 min 函数
❱
13.4.1.
解答
14.
泛型
❱
14.1.
外部函数
14.2.
通用数据类型
14.3.
特征边界
14.4.
impl Trait
14.5.
练习:通用 min 函数
❱
14.5.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.
Slices: &\[T\]
23.2.
悬垂引用
23.3.
函数调用中的生命周期
23.4.
生命周期
23.5.
生命周期
23.6.
练习:Protobuf 解析
❱
23.6.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.
实用 crate
27.4.
GoogleTest
27.5.
模拟
27.6.
编译器 lint 和 Clippy
27.7.
卢恩算法
❱
27.7.1.
解答
第一天:下午
28.
欢迎
29.
错误处理
❱
29.1.
Panics
29.2.
迭代器
29.3.
隐式类型转换
29.4.
Drop 特征
29.5.
From 和 Into
29.6.
使用 Result 进行结构化错误处理
❱
29.6.1.
解答
30.
不安全 Rust
❱
30.1.
是(不安全)
30.2.
解引用裸指针
30.3.
可变的静态变量
30.4.
联合体
30.5.
调用 Unsafe 函数
30.6.
实现 Unsafe Trait
30.7.
练习:FFI 封装容器
❱
30.7.1.
解答
Android
31.
欢迎
32.
设置
33.
构建规则
❱
33.1.
可执行文件
33.2.
库
34.
AIDL
❱
34.1.
接口
34.2.
实现
34.3.
服务器
34.4.
部署
34.5.
客户端
34.6.
更改 API
35.
日志记录
36.
互操作性
❱
36.1.
与 C 语言交互
❱
36.1.1.
使用 Bindgen 调用 C 语言
36.1.2.
从 C 语言调用 Rust 语言
36.2.
与 C++ 交互
❱
36.2.1.
测试模块
36.2.2.
Rust 桥接
36.2.3.
生成的 C++
36.2.4.
C++ 桥接
36.2.5.
共享类型
36.2.6.
共享枚举
36.2.7.
错误处理
36.2.8.
错误处理
36.2.9.
其他类型
36.2.10.
针对 Android 进行构建:C++
36.2.11.
针对 Android 进行构建:Genrule
36.2.12.
针对 Android 进行构建:Rust
36.3.
与 Java 交互
37.
习题
Chromium
38.
欢迎
39.
设置
40.
比较 Chromium 和 Cargo 生态系统
41.
政策
42.
构建规则
❱
42.1.
不安全 Rust
42.2.
根据 Chromium C++ 中的 Rust 代码
42.3.
Visual Studio Code
42.4.
练习
43.
测试
❱
43.1.
rust_gtest_interop Library
43.2.
GN Rules for Rust Tests
43.3.
chromium::import! Macro
43.4.
练习
44.
与 C 的互操作性
❱
44.1.
示例
44.2.
CXX 的局限性
44.3.
错误处理
❱
44.3.1.
错误处理
44.3.2.
错误处理
44.4.
在 Chromium 中使用 CXX
44.5.
练习
45.
添加第三方 crate
❱
45.1.
配置 Cargo.toml
45.2.
配置 gnrt_config.toml
45.3.
下载 crate
45.4.
生成 gn 构建规则
45.5.
解决问题
❱
45.5.1.
用于生成代码的构建脚本
45.5.2.
用于构建 C++ 或执行任意操作的构建脚本
45.6.
依赖于 crate
45.7.
审查和审核
45.8.
签入 Chromium 源代码
45.9.
始终使用最新版 crate
45.10.
练习
46.
综合应用练习
47.
练习题解答
裸金属:上午
48.
欢迎
49.
no_std
❱
49.1.
最小示例
49.2.
alloc
50.
微控制器
❱
50.1.
原始 MMIO
50.2.
PAC
50.3.
HAL crate
50.4.
板级支持 Crate
50.5.
类型状态模式
50.6.
embedded-hal
50.7.
probe-rs、cargo-embed
❱
50.7.1.
调试
50.8.
其他项目
51.
习题
❱
51.1.
罗盘
51.2.
解答
裸金属:下午
52.
应用处理器
❱
52.1.
准备使用 Rust
52.2.
内联汇编
52.3.
MMIO
52.4.
编写 UART 驱动程序
❱
52.4.1.
更多 trait
52.5.
一个更好的 UART 驱动程序
❱
52.5.1.
Bitflags
52.5.2.
多个寄存器
52.5.3.
驱动程序
52.5.4.
开始使用
52.6.
日志记录
❱
52.6.1.
开始使用
52.7.
异常
52.8.
其他项目
53.
实用 crate
❱
53.1.
zerocopy
53.2.
aarch64-paging
53.3.
buddy_system_allocator
53.4.
tinyvec
53.5.
spin
54.
Android
❱
54.1.
vmbase
55.
习题
❱
55.1.
RTC驱动
55.2.
解答
并发编程:上午
56.
欢迎
57.
线程
❱
57.1.
范围线程
58.
通道
❱
58.1.
无界通道
58.2.
有界通道
59.
Send 和 Sync
❱
59.1.
Send
59.2.
Sync
59.3.
示例
60.
共享状态
❱
60.1.
Arc
60.2.
互斥器 (Mutex)
60.3.
示例
61.
习题
❱
61.1.
哲学家就餐问题 (Dining philosophers problem)
61.2.
多线程链接检查器
61.3.
解答
并发:下午
62.
异步基础
❱
62.1.
async/await
62.2.
Futures
62.3.
Runtimes
❱
62.3.1.
Tokio
62.4.
任务
62.5.
异步通道
63.
控制流
❱
63.1.
加入
63.2.
选择
64.
误区
❱
64.1.
屏蔽执行器
64.2.
Pin
64.3.
异步特质
64.4.
消除
65.
习题
❱
65.1.
哲学家就餐问题 (Dining philosophers problem)
65.2.
广播聊天应用程序
65.3.
解答
结束语
66.
谢谢!
67.
词汇表
68.
其他资源
69.
鸣谢
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Korean (한국어)
Spanish (Español)
引用
In this segment:
Shared References
(10 minutes)
Exclusive References
(10 minutes)
Exercise: Geometry
(30 minutes)
This segment should take about 50 minutes