Andrej Karpathy最近抛出一个有趣的观察:对于研究编程语言和形式化方法的人来说,现在可能是最激动人心的时刻,因为大语言模型正在彻底改变软件开发的约束条件。
这个判断并非空穴来风。我们已经能看到一些苗头:从C移植到Rust的浪潮,用现代语言升级COBOL遗留代码的兴趣激增。更深层的原因在于,LLM在代码翻译上的表现远超从零开始的生成。原有代码库相当于一份极其详尽的提示词,同时也是编写具体测试的参照标准。
但Karpathy指出一个反直觉的洞见:即便是Rust,对LLM来说也远非最优的目标语言。这引出一个更本质的问题:什么样的编程语言才是LLM的理想目标?在这种语言中,还需要为人类保留哪些空间?
Thomas Wolf补充说,编译测试循环的速度可能是关键差异点。工具链性能成为新的竞争维度,从构建系统到运行时表现。Go和Rust在这方面都很强,但Go超快的编译时间在某些场景下可能更有优势。
Chris Lattner透露,他们正在开发的Mojo语言就是朝这个方向努力。已经有人用一次性的方式将大型Python项目转换成Mojo,获得了1000倍的性能提升。Python式的语法、真实的类型系统(对LLM友好)加上GPU支持,这个组合很有想象空间。
有人建议直接写二进制代码。Karpathy的回应颇为实际:对于关键代码段确实很诱人,但对于其余大部分代码,现实中真的可行吗?
讨论中浮现出几个有意思的方向。Vladimir提出,最适合LLM的可能根本不是编程语言,而是形式化规范语言。我们用数学般的精确度描述系统应该做什么,让LLM生成适合特定运行时的任何目标语言方案。
Aaron Boodman的思考更系统:优化的方向应该是模块化、隔离性、可预测的线性性能特征、清晰的编译时反馈;而不是简洁性或范式灵活性。软件会更多地通过组装构建,由可充分测试的小模块组成,更倾向于组合而非继承。代码总量不会是优化目标,冗长或结构上的重复也不再是问题。
但真正有锐度的观点来自Ahmed Adly。他认为翻译之所以是杀手级应用,不是因为模型有创造力,而是因为它们被锚定了。遗留代码库既是超详细的提示词,也是行为规范。这就消解了不确定性。从零生成是靠感觉,翻译则是带校验和的压缩。
如果这个判断成立,Rust就不是终点,只是第一座显而易见的山峰。它为人类改善了不变量,但LLM最优的语言可能走得更远:副作用必须显式声明,状态转换是一等公民,规范以机器可检验的形式存在于代码旁边,歧义被视为缺陷而非特性。你需要的是一个对概率推理器最大程度可读、最小程度依赖人类隐性知识的表面。
这里有个有趣的张力:我们要为人类保留什么?人机工程学?美学上的极简主义?还是接受源代码成为一种中间表示,主要为模型改写和验证而优化,人类只在意图和约束层面进行监督?
有人已经在实践这些想法。Mingta上个月把一万行Java代码移植到Python,Claude只用了四个小时。这让人不禁想问:人类到底还能做什么?
Demetrios则用Claude Code在50天内写出了一门全新的编程语言,包含130万行代码,从原生GPU八元数到庞大的标准库,再到自托管编译器。
Somi AI团队的经验值得注意:翻译的成功率远高于从零编写,原代码库实际上约束了解决方案空间,使得LLM几乎不会出现幻觉。最大的突破是先从源代码自动生成测试套件,然后用这些测试作为翻译代码的验收标准。
但Socrates的反问最为尖锐:如果我们为机器写代码、为机器读代码而设计语言,人类还是受众吗?也许"编程语言"本身无法在这场变革中幸存。最终形态可能是:意图规范(人类)→ 机器原生中间表示 → 可执行文件。中间不再有"语言"。从COBOL到Rust只是开场,终局是自我重写的软件,唯一的人类产物是关于做什么的规范,而非如何做。
David Hendrickson看到了更深层的机会。大多数人还在旧范式里思考如何让代码更快、更安全、更可验证,同时保持某种人类可读性。他们错过的是生成式AI真正给我们的礼物:终于能逃离"快速行动,打破常规"的陷阱,让软件工程重新聚焦于那些我们忽视了几十年的持久属性,比如真实世界压力下的鲁棒性、长期演化能力、设计层面的安全、伦理对齐、可访问性、能效、可解释性和优雅降级。
与其争论语法或编译目标,我们应该把人类监督提升到指定和坚持这些高阶属性,然后让AI收敛到能大规模交付它们的任何实现方式,无论可读与否。这才是真正的范式转换:从手工编写代码到定义完成的软件必须具备什么,用生成系统来强制执行那些我们长期口惠而实不至的品质。
Marko的想法更激进:我们只需要LLM用它当前擅长的语言写代码,一种在下个模型发布前不会崩溃的语言。然后下个模型,而非人类,可以把它重写成更合适的语言,直到更新的模型出现。代码最终会以这种方式收敛到最优语言。
Ahmed的总结很到位:大型软件可能会随着模型改进而定期无损地跨范式重新编译。不是因为我们喜欢重写,而是因为成本曲线崩塌了,每次不变量都变得更严格。代码不再是静态产物,而是规范的持续优化投影。
当软件成为流动的产物,编程语言的意义也在重构。我们正站在一个分界点上:要么继续为人类优化语言,要么接受代码成为机器的领域,人类退居到更高的抽象层。这不仅是技术选择,更是关于人机协作未来形态的深层思考。
深度思考:
Karpathy认为Rust并非终点,这非常有洞察力。LLM的理想编程语言根本不是语言,而是一种“可执行的行为契约”。
在这种新范式下,代码仅仅是实现规范的临时投影。正如我们从打孔纸带进化到高级语言,我们现在正站在从“高级语言”进化到“意图规范”的悬崖边。编程语言不会消失,但它将回归本质——它是人与机器之间关于“系统行为”的法律文本,而不再是具体的施工图纸。
x.com/karpathy/status/2023476423055601903
热门跟贴