用 Claude 重写 SQL 解析器,性能暴涨 70 倍:程序员做的不是写代码,而是搭建验证闭环

PostHog 工程师借助 Claude Code 将 SQL 解析器从 ANTLR 生成的 C++ 代码重写为 Rust 手写代码,解析速度在生产环境平均提升 454 倍(笔记本基准测试中为 70 倍)。整个过程由 AI 生成代码,但核心工作量变成了搭建“基于属性的测试”与“影子模式验证”的闭环,而非逐行手…

用 Claude 重写 SQL 解析器,性能暴涨 70 倍:程序员做的不是写代码,而是搭建验证闭环

一句话看懂:PostHog 工程师借助 Claude Code 将 SQL 解析器从 ANTLR 生成的 C++ 代码重写为 Rust 手写代码,解析速度在生产环境平均提升 454 倍(笔记本基准测试中为 70 倍)。整个过程由 AI 生成代码,但核心工作量变成了搭建“基于属性的测试”与“影子模式验证”的闭环,而非逐行手写。

事件核心:发生了什么

PostHog 是一款开源产品分析平台,其核心功能是将用户 SQL 转译成 ClickHouse 原生查询。此前解析器基于 ANTLR(一种流行的解析器生成器)在 C++ 上生成,存在性能瓶颈——ANTLR 通过图遍历解释器支持动态前瞻,但通用性带来了额外间接层。2026 年 5 月,PostHog 工程师使用多个长时间运行的 Claude Opus 4.7 会话,在 Rust 中重写了一个“预测性递归下降”式解析器,主体采用 Pratt 表达式循环、LL(2) 游标及局部回溯。最终产物包括 16K 行解析器代码、5K 行工具代码与几千行测试代码。在影子模式下,新解析器仅在极端边缘用例(如 SELECT SELECT FROM FROM WHERE WHERE AND AND)上与旧解析器存在差异,实际生产查询完全等效。

为什么重要

这一案例直接挑战了“解析器生成器不可替代”的传统认知。ANTLR 代表了一种成熟的 2000 年代模式:开发者提供语法声明,工具自动生成通用但较慢的代码。而 Claude 的做法表明,LLM 可以通过“与 oracle 对照的测试驱动”生成性能更优的手写风格解析器,且开发周期从数月压缩到数天。这并非简单的“AI 替代程序员”,而是将程序员角色从编码者转变为验证闭环的设计者——关键产出不再是代码,而是:基于 ANTLR 语法文件自动生成 SQL 的模糊测试生成器、基于 Hypothesis 库的属性测试流程、覆盖率引导的用例生成,以及生产环境的影子模式对比。这对解析器生成器工具(如 ANTLR)的未来路线提出了实质性质疑:它们可能从“直接生成解析器”退化为“提供 oracle 参考实现”,供 AI 在此基础上优化。

对用户/开发者/创作者的影响

对于使用 PostHog 的产品团队,新解析器将直接降低查询延迟——尤其是对未命中的长 SQL 语句,p95 响应时间有望大幅缩短,提升数据分析体验。对于后端开发者,这个案例提供了一个可复用的范式:当需要重写或优化某个有稳定参考实现(oracle)的模块(如解析器、编译器前端)时,可以先用 AI 生成候选版本,再围绕属性测试与生产流量对比搭建验证闭环,而非从头手写。这降低了此类重写任务的技术门槛,但也要求开发者具备测试框架设计与模糊测试能力。对于 AI 编程工具的用户,该项目展示了“AI 生成的脆弱修复”这一典型痛点——Claude 会通过添加单 Token 前瞻来修复问题,但实际需要双 Token 前瞻;作者通过提示工程(要求 AI 在修复前重新加载语法文件与参考源码)缓解了上下文窗口限制导致的“遗忘”问题。

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

值得关注的后续

第一,PostHog 是否会将此 Rust 解析器开源或合并到主线产品中?开源社区能否在真实负载下复现 454 倍的加速?第二,这篇文章由 PostHog 官方博客在 2026 年 5 月发布,目前公开信息显示它们已在生产环境切换至影子模式并开启反向验证,但尚未公布全量上线时间表。第三,ANTLR 等解析器生成器工具是否会推出官方 AI 辅助优化功能,支持用户从 .g4 语法文件自动生成高性能递归下降解析器?这一方向可能影响整个编译器基础设施工具链的迭代方式。

来源:InfoQ CN

celebrityanime
celebrityanime
文章: 13278

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注