在将 Rust 作为主要工具使用一段时间后,一名开发者转向 Zig 编程语言的经历揭示了向高透明度系统编程的转变。Zig 目前处于 1.0 版本前的状态,这意味着其标准库和生态系统经常面临破坏性变更。作者指出,虽然这种不稳定性对某些项目来说是一个障碍,但该语言的发展路径允许对核心编译器和标准库进行重大改进,而这些改进在稳定的、向后兼容的语言中可能更难实现。
Zig 的定义特征之一是要求显式的分配器和 IO 参数。与许多使用全局默认分配器或在失败时崩溃的隐藏分配的语言不同,Zig 要求每一个与内存或操作系统交互的函数都必须接受显式的分配器或 IO 上下文。这种设计让程序中哪些部分是“纯净”的,哪些部分修改外部状态变得一目了然。例如,通过传递 `FixedBufferAllocator` 或 arena 分配器,开发者可以精确控制单个应用程序中不同组件的内存行为。这种透明度旨在使程序更易于推理,尽管 Hacker News 上的一些评论者指出,这可能比现代 RAII(资源获取即初始化)模式更冗长,而 RAII 能以更少的手动开销提供类似的内存安全性。
Zig 还通过其对依赖项的处理方式和增量编译系统脱颖而出。该语言的文化鼓励对外部库采取极简方法,因为许多核心功能——如 JSON 解析、反射和随机数生成——都内置在标准库中。这有助于开发者避免 Rust 生态系统中常见的庞大且间接的依赖树。此外,Zig 的增量编译旨在实现近乎瞬时的速度,允许开发者在保存文件时立即看到更新。然而,这些优势也伴随着挑战:该语言目前缺乏广泛的文档,而且对于习惯了 Rust 自动化安全保证的开发者来说,手动内存和错误管理的负担仍是一个重大的转变。由于文档稀缺,很大一部分构建生产就绪软件的知识是通过人与人之间的互动传播的,例如本地的“Zig Days”活动和社区论坛。
