Skip to content

Commit f53a862

Browse files
committed
refactor: 💡 协助 AI 进行学习,更新代码示例,由浅入深
1 parent 8d02b33 commit f53a862

File tree

6 files changed

+63
-21
lines changed

6 files changed

+63
-21
lines changed

.github/prompts/ruster.prompt.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
mode: 'agent'
3+
---
4+
5+
你现在是一位精通 Rust 编程的专家,擅长 Rust 语言在 Web 和系统级开发中的应用。你拥有丰富的实战经验,能够深入浅出地讲解复杂的技术问题,帮助初学者和进阶开发者理解 Rust 的核心概念和最佳实践。
6+
7+
当前根目录下有一个 `docs/notes` 文件夹,里面的文件内容主要是 AI 输出的答案汇总,但这些内容的正确性尚未确认。你的任务如下:
8+
9+
- **勘误校正**:阅读 `notes` 文件夹中的所有文件,对其中的内容进行仔细校对,找出并纠正错误或不准确的地方。
10+
- **内容扩展**:对于内容不够详细或有提升空间的部分,进行适当的扩展和延伸,补充更深入的讲解或实际应用案例。
11+
- **重难点讲解**:针对 Rust 编程中的重点和难点内容,进行由浅入深、通俗易懂的讲解,帮助读者更好地理解相关知识。
12+
- **文件管理**:如有必要,可以新增或删除 `notes` 文件夹中的文件,以优化知识结构和内容完整性。
13+
- **Git 操作**:在适当的时机进行 `git commit`,格式为:`🤖📝AI: <描述信息>`,记录每次重要的内容修改或文件变更。
14+
- **联网搜索**:如果你具备联网能力,请在遇到不确定或需要最新资料的问题时,进行相关知识的在线搜索,并据此完善内容。
15+
- **输出风格**:请始终保持语言简洁明了,易于理解,适合不同层次的 Rust 学习者阅读。
16+
17+
在每次开始工作前,请根据实际能力回答以下问题:
18+
19+
- 如果你可以联网进行搜索,请回答:“我可以联网进行搜索相关知识。”
20+
- 如果你可以帮助进行勘误校正,请回答:“我可以帮助你进行勘误校正。”
21+
22+
请按照上述要求,依次对 `notes` 文件夹中的内容进行勘误、扩展和优化。在当前文件未完成所有修改的前,请不要停止,完成之后简要说明你做了哪些更正与补充,最后对该文件进行 git commit,reply in chinese。

docs/notes/awesome rust.md

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
Rust 生态系统由许多库和工具组成,可用于构建各种应用程序。其中一些库包括:
2+
13
## Rust 前端框架
24

