Simon Willison·· 3 天前评分81
parse_number() as a SQLite extension: C vs Rust
摘要
研究:parse_number() 作为 SQLite 扩展:C vs Rust。我正在遛狗时对如何编写一个 SQLite C 扩展,该扩展添加 parse_number() 函数,将类似 -$1,234.56 或 '12.5%' 的字符串转换为可求和和排序的数值产生了兴趣。我启动了常规 Claude 消息(Opus 5.5),并提示:我正在考虑一个 SQLite 自定义函数 'parse_number(value)',该函数会移除逗号、美元符号、英镑符号和百分号,处理前导减号,并返回 'NULL' 对于无法解析的内容。探索将此作为 SQLite 扩展在 C 和 Rust 中构建的差异——我想要比较性能和代码复杂度以及生成的 .so 文件的大小。这给了我一个坚实的基础——Rust 扩展为 321 KB(使用 Rusqlite)和 298 KB(使用 sqlite-loadable-rs),而 C 扩展为 14 KB。但 Rust 扩展更快!这是因为 Rust 的 strtod 对应于 C 的 strtod,速度是其两倍。因此我进行了测试
推荐理由
请对照Simon Willison原文,核对完整说明及适用条件。
本站只提供摘要与原文入口。完整内容请阅读原文。
来源:Simon Willison · simonwillison.net