Antfly 为何用 Zig 重写整个数据库?
A search-and-inference database from scratch in pure Zig
我带领团队将 Antfly 从 Go 彻底重写为纯 Zig 实现,只为追求极致的可靠性与性能。这次重写并非盲目跟风,而是基于第一性原理的深思熟虑:我们需要在零依赖环境下掌控内存、CPU 和 GPU 资源,同时利用 Zig 的 C 互操作性和 std.Io 实现全链路故障模拟测试。从 Raft 协议到 HTTP/3 传输,再到向量索引,所有核心组件均由我们亲手打造。虽然 Zig 尚处 1.0 之前,工具链也在演进,但零依赖架构让我们能像 TigerBeetle 一样,将资源管理和测试理念 baked in 从第一天开始。最终,Antfly 不仅跑得更快,更能在任何环境——从沙盒到数据仓库——中稳定飞行。
追求完美搜索的目标虽遥不可及,但正是在这个过程中,我们找到了真正有趣的地方。
- thefogman
我知道我应该恭喜新引擎的发布,但出于私心,我更想听听你们是怎么做到的。
所以,模拟器只有知道“正确”是什么样,以及该向代码抛出哪些类型的故障时才能工作,对吧?这两件事是谁决定的?是同一个编写代码的 Agent 吗?这些是由人类编写的,还是从形式化规范中推导出来的?
你们有三种东西都可以说“这是对的”:端到端测试、形式化模型,以及旧版 Go 版本的行为。当它们意见不一致时,你们信任哪一个?有没有出现过测试本身才是错的情况?
当模拟器在发布前发现问题时,通常是代码错了,还是“正确”的定义错了?
感觉这里面有些关于使用 Agent 编程的最佳实践的非常有用的见解。我想知道,如果 Bun 团队也采用了类似的方法,他们是否还会决定重构。
- dovin
是啊,关于什么是“完美”搜索,这本身还是个开放性问题,比如这最终会不会变成一种难以区分的神秘全知全能?然后还有“我能不能直接找到那个该死的很久以前的幻灯片,那个客户相关的……或者它是在 Google Drive 里?”我真的不希望解决方案就是让我们把所有东西都塞给 Claude。
- kingcauchy
我们将 Antfly(我之前曾向世人介绍过,链接在这里:https://news.ycombinator.com/item?id=47414291)从 Go 重写到了 Zig。
我觉得将我们的做法与 Anthropic 的 Bun 重写进行对比很有意思,所以想聊聊我们为什么选择了另一条路!很乐意和大家探讨我们的流程或技术!
文章中链接了基准测试数据,但为了存档,这里再次附上:https://antfly.io/releases/v0.2