Rust 核心开发者发出“存在主义焦虑”:Agent 写代码的时代,语言设计者还有饭碗吗?

Rust 核心开发者发出“存在主义焦虑”:Agent 写代码的时代,语言设计者还有饭碗吗?

💡 原文中文,约5700字,阅读约需14分钟。
📝

内容提要

Rust核心设计者Niko Matsakis认为,在AI Agent时代,Rust因其性能默认值和类型护栏而受青睐。他提出“软件工厂”三支柱:设计、构造、优化,Rust在后两者占优,设计仍是开放问题。测试和类型系统都不足以证明程序正确,需引入Verus、Kani等证明系统。反直觉的是,护栏越强,Agent优化越激进,性能反而更好。他提出北极星目标:不再有unsafe代码,并预测未来人类负责设计、Agent负责写代码,设计语言将成为新战场。

🔎

延伸解读

“护栏越强,优化越激进”的边界

文章引用 lean-zip 实验说明:当 Agent 被要求“改实现必须更新证明”时,可放手做激进优化,默认档位压缩快约 30%。但作者明确提醒,这不能解读为 Lean 比 Rust 快:对比对象 miniz_oxide 未经过同等优化,Lean 版内存占用更高、解压反而慢约 1.45 倍,libdeflate 仍大幅领先。真正成立的是:可证明性让优化外包更安全,而非语言性能排名。

类型系统与证明系统是分工,不是替代

文章用 set_foo 的例子说明:Rust 的 &mut self 保证唯一引用,使断言必然成立,而 Java 版本因可能被其他线程修改而无法证明。Verus 正是信任借用检查器对唯一性的追踪,从而简化 SMT 求解。因此,类型系统负责排除某类 bug,证明系统负责确认“做对了”,两者配合才能覆盖从资源管理到结果正确性的不同层面。

“不再有 unsafe”是方向,不是现状

Niko 提出的北极星目标并非取消 unsafe 关键字,而是让开发者有能力证明所有 unsafe 代码不会引发未定义行为,最终希望广泛使用的 Rust 库都被证明 sound。文章同时指出,当前证明工具使用门槛仍高,需要宏和锁定编译器版本,体验“野路子”。这说明该目标依赖编译器可扩展性等基础设施的成熟,短期内难以普遍落地。

设计能力升值,但反馈回路决定 Agent 可靠性

文章认为,当 Agent 承担构造与优化,人类工作重心转向设计与规格。Marc Brooker 的反馈回路假说进一步解释:规格明确、可自动验证的任务对 Agent 更容易,因此系统软件可能变容易,而依赖人类主观反馈的产品设计反而更珍贵。对开发者而言,关键不是只看 Agent 生成什么,而是看它获得多精确的反馈,并用类型和证明划定边界。

❓

Q&A

Rust 核心开发者 Niko Matsakis 为什么会对 AI Agent 写代码产生焦虑?

Niko Matsakis 从小学五年级开始写代码,几十年来编程方式几乎没变,但 AI Agent 的出现让他担心自己的编程技能和语言设计技能是否还有用。不过他的结论是:人类在编程中依然有角色,编程语言设计依然有意义,Rust 是 Agent 开发的好契合,但还能更好。

为什么说 Rust 在 Agent 时代有优势?

文章给出两层原因:一是 Agent 让尝试新语言的试错成本变低,既然选哪种语言都一样轻松,为什么不选运行更快的;二是 Rust 本身就适合 Agent 写,Greg Brockman 也认为 Rust 是 Agent 的完美语言,因为“能编译就大致正确”。Niko 还补充,Go 等语言在快速迭代上也有优势,但 Agent 可能会放过 Rust 能拦住的数据竞争和隐蔽 bug。

Niko 提出的“软件工厂”三支柱是什么?Rust 在其中处于什么位置?

三支柱是设计(说清楚代码要做什么)、构造(写出符合设计的代码)、优化(让代码跑得高效)。三者都未被完全解决,但 Rust 的主战场在构造和优化,设计仍是开放问题。

为什么说测试和类型系统都不足以证明程序正确?

Dijkstra 早就说过测试只能证明 bug 存在,不能证明 bug 不存在;用 Agent 写代码时问题更严重,Agent 可能误解逻辑。类型系统能证明某类 bug 不存在,却无法证明程序是正确的。要证明“做对了”而不只是“没做错”,需要引入 Verus、Creusot、Aeneas、Kani 等证明系统。

lean-zip 实验说明了什么?护栏越强为什么反而性能更好?

Lean 社区用 Lean 写了 DEFLATE 压缩库 lean-zip,并证明“压缩后再解压必然还原原始数据”,然后让 Agent 在必须更新证明的条件下自主优化。在 212MB 的 silesia 语料上,默认 L6 档比 miniz_oxide 快约 30%,L9 快约一倍。逻辑是:如果能向 Agent 下达“随便怎么改,只要证明结果仍正确”的指令,Agent 就可以放开手脚做激进优化。但作者也强调这不是说 Lean 比 Rust 快,对比并不完全对等,Lean 版本内存占用更高、解压反而慢约 1.45 倍。

有了证明系统,为什么还需要 Rust 的类型系统?

两者是分工关系。Rust 的借用检查器能追踪唯一性,例如 &mut self 保证唯一引用,使“赋值后断言相等”必然成立,从而大幅简化 SMT 求解器的工作,让证明更快、更稳。Verus 正是信任借用检查器对唯一性的追踪来工作的。

Niko 为 Rust 未来提出了哪些路线和北极星目标?

三条路线:1)能编译就能跑,增强类型系统以表达视图类型、内部引用、敏感信息约束等;2)低层够用、高层也好用,保留性能旋钮同时让代码意图清晰;3)可扩展、多用途的编译器,支持 GPU、深度语言互操作和接入定理证明器。北极星目标是“不再有 unsafe 代码”,不是取消 unsafe 关键字,而是让开发者有能力证明所有 unsafe 代码都是正确的、不会引发未定义行为。

Niko 认为 Agent 时代语言设计的终局会怎样?开发者该关注什么?

终局猜想是:人类写“设计”,Agent 写“代码”,设计语言成为新战场。语言设计不会失去意义,但权衡天平变了:过去语言要对人类作者友好,未来要对人类读者、Agent 作者和证明工具同时友好。对开发者而言,应关注 Agent 的反馈回路是否精确,用类型和证明给 Agent 划边界而不是靠 Review 兜底,设计与规格能力会越来越值钱。

🏷️

标签

➡️

继续阅读