首页
/ Hello 算法 Zig 代码如何通过 main.zig 入口运行复杂度与数组章节?

Hello 算法 Zig 代码如何通过 main.zig 入口运行复杂度与数组章节?

2026-09-08 16:26:58作者:秋泉律Samson

克隆 hello-algo 仓库后,如果你想一次性运行 Zig 版“计算复杂度”与“数组与链表”两章的演示代码,入口是 main.zig。构建脚本 build.zig 头部注释明确写有 Zig Version: 0.14.1 以及 Run Command: zig build run | zig build run_*。完成本操作后,终端会依次打印这 9 个文件 run() 函数的执行结果,且没有构建或运行错误。

main.zig 入口执行了哪些内容

main.zig 共 import 了 9 个章节文件,并在 main() 中按固定顺序调用它们的 run()

  1. 计算复杂度章(chapter_computational_complexity):iteration.zigrecursion.zigtime_complexity.zigspace_complexity.zigworst_best_time_complexity.zig
  2. 数组与链表章(chapter_array_and_linkedlist):array.ziglinked_list.ziglist.zigmy_list.zig

注意一个细节:main.zig 本身没有直接 import utilsutils 模块由 build.zig 中的 createUtilsModule 统一以 utils/utils.zig 为根注入到每个模块(exe_mod.addImport("utils", utils_mod)),所以 array.zig 这类文件里的 const utils = @import("utils") 能在构建时解析成功。

运行前置条件

  • Zig 版本build.zig 头部注释注明 Zig Version: 0.14.1,请按 Zig 官方指引安装并保持该版本,避免新版本的构建系统 API 变动导致构建失败。
  • 目录位置:以下命令均假设你位于 codes/zig 目录(main.zigbuild.zig 所在处)。
  • 项目自带的编程环境安装文档 installation.md 覆盖了 Python、C/C++、Java、Go、Rust 等环境,但没有 Zig 专节,因此 Zig 工具链需要自行安装。

用 zig build run 运行 main.zig

cd codes/zig
zig build run

这条命令对应的机制在 build.zigbuildMainExeModule 中:

  • main.zig 为根源码文件创建模块,并注入 utils 模块;
  • 生成名为 main 的可执行文件,安装到构建输出目录;
  • 注册了一个名为 run 的步骤,描述为 Run all hello algo zigzig build run 即触发“编译 + 执行”这一整条链。

结果验证

正常执行时,终端会按 main() 中的调用顺序输出各文件 run() 的结果,进程以退出码 0 结束、无 zig 报错。

以第一个执行的 iteration.zig 为例,其 run()n = 5,用 std.debug.print 打印求和与遍历结果,示例输出(依据该文件的打印语句):

for 循环的求和结果 res = 15
while 循环的求和结果 res = 15

后续的 while 循环(两次更新)、双层 for 循环遍历及各数组操作(随机访问、扩展、插入、删除、遍历等)的结果会依次输出在终端。如果你希望核对某一步的算法逻辑,可以对照文档目录中的图解章节:计算复杂度章见 iteration_and_recursion.md,数组章见 array.md

可选:单独运行其中一个文件

zig build run 会顺序跑完全部 9 个文件。如果只想运行某一个,可以使用 build.zig 头部注释给出的另一种形式 zig build run_*

zig build run_iteration   # 只运行 chapter_computational_complexity/iteration.zig
zig build run_array       # 只运行 chapter_array_and_linkedlist/array.zig

这些步骤由 build.zig 中的 buildExeModuleFromChapterDirEntry 为每个可运行文件动态注册,步骤名为 run_<文件名>,描述形如 Run <章节目录>/<文件名>.zig

需要知道两个限制:

  • build.zig 中维护了一个白名单 new_algo_names,只有 arraylinked_listlistmy_listiterationrecursionspace_complexitytime_complexityworst_best_time_complexity 这 9 个文件可以运行;白名单之外的文件(例如其他章的旧版代码)会在构建阶段被跳过,并触发 error.CanNotRunUseOldZigCodes
  • main.zig 当前也只 import 了上述 9 个文件,其他 Zig 章节未纳入该入口。

可选:运行单元测试

每个可运行的章节文件都带有 test 块(例如 iteration.zigtest "interation",内部调用 try run())。build.zig 头部注明测试命令为:

zig build test
zig build test -Dtest-filter=*

其中 -Dtest-filter 用于跳过不匹配过滤条件的测试(build.zig 中该选项的描述为 Skip tests that do not match any filter),将 * 替换为你想匹配的测试名子串即可只跑部分测试。

限制与下一步

  • 构建版本绑定为 Zig 0.14.1(build.zig),换版本前建议先确认构建脚本兼容。
  • 入口目前覆盖的就是这两章的 9 个文件,属于“临时只添加数组和链表章节”的阶段性状态(build.zig 注释原文),不要假设其他章也能通过 zig build run 一并执行。
  • 运行完成后,可以结合仓库文档中对应章节的动画图解(如 计算复杂度章数组与链表章)核对每个 run() 输出的含义。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
898
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
921
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.8 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
391