Skip to content

Commit 8443e04

Browse files
committed
fix: #182
1 parent 4235d6d commit 8443e04

File tree

9 files changed

+73
-79
lines changed

9 files changed

+73
-79
lines changed

course/.vitepress/sidebar.ts

+24-32
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ export default [
9999
text: "联合类型",
100100
link: "/basic/union",
101101
},
102+
{
103+
text: "零位类型",
104+
link: "/basic/zero-type",
105+
},
102106
{
103107
text: "流程控制",
104108
collapsed: true,
@@ -147,31 +151,44 @@ export default [
147151
text: "内存管理",
148152
link: "/advanced/memory_manage",
149153
},
150-
{
151-
text: "异步",
152-
link: "/advanced/async",
153-
},
154+
154155
{
155156
text: "编译期",
156157
link: "/advanced/comptime",
157158
},
158159
{
159-
text: "包管理",
160-
link: "/advanced/package_management",
160+
text: "反射",
161+
link: "/advanced/reflection",
162+
},
163+
{
164+
text: "异步",
165+
link: "/advanced/async",
161166
},
162167
{
163168
text: "汇编",
164169
link: "/advanced/assembly",
165170
},
171+
{
172+
text: "原子操作",
173+
link: "/advanced/atomic",
174+
},
166175
{
167176
text: "与 C 交互",
168177
link: "/advanced/interact-with-c",
169178
},
179+
{
180+
text: "未定义行为",
181+
link: "/advanced/undefined_behavior",
182+
},
170183
],
171184
},
172185
{
173186
text: "工程化",
174187
items: [
188+
{
189+
text: "包管理",
190+
link: "/advanced/package_management",
191+
},
175192
{
176193
text: "构建系统",
177194
link: "/engineering/build-system",
@@ -180,34 +197,9 @@ export default [
180197
text: "单元测试",
181198
link: "/engineering/unit-test",
182199
},
183-
],
184-
},
185-
{
186-
text: "更多",
187-
items: [
188-
{
189-
text: "反射",
190-
link: "/more/reflection",
191-
},
192-
{
193-
text: "零位类型",
194-
link: "/more/zero-type",
195-
},
196-
{
197-
text: "原子操作",
198-
link: "/more/atomic",
199-
},
200-
{
201-
text: "未定义行为",
202-
link: "/more/undefined_behavior",
203-
},
204200
{
205201
text: "风格指南",
206-
link: "/more/style_guide",
207-
},
208-
{
209-
text: "杂项",
210-
link: "/more/miscellaneous",
202+
link: "/engineering/style_guide",
211203
},
212204
],
213205
},

course/more/atomic.md renamed to course/advanced/atomic.md

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ outline: deep
88
99
目前 zig 提供了一些内建函数来进行原子操作,并且提供了 `std.atomic` 命名空间来实现内存排序、原子数据结构。
1010

11+
> [!TIP]
12+
> 该部分内容更适合在单片机或者某些系统级组件开发上使用,常规使用可以使用 `std.Thread` 命名空间下的类型,包含常规的 `Mutex``Condition``ResetEvent``WaitGroup`等等。
13+
1114
## 内建函数
1215

1316
在讲述下列的内建函数前,我们需要了解一下前置知识:
File renamed without changes.

course/basic/define-variable.md

+46-3
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ zig 使用 `const` 作为关键字来声明常量,它无法再被更改,只
6363
`Debug` 模式下,Zig 将 `0xaa` 字节写入未定义的内存。这是为了尽早发现错误,并帮助检测调试器中未定义内存的使用。但是,此行为只是一种实现功能,而不是语言语义,因此不能保证代码可以观察到它。
6464
:::
6565

66+
## 解构赋值
67+
68+
解构赋值(Destructuring Assignment)是于 `0.12` 新引入的语法,允许对可索引的聚合结构(如元组、向量和数组)进行解构。
69+
70+
<<<@/code/release/define_variable.zig#deconstruct
71+
6672
##
6773

6874
块(block)用于限制变量声明的范围,例如以下代码是非法的:
@@ -81,6 +87,17 @@ x += 1;
8187

8288
上方的 `blk` 是标签名字,它可以是你设置的任何名字。
8389

90+
## 容器
91+
92+
在 Zig 中,**容器** 是充当保存变量和函数声明的命名空间的任何语法结构。容器也是可以实例化的类型定义。结构体、枚举、联合、不透明,甚至 Zig 源文件本身都是容器,但容器并不能包含语句(语句是描述程序运行操作的一个单位)。
93+
94+
当然,你也可以这样理解,容器是一个只包含变量或常量定义以及函数定义的命名空间。
95+
96+
注意:容器和块(block)不同!
97+
98+
> [!IMPORTANT]
99+
> 初次阅读此处困惑是正常的,后面的概念学习完成后此处自通。
100+
84101
## 注释
85102

86103
先来看一下在 zig 中如何正确的书写注释,zig 本身支持三种注释方式,分别是普通注释、文档注释、顶层文档注释。
@@ -105,8 +122,34 @@ PS:说实话,我认为这个设计并不太好。
105122
为什么是作用域顶层呢?实际上,zig 将一个源码文件看作是一个容器。
106123
:::
107124

108-
## 解构赋值
125+
## `usingnamespace`
109126

110-
解构赋值(Destructuring Assignment)是于 `0.12` 新引入的语法,允许对可索引的聚合结构(如元组、向量和数组)进行解构
127+
关键字 `usingnamespace` 可以将一个容器中的所有 `pub` 声明混入到当前的容器中
111128

112-
<<<@/code/release/define_variable.zig#deconstruct
129+
例如,可以使用将 `usingnamespace` 将 std 标准库混入到 `main.zig` 这个容器中:
130+
131+
```zig
132+
const T = struct {
133+
usingnamespace @import("std");
134+
};
135+
pub fn main() !void {
136+
T.debug.print("Hello, World!\n", .{});
137+
}
138+
```
139+
140+
注意:无法在结构体 `T` 内部直接使用混入的声明,需要使用 `T.debug` 这种方式才可以!
141+
142+
`usingnamespace` 还可以使用 `pub` 关键字进行修饰,用于转发声明,这常用于组织 API 文件和 C import。
143+
144+
```zig
145+
pub usingnamespace @cImport({
146+
@cInclude("epoxy/gl.h");
147+
@cInclude("GLFW/glfw3.h");
148+
@cDefine("STBI_ONLY_PNG", "");
149+
@cDefine("STBI_NO_STDIO", "");
150+
@cInclude("stb_image.h");
151+
});
152+
```
153+
154+
> [!IMPORTANT]
155+
> 初次阅读此处困惑是正常的,后面的概念学习完成后此处自通。
File renamed without changes.
File renamed without changes.

course/more/miscellaneous.md

-44
This file was deleted.

0 commit comments

Comments
 (0)