Skip to content

Commit 6ca9ea8

Browse files
authored
docs(course): 优化表述与修正措辞 (#259)
* docs(course): 优化表述与修正措辞 - 调整 build-system.md 中并发编译相关描述,使语义更准确 - 优化 package_management.md 对官方包管理器的介绍 - 改进 install-environment.md 关于 Zig 发布周期的说明 - 精简 hello-world.md 中 main 函数和 print 函数的说明,提升可读性 - 修改 prologue.md 中关于“为何学习 low level 语言”的表述 * style(update): 优化发行说明表述 - 修改 0.12.0 版本说明,使语句更简洁易读 - 优化 0.13.0 版本锁实现描述,提升表达准确性 - 修正 0.14.0 版本目标修复说明中的措辞 * docs(readme): 修正文档标点和格式 - 将“开发命令:”修改为“开发命令:” - 修复文档末尾缺失换行符问题 * feat(docs): 优化基础类型与环境配置文档表达 - 修正多处语句表述,使语言更准确流畅 - 统一术语与格式,提升文档一致性 - 优化编辑器与安装环境相关说明,增强可读性 - 补充部分命令用法与示例,便于新手理解 - 修正部分技术细节描述,确保内容准确 * feat(course): 优化 hello world 教程内容与表达 - 改进整体表述,使语言更简洁易懂 - 明确区分调试与生产环境下的输出方式 - 增加对缓冲区与线程安全输出的说明 - 丰富代码解析,补充格式化字符串与参数讲解 - 补充相关提示与外部学习资源链接 * chore(deps): 更新依赖版本 - 升级 @types/node 至 24.0.10 - 升级 prettier 至 3.6.2 * docs(basic): 修正文档格式与空行一致性 - 统一部分 Markdown 文件的结尾换行符 - 为列表前增加空行,提升可读性 - 保持文档风格一致,便于后续维护 * docs(basic): 优化基础类型与高级类型章节中文表述 - 优化数组、枚举、结构体、指针、切片、字符串、向量、联合类型等基础与高级类型文档的中文表述 - 统一术语表达,提升可读性与准确性 - 修正部分技术细节描述,使其更贴合 Zig 语言规范 - 增强示例注释,便于初学者理解 - 补充部分章节的提示与说明,完善文档结构 - 优化变量声明、错误处理、可选类型、流程控制等章节的中文表达 - 统一术语,调整部分章节标题,更符合中文技术文档习惯 - 修正部分示例代码的描述与注释 - 增强对 Zig 语言特性的解释,便于中文读者理解 - 细化零大小类型相关内容,完善类型系统介绍 - 统一“零位类型”为“零大小类型”,并补充相关示例说明 - 全面提升文档中文表达质量,便于后续维护与推广 * feat(advanced): 优化 Zig 汇编方式与内联汇编表述 - 明确区分外部汇编与内联汇编两种方式 - 优化内联汇编定义,使表述更准确易懂 * style: 修正文档标点和列表格式 - 统一中文句号为全角 - 修正无序列表缩进,使用标准 markdown 语法 - 保持内容一致性,提升可读性 * fix(docs): 修正文档中的错别字与表述不当 - 统一术语表述,如“效验和”改为“校验和” - 修正英文单词拼写错误(如 vedio→video、tunk→trunk、finisho→finish) - 优化部分语句表达,使其更通顺准确 - 补充或调整部分引用和注释内容 - 规范部分格式和标点用法 * docs(examples): 修正 I/O 多路复用描述中的格式 - 将“文件描述符”改为斜体以统一格式 - 优化文档可读性 * chore(deps): 更新开发依赖版本 - 升级 @types/node 至 24.0.10 - 升级 prettier 至 3.6.2 * fix(update): 修正文档错别字与术语不一致 - 统一“三重”术语为“三元组” - 修正“tokenizer”为“标记器” - 修复“deflat e”为“deflate” - 更正“a comptime var”为“`comptime var`” - 修改“不在允许”为“不再允许” - 去除 `Compile.installHeader` 多余空格 - 修正变量名拼写错误 `dep_foor_bar` 为 `dep_foo_bar`
1 parent 016c192 commit 6ca9ea8

40 files changed

+623
-636
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ bun dev # 启动热更开发服务
4545
- 等待 Review
4646
- 合并到上游仓库,并由 GitHub Action 自动构建
4747

48-
**开发命令:**
48+
**开发命令**
4949

5050
```sh
5151
bun i # 安装依赖
@@ -61,4 +61,4 @@ bun run preview # 运行预览
6161
> [!NOTE]
6262
> 本文档所使用的构建工具为 [bunjs](https://bun.sh/),在提交时请勿将其他 nodejs 的包管理工具的额外配置文件添加到仓库中。
6363
64-
> 如需要更新依赖,请参照此处 [Lockfile](https://bun.sh/docs/install/lockfile) 先设置 git 使用 bun 来 diff 文件!
64+
> 如需要更新依赖,请参照此处 [Lockfile](https://bun.sh/docs/install/lockfile) 先设置 git 使用 bun 来 diff 文件!

bun.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"@giscus/vue": "^3.1.1",
77
},
88
"devDependencies": {
9-
"@types/node": "^24.0.7",
10-
"prettier": "^3.6.0",
9+
"@types/node": "^24.0.10",
10+
"prettier": "^3.6.2",
1111
"vitepress": "^1.6.3",
1212
"vitepress-export-pdf": "^1.0.0",
1313
},
@@ -204,7 +204,7 @@
204204

205205
"@types/mdurl": ["@types/[email protected]", "", {}, "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg=="],
206206

207-
"@types/node": ["@types/[email protected].7", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw=="],
207+
"@types/node": ["@types/[email protected].10", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA=="],
208208

209209
"@types/trusted-types": ["@types/[email protected]", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="],
210210

@@ -548,7 +548,7 @@
548548

549549
"preact": ["[email protected]", "", {}, "sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw=="],
550550

551-
"prettier": ["[email protected].0", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw=="],
551+
"prettier": ["[email protected].2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="],
552552

553553
"progress": ["[email protected]", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="],
554554

course/advanced/assembly.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ outline: deep
1313
3. 内核的开发,现代化内核编写时均会使用汇编来完成一些初始化工作,如 bootloader,分段分页,中断处理等。
1414
4. 程序的优化,高级语言的编译器并不是完美的,它有时会做出反而使程序变慢的“优化”,而汇编语言完全由程序员控制。
1515

16-
zig 中使用汇编有两种方式,引入外部的内联汇编,内联汇编大概是使用最多的情况
16+
Zig 中使用汇编有两种主要方式:外部汇编和内联汇编。内联汇编是更常用的方式
1717

1818
::: info 🅿️ 提示
1919

@@ -47,7 +47,7 @@ outline: deep
4747

4848
## 内联汇编
4949

50-
内联汇编给予了我们可以将 `low-level` 的汇编代码和高级语言相组合,实现更加高效或者更直白的操作
50+
内联汇编允许我们将底层汇编代码与高级语言相结合,以实现更高效或更直接的操作
5151

5252
<<<@/code/release/assembly.zig#inline_assembly
5353

course/basic/advanced_type/array.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,94 +4,94 @@ outline: deep
44

55
# 数组
66

7-
数组是日常敲代码使用相当频繁的类型之一,在 zig 中,数组的分配和 C 类似,均是在内存中连续分配且固定数量的相同类型元素
7+
数组是日常编程中使用相当频繁的数据类型之一,在 Zig 中,数组的内存分配方式与 C 类似:在内存中连续分配固定数量的相同类型的元素
88

9-
因此数组有以下三点特性
9+
因此,数组具有以下三个特性
1010

1111
- 长度固定
1212
- 元素必须有相同的类型
1313
- 依次线性排列
1414

1515
## 创建数组
1616

17-
zig 中,你可以使用以下的方法,来声明并定义一个数组
17+
Zig 中,你可以使用以下方式来声明并定义一个数组
1818

1919
<<<@/code/release/array.zig#create_array
2020

21-
以上代码展示了定义一个字面量数组的方式,其中你可以选择指明数组的大小或者使用 `_` 代替。使用 `_` 时,zig 会尝试自动计算数组的长度
21+
以上代码展示了如何定义一个字面量数组。其中,你可以明确指定数组的大小,也可以使用 `_` 让 Zig 自动推断数组的长度
2222

23-
数组元素是连续放置的,故我们可以使用下标来访问数组的元素,下标索引从 `0` 开始
23+
数组元素是连续存放的,因此我们可以通过下标来访问数组元素。下标索引从 `0` 开始
2424

25-
关于[越界问题](https://ziglang.org/documentation/master/#Index-out-of-Bounds)zig 在编译期和运行时均有完整的越界保护和完善的堆栈错误跟踪
25+
关于[越界问题](https://ziglang.org/documentation/master/#Index-out-of-Bounds)Zig 在编译期和运行时都提供了完整的越界保护和完善的堆栈错误跟踪
2626

2727
### 解构数组
2828

29-
我们在变量声明的章节提到了,数组可以结构,再来回忆一下
29+
我们在变量声明的章节中提到过,数组可以被解构。让我们回顾一下
3030

3131
<<<@/code/release/array.zig#deconstruct
3232

3333
### 多维数组
3434

35-
多维数组(矩阵)实际上就是嵌套数组,我们很容易就可以创建一个多维数组出来
35+
多维数组(矩阵)实际上就是嵌套的数组。我们可以很容易地创建一个多维数组
3636

3737
<<<@/code/release/array.zig#matrix
3838

39-
在以上的示例中,我们使用了 [for](/basic/process_control/loop) 循环,来进行矩阵的打印,关于循环我们放在后面再聊
39+
在以上示例中,我们使用了 [for](/basic/process_control/loop) 循环来打印矩阵。关于循环的更多细节,我们将在后续章节讨论
4040

4141
## 哨兵数组(标记终止数组)
4242

43-
> 很抱歉,这里的名字是根据官方的文档直接翻译过来的,原文档应该是 ([Sentinel-Terminated Arrays](https://ziglang.org/documentation/master/#toc-Sentinel-Terminated-Arrays))
43+
> 该名称直接翻译自官方文档的 ([Sentinel-Terminated Arrays](https://ziglang.org/documentation/master/#toc-Sentinel-Terminated-Arrays))。
4444
4545
:::info
4646

47-
本质上来说,这是为了兼容 C 中的规定的字符串结尾字符`\0`
47+
其本质是为了兼容 C 语言中以 `\0` 作为结尾的字符串。
4848

4949
:::
5050

51-
我们使用语法 `[N:x]T` 来描述一个元素为类型 `T`,长度为 `N` 的数组,在它对应 `N` 的索引处的值应该是 `x`前面的说法可能比较复杂,换种说法,就是这个语法表示数组的长度索引处的元素应该是 `x`,具体可以看下面的示例
51+
我们使用 `[N:x]T` 语法来定义一个哨兵数组。它表示一个长度为 `N`、元素类型为 `T` 的数组,并且在索引 `N` 处的值固定为 `x`换言之,在数组末尾有一个值为 `x` 的哨兵元素。请看下面的示例
5252

5353
<<<@/code/release/array.zig#terminated_array
5454

5555
:::info 🅿️ 提示
5656

57-
注意:只有在使用哨兵时,数组才会有索引为数组长度的元素
57+
注意:只有哨兵数组才能访问到索引为数组长度的元素
5858

5959
:::
6060

6161
## 操作
6262

6363
:::info
6464

65-
以下操作都是编译期 (comptime) 的,如果你需要运行时地处理数组操作,请使用 `std.mem`
65+
以下操作都是在编译期(comptime)执行的。如果需要在运行时处理数组,请使用 `std.mem`
6666

6767
:::
6868

6969
### 乘法
7070

71-
可以使用 `**` 对数组做乘法操作,运算符左侧是数组,右侧是倍数,进行矩阵的叠加
71+
可以使用 `**` 对数组进行乘法操作。运算符左侧是数组,右侧是重复的次数,最终会生成一个更长的数组
7272

7373
<<<@/code/release/array.zig#multiply
7474

7575
### 串联
7676

77-
数组之间可以使用 `++` 进行串联操作(编译期),只要两个数组的元素类型相同,它们就可以串联!
77+
可以使用 `++` 在编译期对数组进行串联。只要两个数组的元素类型相同,它们就可以被连接起来。
7878

7979
<<<@/code/release/array.zig#connect
8080

8181
## 奇技淫巧
8282

83-
受益于 zig 自身的语言特性,我们可以实现某些其他语言所不具备的方式来操作数组
83+
得益于 Zig 独特的语言特性,我们可以用一些在其他语言中不常见的方式来操作数组
8484

8585
### 使用函数初始化数组
8686

87-
可以使用函数来初始化数组,函数要求返回一个数组的元素或者一个数组
87+
我们可以使用函数来初始化数组。该函数需要返回数组的单个元素或整个数组
8888

8989
<<<@/code/release/array.zig#func_init_array
9090

9191
### 编译期初始化数组
9292

93-
通过编译期来初始化数组,以此来抵消运行时的开销!
93+
我们可以在编译期初始化数组,从而避免运行时的开销。
9494

9595
<<<@/code/release/array.zig#comptime_init_array
9696

97-
这个示例中,我们使用了编译期的功能,来帮助我们实现这个数组的初始化,同时还利用了 `blocks``break` 的性质,关于这个我们会在 [循环](/basic/process_control/loop) 讲解!
97+
在这个示例中,我们利用编译期执行的特性来初始化数组,并结合了 `blocks``break` 的用法。关于这些,我们将在[循环](/basic/process_control/loop)章节中详细讲解。

course/basic/advanced_type/enum.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ outline: deep
44

55
# 枚举
66

7-
> 枚举常常用来列出一个有限集合的任何成员,或者对某一种特定对象的计数
7+
> 枚举常用于表示一个有限集合的成员,或对特定类型的对象进行分类
88
9-
枚举是一种相对简单,但用处颇多的类型
9+
枚举是一种相对简单但用途广泛的类型
1010

1111
## 声明枚举
1212

13-
我们可以通过使用 `enum` 关键字来很轻松地声明并使用枚举
13+
我们可以通过 `enum` 关键字轻松地声明和使用枚举
1414

1515
<<<@/code/release/enum.zig#basic_enum
1616

17-
同时,zig 还允许我们访问并操作枚举的标记值
17+
同时,Zig 还允许我们访问和操作枚举的标记值
1818

1919
<<<@/code/release/enum.zig#enum_with_value
2020

@@ -24,33 +24,33 @@ outline: deep
2424

2525
::: info 🅿️ 提示
2626

27-
枚举类型支持使用 `if``switch` 进行匹配,具体见对应章节
27+
枚举类型支持使用 `if``switch` 进行匹配,具体细节请参见相应章节
2828

2929
:::
3030

3131
## 枚举方法
3232

33-
没错,枚举也可以拥有方法,实际上枚举仅仅是一种命名空间(你可以看作是一类 struct)。
33+
是的,枚举也可以拥有方法。实际上,枚举在 Zig 中是一种特殊的命名空间(可以看作一种特殊的 `struct`)。
3434

3535
<<<@/code/release/enum.zig#enum_with_method
3636

3737
## 枚举大小
3838

39-
要注意的是,枚举的大小是会经过 zig 编译器进行严格的计算,如以上的枚举类型 `Type` ,它大小等效于 `u1`
39+
需要注意的是,Zig 编译器会严格计算枚举的大小。例如,前面示例中的 `Type` 枚举,其大小等效于 `u1`
4040

41-
以下示例中,我们使用了内建函数 `@typeInfo``@tagName` 来获取枚举的大小和对应的 tag name:
41+
以下示例中,我们使用了内建函数 `@typeInfo``@tagName` 来获取枚举的大小和对应的标签名称(tag name
4242

4343
<<<@/code/release/enum.zig#enum_size
4444

4545
## 枚举推断
4646

47-
枚举也支持让 zig 编译器自动进行推断(使用结果位置语义),即在已经知道枚举的类型情况下仅使用字段来指定枚举的值
47+
枚举也支持类型推断(通过结果位置语义),即在已知枚举类型的情况下,可以仅使用字段名来指定枚举值
4848

4949
<<<@/code/release/enum.zig#enum_reference
5050

5151
## 非详尽枚举
5252

53-
zig 允许我们不列出所有的枚举值,未列出枚举值可以使用 `_` 代替。由于未列出枚举值的存在,枚举的大小无法自动推断,必须显式指定
53+
Zig 允许我们定义非详尽枚举,即在定义时无需列出所有可能的成员。未列出的成员可以使用 `_` 来表示。由于存在未列出的成员,编译器无法自动推断枚举的大小,因此必须显式指定其底层类型
5454

5555
<<<@/code/release/enum.zig#non_exhaustive_enum
5656

@@ -68,25 +68,25 @@ zig 允许我们不列出所有的枚举值,未列出枚举值可以使用 `_`
6868

6969
::: info 🅿️ 提示
7070

71-
此部分内容并非是初学者需要掌握的内容,它涉及到 zig 本身的类型系统和 [编译期反射](../../advanced/reflection#构建新的类型),可以暂且跳过!
71+
此部分内容并非初学者需要掌握的内容,它涉及到 Zig 的类型系统和[编译期反射](../../advanced/reflection#构建新的类型),可以暂且跳过!
7272

7373
:::
7474

75-
zig 还包含另外一个特殊的类型 `EnumLiteral`,它是 [`std.builtin.Type`](https://ziglang.org/documentation/master/std/#std.builtin.Type) 的一部分。
75+
Zig 还包含一个特殊的类型 `EnumLiteral`,它是 [`std.builtin.Type`](https://ziglang.org/documentation/master/std/#std.builtin.Type) 的一部分。
7676

77-
可以将它称之为“枚举字面量”它是一个与 `enum` 完全不同的类型可以查看 zig 类型系统对 `enum` [定义](https://ziglang.org/documentation/master/std/#std.builtin.Type.Enum)并不包含 `EnumLiteral`
77+
我们可以称之为“枚举字面量”它是一个与 `enum` 完全不同的类型可以查看 Zig 类型系统对 `enum`[定义](https://ziglang.org/documentation/master/std/#std.builtin.Type.Enum)其中并不包含 `EnumLiteral`
7878

79-
它的具体使用如下
79+
它的具体用法如下
8080

8181
<<<@/code/release/enum.zig#enum_literal
8282

83-
注意:此类型常用于作为函数参数!
83+
注意:此类型常用于函数参数。
8484

8585
## extern
8686

87-
注意,我们不在这里使用 `extern` 关键字。
87+
注意,我们通常不直接对枚举使用 `extern` 关键字。
8888

89-
默认情况下,zig 不保证枚举和 C ABI 兼容,但是我们可以通过指定标记类型来达到这一效果
89+
默认情况下,Zig 不保证枚举与 C ABI 兼容,但我们可以通过指定其标记类型来确保兼容性
9090

9191
```zig
9292
const Foo = enum(c_int) { a, b, c };

course/basic/advanced_type/opaque.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ outline: deep
44

55
# opaque
66

7-
`opaque` 类型声明一个具有未知(但非零)大小和对齐方式的新类型,它的内部可以包含与结构、联合和枚举相同的声明
7+
`opaque` 类型用于声明一个大小和对齐方式未知(但非零)的新类型。其内部可以像结构体、联合或枚举一样包含声明
88

9-
这通常用于保证与不公开结构详细信息的 C 代码交互时的类型安全
9+
这通常用于与 C 代码交互时,确保类型安全,尤其是在 C 代码没有公开结构体细节的情况下
1010

1111
<<<@/code/release/opaque.zig#opaque
1212

1313
## anyopaque
1414

15-
`anyopaque` 是一个比较特殊的类型,代表可以接受任何类型的 `opaque`(由于 `opaque` 拥有不同的变量/常量声明和方法的定义,故是不同的类型),常用于与 C 交互的函数中,可以当作 C 的 `void` 类型来使用,一般用于类型擦除指针!
15+
`anyopaque` 是一个特殊的类型,它可以代表任意一种 `opaque` 类型(因为每个 `opaque` 类型根据其内部声明的不同而被视为不同类型)。它常用于与 C 交互的函数中,类似于 C 的 `void*`,通常用于类型擦除的指针。
1616

1717
:::info 🅿️ 提示
1818

19-
需要注意`void` 的已知大小为 0 字节,而 `anyopaque` 大小未知,但非零
19+
需要注意的是`void` 的大小为 0 字节,而 `anyopaque` 的大小未知但非零
2020

2121
:::
2222

0 commit comments

Comments
 (0)