在数据基础设施里,Apache Arrow 已经是事实标准。
但在 Zig 生态中,长期缺少一个“够全、够稳、够互通”的 Arrow 实现。
GitHub https://github.com/tylitianrui/zarrow
zarrow 的目标非常明确:
不是做薄封装,而是在 Zig 中原生实现 Arrow 核心能力,把内存格式、IPC、互操作、错误语义和工程验证都补齐。
如果你在做高性能数据处理、列式引擎、跨语言交换,zarrow 值得重点关注。
一句话定位
zarrow 是一个面向零拷贝列式数据交换的 Zig Arrow 实现。
截至 v0.0.2,它已经覆盖了从核心内存模型到 IPC、再到 C ABI 和多生态互操作的完整链路。
zarrow 的核心能力
- 完整 Arrow 内存模型(字段/类型/buffer/bitmap/array data)
- 丰富 Builder 体系(基础类型 + 复杂类型)
- IPC Stream / File 读写
- C Data / C Stream ABI 导入导出
- C ABI 动态库能力(zarrow_c)
- 与 Arrow C++ / arrow-rs / Arrow Go / PyArrow 的互操作验证
- 大量示例、测试和 CI 覆盖
为什么说它“强”?
1) 不是只做基础类型,而是覆盖复杂场景
除了常见 primitive/string/list/struct,zarrow 还覆盖了很多实现难点类型和语义,包括:
- dictionary / dict-delta(stream)
- run-end-encoded(REE)
- extension / view
- map / union
- decimal / temporal 家族
这意味着它不仅能跑 demo,还能对接更真实的数据场景。
2) IPC 能力不只是“能读写”,而是可互通、可验证
zarrow 的 IPC 不是闭门自嗨,而是直接放到多生态做双向验证。
包括 canonical、dict-delta、ree、complex、extension、view 等 case 的矩阵化校验。
3) C ABI 走到可落地层级
v0.0.2 的一个关键增强是 C ABI 体系:
- 提供 zarrow_c 动态库与公开头文件
- 提供 C++ / Rust smoke 工具
- C Stream 路径采用真正 streaming 语义(避免整流物化带来的内存峰值)
这让 zarrow 可以更自然地接入现有 Arrow 生态,而不是“只能 Zig 内部玩”。
设计理念:系统语言该有的样子
zarrow 的设计不是“魔法 API”,而是系统工程导向:
- 显式所有权与生命周期管理
- 以零拷贝为核心约束
- 错误优先、避免 panic 风格路径
- 规格对齐 + 互操作优先
- 用测试、示例、CI 证明行为,而不是靠口头保证
快速体验(本地)
zig build test zig build examples zig build c-api-lib zig build example-c_abi_roundtrip如果你想看 C ABI 的跨语言互通,这个 roundtrip example 很直观。
为什么我认为它是“目前 Zig 最全 Arrow 实现”?
我的判断标准是:
不是看单点能力,而是看是否具备“可用的完整闭环”。
zarrow 已经形成了这个闭环:
- 核心内存模型
- 丰富数据类型
- IPC stream/file
- C Data/C Stream ABI
- C ABI 动态库
- 多生态互操作验证
- 文档与示例可复现
这在 Zig 生态里是非常稀缺的。
结语
如果你在 Zig 里做数据系统,zarrow 不是“可以看看”,而是“应该重点跟进”。
它代表的是 Zig 在数据基础设施方向从“能用”走向“可工程化落地”的关键一步。