Piotr Sarnacki · It’s all about the bit · 阅读原文
原始来源:Piotr Sarnacki · It’s all about the bit
发现渠道:Hacker News · 原始讨论
这篇10月11日的旧文因本周热点再次进入候选。背景是 Campfire 聊天应用被 AI 改写成不同语言后,人们用吞吐或消息送达率判断哪种实现更好。Sarnacki 指出,各版连兼容性和队列策略都不一致,因此性能差异不能直接归到语言。
他进一步把压测从“收到响应再发下一条”的闭环方式,改为固定到达率:外部请求不会因服务变慢而自动放缓。在每秒100次写入请求(POST) 的个人测试中,Rust 版事件送达较少,但没有 HTTP 错误;修正后的 Elixir 版送达较多,同时出现超时和很长尾延迟。作者再改 Rust 广播队列容量,从256增至16384,事件送达率由约14%升至约90%,最坏延迟却由11秒升至130秒以上。
因此他没有宣布 Rust 反超。对聊天客户端,尽快断开落后的连接、重连后拉取最新状态,有时比把事件留在队列等数分钟更合适。背压就是系统在处理不过来时怎样限制、排队或拒绝新增工作;每种选择都要结合用户实际能否看到消息判断。
可信度 65 · 重要性 72 · 新颖度 54
技术与主题
AI 编程 · 评测与基准 · Backpressure · Open-loop Load Testing · Tail Latency
Piotr Sarnacki
10月11日个人复测与工程意见,版本及负载限定见正文。
忠实转述(非原句):他不认同按一次送达率判断语言的优劣。加大队列后Rust的送达率更高,他仍认为该版本可能更糟,因为它让滞后的事件等得太久。他更倾向及时暴露失败,并让浏览器重连拉取更新;同时提醒,无边界的队列最终也会遇到内存限制。
nicfio
回应同一旧文的HN讨论,提出多模型对抗开发;未给出受控比较。
忠实转述(非原句):他认为问题也在使用方式:不同模型可能以不同方式推理和犯错,因此建议用至少两个前沿模型相互检验,人再检查输出。他承认不能完全消除错误,并把额外模型费用看作质量投入。这是方案主张,不是已经测出误差独立或最低错误率。
wpld
同一文章的Lobsters讨论,2026-10-12的个人成功案例;不同项目,不是Campfire复现。
忠实转述(非原句):他报告自己用claude-code把一个小型Spring Boot应用的前端从Angular改到Vue,API不变,不让工具接触真实数据,并逐步检查输出;Selenium在Firefox的集成测试之外,Chromium仍有日期输入小问题。他认为原先对预期行为和测试的掌握有助于这次改写。
编辑评读
这份复测的好处,是一个容量改动就让同一实现呈现出两种“胜利故事”。送达率上涨可能有价值,但若读者正在等通知,延迟代价不能藏在成功分子背后。闭环与固定到达率各有用途:前者适合固定客户端并发的行为,后者能暴露外部工作持续到来时的积压。选错负载会使系统自动替测试减压,从而漏掉本来关心的故障。
不过这仍是作者在特定改写版本上的个人试验。我们没有重跑其负载,也不把具体比例变成语言优劣结论。最值得借用的是反例构造方式:保持实现基本不变,改变一项资源限制,检查“更成功”是否只是把失败推迟到别处。它与自动审查的关系也很具体:积压的通知和没完的修复都可能把即时进度变成后续等待;共同点是要测终点体验,机制本身不同。
Lobsters 的 wpld 提供了应保留的成功反例:应用较小、API不变、原作者知道原有行为,又逐步检查和运行集成测试。它不能推翻聊天系统里的积压问题,却说明“使用Agent改写”不是足以解释失败的单一变量。另一位 nicfio 建议不同模型互查,但模型不同只提出了潜在的错误差异,还需实测是否互补;不能把增加一个角色直接换算为降低了多少风险。
需要留意
- 旧文热点回看;个人测试与具体改写版本,未作本地复现或受控语言比较。