Skip to main content

Zig

📅 2026-03-31 ✏️ 2026-03-31 CS
No related notes

1 · Zig#

1.1 · 初识 zig#

  1. 简单:调试代码,而不是调试编程语言知识(比如Rust的所有权借用、Go的GC/调度器/接口动态分派)
  • 无隐藏控制流
  • 无隐藏内存分配
  • 无预处理器、宏
  1. 基于编译时代码执行、惰性求值的元编程:
  • 编译期执行函数
  • 把类型当作值一样操作(无运行时开销)
  • Comptime 会以目标平台的类型、布局与运算规则为基础,在编译期完成求值
  1. 以统一工具链渐进改造 C/C++ 工程:
  • zig build 提供统一构建与跨平台编译能力
  • 与现有 C/C++ 项目的无缝衔接(zig替代c编译链、c使用zig模块)

总结 代码所见即所得,没有隐藏控制流(手动管理内存+defer/errdefer释放资源;!T 错误路径显式化、?T空值显式化…),没有隐藏运行时; 内存分配是显式的,如果一个函数内部需要分配堆内存,需要接收一个allocator的参数; 无预处理器、宏,使用comptime进行元编程; comptime在编译期调用函数,把类型当作值进行操作(类型内省),两者结合可以在编译期操作代码本身(即元编程); zig build提供统一的跨平台的编译构建能力。

1.2 · 错误处理

rust的错误处理目标一致:错误是类型系统的一部分,不可被静默忽略;

但有区别:

E!T内建于编译器,错误E只能是error set错误集合:

  • 穷举:switch穷举所有错误
  • 传播:try向上传播给调用方
  • 组合:错误集可通过||合并或由编译器自动推断,组合轻松
  • 信息:错误仅是名字(整数),无法携带丰富信息,需额外方式传递
  • 恢复:就地降级(catch |_| default_value