在进行了七年的 Rust 开发后,作者决定重新实现一个现有的 Rust JSONPath 库,用 Zig 来具体感受这种语言作为潜在的 C 继承者的感觉。该项目涉及移植相同的功能——解析和评估 RFC 9535 定义的 JSONPath 表达式——以便比较基于真实代码而非玩具示例。首先让作者惊喜的是 IDE 支持的状况:Zig 除了语法高亮和基本自动完成之外几乎没有其他功能,这促使作者回到命令行工作。这种缺乏重量级 IDE 工具的情况竟然令人耳目一新,因为作者发现纯粹的 `zig build test` 工作流程非常直接,最终他采用了基于 helix 的编辑器设置。
至于项目布局,Zig 的扁平结构促使作者将相关代码保持在较少的文件中,这与 Rust 倾向于创建深层模块层次形成对比。作者指出虽然可以进行嵌套,但这会带来导入摩擦且很少能提高可读性,因此他更倾向于将所有代码放在一个地方,除非项目确实需要层次结构。测试又呈现出另一个对比:Rust 的默认内联单元测试很方便,而 Zig 的等效方法在扁平布局下感觉较为冗长,这促使作者在配置了 build.zig 之后,直接在模型文件中放置测试。
从范式上看,从 Rust 倾向函数式的风格——零成本迭代器、不可变数据、单子组合器——到 Zig 的 imperative 核心的转变非常明显。Rust 倾向于使用不可变转换和组合器而非迭代器,而 Zig 则推动作者采用就地突变和显式的分配器处理。手动内存管理成为一个持续的关注点;每个函数都需要一个分配器,忘记 deinit 或两次调用都可能导致泄漏或损坏,TestAllocator 能帮助捕获这些问题,但这种纪律仍然是相较于 Rust 自动 drop 保证的明显转变。总体而言,作者认为 Zig 的底层清晰度和速度很有吸引力,同时也承认其年轻的生态系统仍然缺少一些 Rust 所具备的完善性和便利特性。