Django联合创始人Simon Willison:Clinger快速路径替换strtod后,C版SQLite扩展反超Rust
Simon Willison用Claude协助实现SQLite扩展parse_number()的C与Rust版本。初始Rust因标准库浮点解析更快而领先,但将C的strtod替换为Clinger快速路径后,优化C以16–19 ns/行反超Rust约两倍,800万次模糊测试确认四种实现结果一致。
Django联合创始人Simon Willison在遛狗时想到一个具体问题:能否写一个SQLite扩展函数,把"-$1,234.56"或"'12.5%'"这类字符串解析成可求和、可排序的数值?他决定用Claude(Opus 5.5)同时探索C和Rust两种实现,比较性能、代码复杂度和产物体积。
初始结果出乎他的预期。Rust扩展体积更大——Rusqlite版321 KB、sqlite-loadable-rs版298 KB——而C扩展仅14 KB,但Rust反而更快。原因很具体:Rust标准库中浮点解析的等价实现比C的strtod快约两倍,而C的朴素实现恰好依赖这个函数处理小数。
于是他向Claude提出第二个指令:写一个自定义C函数来解析文本为十进制数,追上或超过Rust。Claude采用了Clinger快速路径——一种针对常见数字格式跳过通用浮点解析开销的已知优化策略。在200万行数据上,优化后的C版本在混合数据上为19 ns/行(Rust为41–46 ns),纯整数16 ns/行(Rust为32–36 ns),纯小数18 ns/行(Rust为47–55 ns),各场景均约为Rust的一半耗时。
全部四种实现通过了800万次模糊测试的一致性校验,确认解析结果完全相同。
这个实验展示了一个可检查的模式:当性能瓶颈定位到某个具体库函数时,语言选择本身不是决定性因素,针对性的算法替换可以跨越语言级差距。AI在此的角色不是发现新算法,而是在明确指令下实现一个已知技术并验证正确性。
需要注意的是,这是一次第一方基准测试,仅覆盖单一函数的特定场景,作者未声称结果可推广到一般C vs Rust比较。Clinger快速路径本身是1990年代提出的已知算法,其正确性已有广泛实践基础。