← 返回日报
精读 预计 8 分钟

I rewrote PostHog's SQL parser, 70x faster, while barely looking at the code

摘要

作者为 PostHog 重写 SQL parser,用多轮并行 Claude Code 会话协作完成一个手写 parser(约 16K 行代码 + 5K 行工具 + 测试)。原系统使用 ANTLR 生成解析器,将 SQL 转 AST 再转 ClickHouse SQL,新 parser 目标是与原 C++ ANTLR parser 在 “真实查询” 上保持一致,同时显著提升性能。新实现采用手写递归下降解析 + Pratt 表达式解析,并在少量场景加入 LL (2) 前瞻与受控回溯。 开发过程中以 “oracle 对比”(旧 parser)作为基准,通过不断找出分歧 SQL 来迭代修复;同时引入 property-based testing(Hypothesis)、基于 grammar 的 SQL 生成器、语法扰动、真实生产查询回放,以及覆盖率引导的测试生成,持续扩大测试空间并自动最小化失败样例。 作者还设计了持续运行的迭代循环:自动生成失败 case → 缩减并加入回归集 → 让 Claude 阅读 grammar 与旧 C++ 实现修复 → 跑回归 → 循环,并在 shadow mode 下对生产流量进行对照验证。最终在生产中实现平均约 454x 解析加速,shadow 测试数百万查询未出现差异,并逐步切换到线上流量。

荐读理由

用Claude手写递归下降+Pratt核心的Rust解析器,配合PBT与grammar驱动测试,能迁移到AI工程项目实现70x+速度的SQL解析器,实现AST等效无偏差

Hacker News · 133 赞 · 64 评 讨论 → 阅读原文 →

这条对你有帮助吗?