Hello 算法 Zig 代码如何通过 main.zig 入口运行复杂度与数组章节?
克隆 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():
- 计算复杂度章(
chapter_computational_complexity):iteration.zig、recursion.zig、time_complexity.zig、space_complexity.zig、worst_best_time_complexity.zig; - 数组与链表章(
chapter_array_and_linkedlist):array.zig、linked_list.zig、list.zig、my_list.zig。
注意一个细节:main.zig 本身没有直接 import utils。utils 模块由 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.zig与build.zig所在处)。 - 项目自带的编程环境安装文档 installation.md 覆盖了 Python、C/C++、Java、Go、Rust 等环境,但没有 Zig 专节,因此 Zig 工具链需要自行安装。
用 zig build run 运行 main.zig
cd codes/zig
zig build run
这条命令对应的机制在 build.zig 的 buildMainExeModule 中:
- 以
main.zig为根源码文件创建模块,并注入utils模块; - 生成名为
main的可执行文件,安装到构建输出目录; - 注册了一个名为
run的步骤,描述为Run all hello algo zig,zig 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,只有array、linked_list、list、my_list、iteration、recursion、space_complexity、time_complexity、worst_best_time_complexity这 9 个文件可以运行;白名单之外的文件(例如其他章的旧版代码)会在构建阶段被跳过,并触发error.CanNotRunUseOldZigCodes。 main.zig当前也只 import 了上述 9 个文件,其他 Zig 章节未纳入该入口。
可选:运行单元测试
每个可运行的章节文件都带有 test 块(例如 iteration.zig 的 test "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),将 * 替换为你想匹配的测试名子串即可只跑部分测试。
限制与下一步
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python08
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00