Skip to content

Commit 3960f21

Browse files
committed
fix: remove extra space before footnote reference
1 parent 2740a44 commit 3960f21

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

content/post/2026-01-25-zig-build-deep-dive.smd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Zig 构建系统巧妙地融合了这两者的优势,采用了一种**两阶
2929

3030
在 Zig 中,build.zig 文件本质上是一个标准的 Zig 源代码文件,它包含一个公开的 build 函数。当用户运行 zig build 命令时,系统首先编译并执行这个 build.zig 文件 6。在这个阶段,开发者可以使用完整的 Zig 语言特性——包括 if 条件判断、for 循环、自定义函数、文件 I/O 操作等——来描述构建过程。这就是所谓的**命令式定义**。
3131

32-
然而,build 函数的执行并不会直接触发编译或链接操作。相反,build 函数中的 API 调用(如 b.addExecutable 或 b.addLibrary)实际上是在内存中构建一个**构建图**(Build Graph),即一个有向无环图(DAG) 7。例如,当代码中调用 const exe \= b.addExecutable(...) 时,它仅仅是在图中创建了一个代表编译任务的节点(Step),而没有立即调用编译器。
32+
然而,build 函数的执行并不会直接触发编译或链接操作。相反,build 函数中的 API 调用(如 b.addExecutable 或 b.addLibrary)实际上是在内存中构建一个**构建图**(Build Graph),即一个有向无环图(DAG)7。例如,当代码中调用 const exe \= b.addExecutable(...) 时,它仅仅是在图中创建了一个代表编译任务的节点(Step),而没有立即调用编译器。
3333

3434
当 build 函数执行完毕后,内存中就形成了一个完整的、静态的依赖关系图。随后的**执行阶段**则完全是声明式的:构建运行器(Build Runner)遍历这个 DAG,根据依赖关系决定执行顺序,并利用并发机制并行执行那些互不依赖的步骤 8。
3535

0 commit comments

Comments
 (0)