Skip to content

feat: 支持 Zig 0.17.0(版本说明、升级指南与示例代码适配) - #390

Merged
jinzhongjia merged 17 commits into
mainfrom
feat/zig-0.17
Oct 5, 2026
Merged

jinzhongjia merged 17 commits into
mainfrom
feat/zig-0.17

Conversation

@jinzhongjia

@jinzhongjia jinzhongjia commented Oct 4, 2026 •

Copy link
Copy Markdown
Member

概述

为教程增加 Zig 0.17.0(2026/10/2 发布)的支持:新增版本说明与升级指南,新增 0.17 构建脚本与示例代码,并把 release 示例与正文同步到 0.17。

主要改动

文档

  • 新增 0.17.0 版本说明(course/update/0.17.0-description.md):目标支持、系统最低版本、语言、标准库、构建系统、编译器、链接器、工具链、已知回归与路线图
  • 新增 0.17.0 升级指南(course/update/upgrade-0.17.0.md):推荐的升级顺序 + 逐项迁移前后对比代码(指南中的新写法均已在 0.17 下编译验证)
  • 侧边栏“版本说明”加入两篇新文档;站点显示版本更新为 0.17.0
  • 正文同步:数组(** → @splat)、枚举(@backingInt / @fromBackingInt)、指针对齐、结构体(@bitCast 新语义)、错误处理(errdefer 捕获移除)、反射(SoA 风格类型信息、@hasDecl)、内存管理(SafeAllocator、BufferFirstAllocator)、与 C 交互(@cImport 移除 → translate-c 包)、构建系统(configure / make 分离)等

代码

  • build.zig 增加 0.17 分支,新增 build/0.17.zig
    • 使用 b.root 代替已移除的 b.build_root
    • 配置阶段遍历示例目录前调用 b.dependOnDirectoryContents,保证新增示例后配置缓存能正确失效
    • 仅对确实需要 libc 的示例链接 libc
  • 新增 course/code/17/,course/code/release/ 同步为其内容
  • build_system 示例:不再在 build 函数中直接 spawn 子进程,改为 Run 步骤;b.args → addPassthruArgs()
  • import_vcpkg 示例迁移到官方 translate-c 包(2.0.0)

CI

  • 构建矩阵加入 0.17.0(0.17 要求 macOS 15+,现有 macos-15 runner 满足)
  • 新增 lint-0_17 任务:0.17 的 zig fmt 无法解析旧版本示例中已移除的语法,因此只检查 0.17 相关代码;原有 0.16 lint 保持不变

其他

  • README / AGENTS.md 中的版本支持范围更新为 0.11-0.17

验证

  • Zig 0.17.0:根目录 zig build 全部 132 个步骤通过(含所有单文件示例的运行与测试、子项目构建)
  • Zig 0.16.0:根目录回归构建通过(仅 tinytetris 在本机因 0.16 自带 libcxx 与本机 macOS SDK 不兼容而失败,与本 PR 无关,course/code/16 未改动)
  • zig fmt --check:0.16 全仓库通过,0.17 对 build.zig、build/0.17.zig、course/code/17、course/code/release 通过
  • prettier --check 通过
  • vitepress build 通过;全部 285 处 <<<@/code/...#anchor 引用均能在 release 中找到对应 region

需要关注

  • 发布说明中把重做后的分配器称为 StackFallbackAllocator,但 0.17.0 标准库中的实际名称是 std.heap.BufferFirstAllocator,文档以标准库为准并做了说明
  • import_vcpkg 依赖 Windows + vcpkg + gsl,仍保持“仅用于文档展示、默认构建为空操作”,translate-c 的用法用桩模块验证过编译
  • 本地只在 macOS 上验证,Linux / Windows 以 CI 结果为准
  • 现有 CI 矩阵中一直没有 0.16.0,本 PR 未改变这一点

- build.zig 增加 0.17 分支,新增 build/0.17.zig(适配 configure/make 分离、b.root、dependOnDirectoryContents)
- 新增 course/code/17,适配数组乘法移除、errdefer 捕获移除、@backingInt、SoA 类型信息、@hasDecl、SafeAllocator、@bitcast 新语义等
- 构建系统示例改用 addPassthruArgs 与 Run 步骤,import_vcpkg 迁移到 translate-c 包
- course/code/release 同步为 17 的内容
- 更新数组、枚举、指针、结构体、错误处理、反射、内存管理、与 C 交互、构建系统等章节
- 站点显示版本更新为 0.17.0
@coderabbitai

