Zig
No related notes
Outlinks (0)
No outlinks found
Backlinks (0)
No backlinks found
1 · Zig#
1.1 · 初识 zig#
- 简单:调试代码,而不是调试编程语言知识(比如Rust的所有权借用、Go的GC/调度器/接口动态分派)
- 无隐藏控制流
- 无隐藏内存分配
- 无预处理器、宏
- 基于
编译时代码执行、惰性求值的元编程:
- 编译期执行函数
- 把类型当作值一样操作(无运行时开销)
- Comptime 会以目标平台的类型、布局与运算规则为基础,在编译期完成求值
- 以统一工具链渐进改造 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)