35
- [seed](https://github.com/seed-rs/seed)
@@ -14,7 +16,7 @@
1416

1517
- [Tock](https://github.com/tock/tock)
1618

17-
- [Rust for Linux](https://rust-for-linux.com/ )
19+
- [Rust for Linux](https://rust-for-linux.com/)
1820

1921
## Editor
2022

@@ -65,31 +67,34 @@ https://www.nushell.sh/documentation.html
6567

6668
- [alacritty](https://github.com/alacritty/alacritty)
6769

68-
6970
## 命令行
71+
7072
- Clap
7173
用于构建命令行接口,简化了命令行参数的解析和处理。
7274

7375
## 序列化
76+
7477
- [serde](https://github.com/serde-rs/serde)
75-
一个序列化和反序列化的框架。Serde极其高效,可以处理各种数据格式,如JSON、YAML和Bincode
78+
一个序列化和反序列化的框架。Serde 极其高效,可以处理各种数据格式,如 JSON、YAML 和 Bincode
7679

7780
## 多线程
81+
7882
- Rayon
7983
一个数据并行处理库,用于简化多线程编程。
8084

8185
## 并发
86+
8287
- Crossbeam
8388
提供了一系列用于并发编程的工具,如通道、原子操作、锁等。
8489

8590
## 异步
91+
8692
- [Tokio](https://github.com/tokio-rs/tokio)
8793
一个异步运行时,用于编写高性能的网络应用。它提供了事件驱动的非阻塞 I/O 模型。
8894

8995
- Async-std
9096
提供了类似于标准库的异步版本,用于构建异步应用。
9197

92-
9398
## Wasm
9499

95100
- [https://github.com/yewstack/yew](https://github.com/yewstack/yew)
@@ -100,18 +105,20 @@ https://www.nushell.sh/documentation.html
100105
## web 应用
101106

102107
- [Leptos](https://github.com/leptos-rs/leptos)
103-
Leptos是一个基于“响应式” ui 概念的前沿全栈 web 框架。这意味着只要底层数据发生变化,UI 就会自动更新。
108+
Leptos 是一个基于“响应式” ui 概念的前沿全栈 web 框架。这意味着只要底层数据发生变化,UI 就会自动更新。
104109

105110
- [Rocket]
106111
一个用于构建 web 应用的框架,以简易性和速度著称。提供了宏来简化路由和请求处理。
107112

108113
## ORM
114+
109115
- [Diesel](https://github.com/diesel-rs/diesel)
110-
一个ORM(对象关系映射)框架,支持多种数据库后端,如 PostgreSQL、MySQL 和 SQLite。
116+
一个 ORM(对象关系映射)框架,支持多种数据库后端,如 PostgreSQL、MySQL 和 SQLite。
111117

112118
- [SeaORM](https://github.com/SeaQL/sea-orm)
113119

114120
## rewriting everything in Rust
121+
115122
[I spent six months rewriting everything in Rust](https://www.youtube.com/watch?v=vL2nB1VwX1M)
116123

117124
- [Clap](https://github.com/clap-rs/clap)
@@ -136,6 +143,7 @@ https://www.nushell.sh/documentation.html
136143
- [Mux](https://www.mux.com/)
137144

138145
## rust & frontend
146+
139147
[rust-fe](https://github.com/ChandlerVer5/rust-fe)
140148

141149
## node
@@ -149,7 +157,7 @@ https://www.nushell.sh/documentation.html
149157
## 前端工具
150158

151159
- [rust-for-fe](https://github.com/i5ting/learn-rust-for-fe)
152-
Rust是未来前端基础设施
160+
Rust 是未来前端基础设施
153161

154162
- [oxc-project/oxc](https://github.com/oxc-project/oxc)
155163
A collection of JavaScript tools written in Rust.
@@ -225,23 +233,27 @@ UNIX style tool to pretty print json
225233
- [parcel-bundler/lightningcss](https://github.com/parcel-bundler/lightningcss)
226234
An extremely fast CSS parser, transformer, bundler, and minifier written in Rust. (github.com)
227235

228-
229236
## 发布
237+
230238
- [shuttle](https://github.com/shuttle-hq/shuttle)
231239
无需编写任何基础设施文件即可构建和发布后端。
232240

233241
## 与其他语言
242+
234243
- [Rust in Flutter](https://github.com/cunarist/rinf)
235244

236245
## 跨平台
246+
237247
- [Tauri](https://tauri.app/)
238248
- [Robius](https://github.com/project-robius)
239249
- [makepad](https://github.com/makepad/makepad)
240250

241251
## 安装
252+
242253
- [Cargo Binstall](https://github.com/cargo-bins/cargo-binstall)
243254
提供了一种低复杂度的机制来安装 Rust 二进制文件,作为从源代码构建(通过 Cargo install)或手动下载包的替代方案。
244255

245256
## 交叉编译
257+
246258
现在有了更加方便的方法,那就是 [cargo-zigbuid](https://github.com/rust-cross/cargo-zigbuild)
247259
[Zig](https://ziglang.org) 是一种通用编程语言和工具链,用于维护健壮、最佳和可重用的软件,而交叉编译是 Zig 的一个卖点。

docs/notes/index.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
# 初学备忘录📕
1+
# 初学备忘录 📕
2+
3+
> !这部分内基本都是 AI 汇总输出的内容,尚未经过验证。
4+
5+
- [serde](URL_ADDRESS- [serde](https://serde.rs/): 序列化和反序列化库。URL_ADDRESS 序列化和反序列化库。
6+
- [tokio](URL_ADDRESS- [tokio](URL_ADDRESS- [tokio](URL_ADDRESS- [tokio](https://tokio.rs/): 异步运行时库。
27

38
## Rustacean
4-
Rust 编程语言的用户或爱好者,源于Rust(一种系统编程语言)和 crustacean `[krʌˈsteɪʃ(ə)n]`(甲壳类动物)的结合。
9+
10+
Rust 编程语言的用户或爱好者,源于 Rust(一种系统编程语言)和 crustacean `[krʌˈsteɪʃ(ə)n]`(甲壳类动物)的结合。

docs/第 11 章 所有权和移动语义/11.1 什么是所有权.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,18 @@ use_object(p);
1818
对此,C++ 进行了一个改进,即通过“智能指针”来描述“所有权”(Ownership)概念。这在一定程度上减少了内存使用 bug,实现了“半自动化”的内存管理。
1919
而 Rust 在此基础上更进一步,将“所有权”的理念直接融入到了语言之中。
2020

21-
Rust 有以下 3 条所有权规则:
21+
==Rust 有以下 3 条所有权规则:==
2222

2323
- 每个值在 Rust 中都有一个变量来管理它,这个变量就是这个值、这块内存的所有者;
2424

2525
- 每个值在一个时间点上只有一个所有者;
2626

2727
- 当变量所在的作用域结束的时候,变量以及它代表的值将会被销毁。
2828

29-
规则 1 给出了所有者owner的概念,规则 2 对应所有权的转移 Move 语义,规则 3 对应内存释放 Drop。
30-
Rust通过单一所有权,将堆上内存管理与分配在栈上的所有者变量生命周期绑定,所有者离开作用域后堆内存也自动释放。
29+
规则 1 给出了所有者 owner 的概念,规则 2 对应所有权的转移 Move 语义,规则 3 对应内存释放 Drop。
30+
Rust 通过单一所有权,将堆上内存管理与分配在栈上的所有者变量生命周期绑定,所有者离开作用域后堆内存也自动释放。
3131

32-
我们再拿前面已经讲过的字符串 String 类型来举例:
32+
我们再拿前面已经讲过的字符串 `String` 类型来举例:
3333

3434
```rust
3535
fn main() {
@@ -39,11 +39,12 @@ fn main() {
3939
}
4040
```
4141

42-
当我们声明一个变量`s`,并用 String 类型对它进行初始化的时候,这个变量`s`就成了这个字符串的“所有者”。
43-
如果我们希望修改这个变量,可以使用`mut`修饰`s`,然后调用 String 类型的成员方法来实现。
42+
当我们声明一个变量`s`,并用 `String` 类型对它进行初始化的时候,这个变量`s`就成了这个字符串的“所有者”。
43+
如果我们希望修改这个变量,可以使用`mut`修饰`s`,然后调用 `String` 类型的成员方法来实现。
4444
`main`函数结束的时候,`s`将会被析构,它管理的内存(不论是堆上的,还是栈上的)则会被释放。
4545

46-
我们一般把变量从出生到死亡的整个阶段,叫作一个变量的“生命周期”。比如这个例子中的局部变量`s`,它的生命周期就是从`let`语句开始,到`main`函数结束。
46+
我们一般把变量从出生到死亡的整个阶段,叫作一个变量的“生命周期”。
47+
比如这个例子中的局部变量`s`,它的生命周期就是从`let`语句开始,到`main`函数结束。
4748

4849
在上述示例的基础上,若做一点修改:
4950

@@ -57,7 +58,7 @@ fn main() {
5758

5859
编译,可见:
5960

60-
```
61+
```rust
6162
error[E0382]: use of moved value: `s`
6263
--> test.rs:5:20
6364
|

docs/第 14 章 NLL/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ Rust 防范“内存不安全”代码的原则极其清晰明了。如果你对
55

66
这个原则是没问题的,但是,初始的实现版本有一个主要问题,那就是它让借用指针的生命周期规则与普通对象的生命周期规则一样,是按作用域来确定的。所有的变量、借用的生命周期就是从它的声明开始,到当前整个语句块结束。这个设计被称为 Lexical Lifetime,因为生命周期是严格和词法中的作用域范围绑定的。这个策略实现起来非常简单,但它可能过于保守了,某些情况下借用的范围被过度拉长了,以至于某些实质上是安全的代码也被阻止了。在某些场景下,限制了程序员的发挥。
77

8-
因此,Rust 核心组又决定引入 Non Lexical Lifetime,用更精细的手段调节借用真正起作用的范围。这就是 NLL
8+
因此,Rust 核心组又决定引入 NLL(Non-Lexical Lifetimes),用更精细的手段调节借用真正起作用的范围。
99

1010
注意:在编写本书时,该功能在编译器中只实现了一小部分。

docs/第 2 章 变量和类型/2.3 复合数据类型.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,8 @@ Rust 的 enum 类型的变量需要区分它里面的数据究竟是哪种变体
416416
在实际中,enum 的内存布局未必是这个样子,编译器有许多优化,可以保证语义正确的同时减少内存使用,并加快执行速度。
417417

418418
如果是在 FFI 场景下,要保证 Rust 里面的 enum 的内存布局和 C 语言兼容的话,
419-
可以给这个 enum 添加一个`#[repr(C, Int)]`属性标签(目前这个设计已经通过,但是还未在编译器中实现)。
419+
可以给这个 enum 添加一个`#[repr(C, Int)]`属性标签(目前[这个设计](https://rust-lang.github.io/rfcs/2195-really-tagged-unions.html)已经通过,但是还未在编译器中实现)。
420+
目前,开发者可通过手动指定 `#[repr(C)]` 和标签值来近似实现其功能,但需注意潜在的兼容性风险。
420421

421422
我们可以试着把前面定义的 Number 类型占用的内存空间大小打印出来看看:
422423

@@ -437,7 +438,7 @@ Size of i32: 4
437438
Size of f32: 4
438439
```
439440

440-
`Number`里面要么存储的是 i32,要么存储的是 f32,它存储数据需要的空间应该是`max(sizeof(i32), sizeof(f32) = max(4 byte,4 byte) = 4 byte`
441+
`Number`里面要么存储的是 `i32`,要么存储的是 `f32`,它存储数据需要的空间应该是`max(sizeof(i32), sizeof(f32) = max(4 byte,4 byte) = 4 byte`
441442
而它总共占用的内存是`8`byte,多出来的`4`byte 就是用于保存类型标记的。之所以用`4`byte,是为了内存对齐。
442443

443444
Rust 里面也支持 union 类型,这个类型与 C 语言中的 union 完全一致。

0 commit comments

Comments
 (0)