coderabbitai Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 146 files, which is 46 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ac4bc468-ceb8-473c-9f6e-84302a430d0b
📥 Commits

Reviewing files that changed from the base of the PR and between 04b8773 and f99ff0f.

📒 Files selected for processing (146)
  • .github/workflows/build.yml
  • .github/workflows/check.yml
  • AGENTS.md
  • README.md
  • build.zig
  • build/0.17.zig
  • course/.vitepress/sidebar.ts
  • course/.vitepress/theme/config.ts
  • course/advanced/assembly.md
  • course/advanced/interact-with-c.md
  • course/advanced/memory_manage.md
  • course/advanced/reflection.md
  • course/advanced/result-location.md
  • course/advanced/type_cast.md
  • course/advanced/undefined_behavior.md
  • course/basic/advanced_type/array.md
  • course/basic/advanced_type/enum.md
  • course/basic/advanced_type/opaque.md
  • course/basic/advanced_type/pointer.md
  • course/basic/advanced_type/struct.md
  • course/basic/advanced_type/vector.md
  • course/basic/basic_type/function.md
  • course/basic/basic_type/number.md
  • course/basic/define-variable.md
  • course/basic/error_handle.md
  • course/basic/process_control/unreachable.md
  • course/basic/union.md
  • course/basic/zero-type.md
  • course/code/17/array.zig
  • course/code/17/assembly.zig
  • course/code/17/atomic.zig
  • course/code/17/build_system/README.md
  • course/code/17/build_system/basic/build.zig
  • course/code/17/build_system/basic/build.zig.zon
  • course/code/17/build_system/basic/src/main.zig
  • course/code/17/build_system/build.zig
  • course/code/17/build_system/cli/build.zig
  • course/code/17/build_system/cli/build.zig.zon
  • course/code/17/build_system/cli/src/main.zig
  • course/code/17/build_system/docs/build.zig
  • course/code/17/build_system/docs/build.zig.zon
  • course/code/17/build_system/docs/src/root.zig
  • course/code/17/build_system/embedfile/build.zig
  • course/code/17/build_system/embedfile/build.zig.zon
  • course/code/17/build_system/embedfile/src/hello.txt
  • course/code/17/build_system/embedfile/src/main.zig
  • course/code/17/build_system/externalfile/build.zig
  • course/code/17/build_system/externalfile/build.zig.zon
  • course/code/17/build_system/externalfile/src/main.zig
  • course/code/17/build_system/lib/build.zig
  • course/code/17/build_system/lib/build.zig.zon
  • course/code/17/build_system/lib/src/main.zig
  • course/code/17/build_system/lib/src/root.zig
  • course/code/17/build_system/main.zig
  • course/code/17/build_system/options/build.zig
  • course/code/17/build_system/options/build.zig.zon
  • course/code/17/build_system/options/src/main.zig
  • course/code/17/build_system/step/build.zig
  • course/code/17/build_system/step/build.zig.zon
  • course/code/17/build_system/step/src/main.zig
  • course/code/17/build_system/system_lib/build.zig
  • course/code/17/build_system/system_lib/build.zig.zon
  • course/code/17/build_system/system_lib/src/main.zig
  • course/code/17/build_system/test/build.zig
  • course/code/17/build_system/test/build.zig.zon
  • course/code/17/build_system/test/src/main.zig
  • course/code/17/build_system/test/src/root.zig
  • course/code/17/build_system/tinytetris/build.zig
  • course/code/17/build_system/tinytetris/build.zig.zon
  • course/code/17/build_system/tinytetris/src/main.cc
  • course/code/17/char-and-boolean.zig
  • course/code/17/comptime.zig
  • course/code/17/decision.zig
  • course/code/17/defer.zig
  • course/code/17/define_variable.zig
  • course/code/17/echo_tcp_server.zig
  • course/code/17/enum.zig
  • course/code/17/error_handle.zig
  • course/code/17/function.zig
  • course/code/17/hello_world.zig
  • course/code/17/import_dependency_build/build.zig
  • course/code/17/import_dependency_build/pkg1/build.zig
  • course/code/17/import_dependency_build/pkg1/build.zig.zon
  • course/code/17/import_dependency_build/pkg2/build.zig
  • course/code/17/import_dependency_build/pkg2/build.zig.zon
  • course/code/17/import_vcpkg/build.zig
  • course/code/17/import_vcpkg/build.zig.zon
  • course/code/17/import_vcpkg/src/gsl.h
  • course/code/17/import_vcpkg/src/main.zig
  • course/code/17/interact_with_c.zig
  • course/code/17/loop.zig
  • course/code/17/memory_manager.zig
  • course/code/17/number.zig
  • course/code/17/opaque.zig
  • course/code/17/optional_type.zig
  • course/code/17/package_management_exporter/Readme.md
  • course/code/17/package_management_exporter/build.zig
  • course/code/17/package_management_exporter/build.zig.zon
  • course/code/17/package_management_exporter/src/root.zig
  • course/code/17/package_management_importer/Readme.md
  • course/code/17/package_management_importer/build.zig
  • course/code/17/package_management_importer/build.zig.zon
  • course/code/17/package_management_importer/src/main.zig
  • course/code/17/pointer.zig
  • course/code/17/reflection.zig
  • course/code/17/result-location.zig
  • course/code/17/slice.zig
  • course/code/17/string.zig
  • course/code/17/struct.zig
  • course/code/17/switch.zig
  • course/code/17/type-cast.zig
  • course/code/17/union.zig
  • course/code/17/unit_test.zig
  • course/code/17/unreachable.zig
  • course/code/17/vector.zig
  • course/code/release/array.zig
  • course/code/release/build_system/basic/src/main.zig
  • course/code/release/build_system/build.zig
  • course/code/release/build_system/cli/src/main.zig
  • course/code/release/build_system/embedfile/build.zig
  • course/code/release/build_system/externalfile/build.zig
  • course/code/release/build_system/step/build.zig
  • course/code/release/build_system/test/src/main.zig
  • course/code/release/build_system/tinytetris/build.zig
  • course/code/release/enum.zig
  • course/code/release/error_handle.zig
  • course/code/release/import_dependency_build/build.zig
  • course/code/release/import_vcpkg/build.zig
  • course/code/release/import_vcpkg/src/gsl.h
  • course/code/release/import_vcpkg/src/main.zig
  • course/code/release/interact_with_c.zig
  • course/code/release/loop.zig
  • course/code/release/memory_manager.zig
  • course/code/release/opaque.zig
  • course/code/release/pointer.zig
  • course/code/release/reflection.zig
  • course/code/release/result-location.zig
  • course/code/release/struct.zig
  • course/code/release/switch.zig
  • course/engineering/build-system.md
  • course/engineering/package_management.md
  • course/environment/zig-command.md
  • course/examples/echo_tcp_server.md
  • course/hello-world.md
  • course/update/0.17.0-description.md
  • course/update/upgrade-0.17.0.md

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread course/update/0.17.0-description.md Outdated
Comment thread course/update/0.17.0-description.md Outdated
Comment thread course/update/0.17.0-description.md Outdated
Comment thread course/update/0.17.0-description.md Outdated
Comment thread course/update/0.17.0-description.md Outdated
Comment thread course/update/0.17.0-description.md Outdated
Comment thread course/update/0.17.0-description.md Outdated
Comment thread course/update/upgrade-0.17.0.md Outdated
Comment thread course/update/upgrade-0.17.0.md Outdated
Comment thread course/update/upgrade-0.17.0.md Outdated
@jinzhongjia
jinzhongjia force-pushed the feat/zig-0.17 branch 2 times, most recently from 81a3e91 to 1b89447 Compare October 5, 2026 05:48
basic、cli、test 子项目中的测试沿用了旧版 init 模板的写法,在 0.17 下无法通过;同时根构建只执行了 zig build,测试代码从未被编译。现在对带 test 步骤的子项目额外执行 zig build test。
0.17 起 build 函数应当没有副作用,原脚本在配置阶段直接读取 cwd 并执行操作,改为通过 b.root 与构建步骤完成。
WhileBasic 是文档中用来讲解 continue 表达式的反例,在 i == 5 时会陷入死循环,导致 loop 示例运行后无法退出。保留对该函数的引用以确保它仍会被编译检查。
包括 **、void{}、i0、std.builtin、addTranslateC 推荐写法,并补充 @bitcast 在 0.17 中的语义变化。
- zig fmt 只会在 ** 与 errdefer |err| 上解析失败,void{} 与 i0 仍可解析;并且会自动为 @fromBackingInt 补上 @intcast
- std.zon.parse 的前后对照示例改为实际可编译的写法(std.zon 并未导出 fromSlice)
- 补充 std.fs.path 自 0.16.0 起已被弃用的说明
@jinzhongjia
jinzhongjia merged commit 00ddf31 into main Oct 5, 2026
44 checks passed
@jinzhongjia
jinzhongjia deleted the feat/zig-0.17 branch October 5, 2026 09:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant