当前位置:首页>python>Python 最适合 AI 写代码吗?我让 Codex 用四种语言各跑了 5 次

Python 最适合 AI 写代码吗?我让 Codex 用四种语言各跑了 5 次

  • 2026-09-19 12:53:08
Python 最适合 AI 写代码吗?我让 Codex 用四种语言各跑了 5 次

QUOTE

20 次实现都通过了公开测试。到了隐藏测试,有一次栽在一个很不起眼的数字上。

如果只看速度,这次实验的答案很干脆。

Python 用时最短,输出 token 也最少。Go 和 TypeScript 不相上下,Rust 排在最后。

可我把隐藏测试跑完后,排名突然没那么干脆了。

下文仍按行业习惯,把这套 Agent 事先看不到的验收题称为隐藏测试。

20 份实现都通过了 Agent 看得见的公开测试。到了隐藏测试,Python 有一次栽在一个很不起眼的数字上。

text

1e309(1 × 10 的 309 次方)

这次错误,让整场实验比一张速度排行榜有意思得多。

— Codex 四语言各运行 5 次,公开测试 160/160,隐藏测试 399/400

本文看点

01

Python 最快,隐藏测试却有一次翻车

02

翻车藏在 1e309 的语义边界

03

看一次演示,很容易把随机性当能力

01

DEBATE

一场越来越难回答的语言之争

过去选编程语言,团队经验、运行性能和生态成熟度通常占据主要位置。Coding Agent 进入开发流程后,又多了一个问题。

什么语言更方便 Agent 写、测和修?

动态语言的支持者有一套直观解释。Python 语法紧凑,模型熟悉,写相同功能往往只需较少代码。静态语言的支持者也有充分理由。编译器和类型检查器 能及时给出错误位置,相当于 Agent 身边多了一个随叫随到的检查员。

2026 年 3 月,Mame 公开了一组 MiniGit 实验。他让 Claude Code 用 15 种语言配置实现同一套功能,每种配置运行 20 次。在那个原型规模的任务里,Ruby、Python 和 JavaScript 位于速度与成本前列。实验仓库也提醒,这个结果只适用于小规模原型,不能直接推广到大型项目。

后来有人把同一思路搬到 Codex 上。新的复现实验里,75 次语言实验全部通过测试,TypeScript 排到第三,Go 也进入上半区。作者的判断很直接,简单概括成动态语言胜过静态语言 并不成立。

「模型一换,名次就在动。任务、测试和工具链也会继续改变结果。」

所以我没有再找一道小算法做演示,而是让 Codex 完成一段可以被黑盒测试 的程序。

02

TASK

我给四种语言出了同一道题

任务叫 jsonx,是一个 NDJSON 转换命令行工具。

它读取规则文件和数据文件,完成字段选择、重命名、默认值填充以及字符串、整数、数字、布尔值之间的严格转换。程序还要处理非法 JSON、空行、Unicode、错误行号、跳过或中止策略,以及不同错误对应的退出码。

这类任务代码量不算大,却有不少容易含糊的边界。它也适合做行为验收。四种实现的目录结构可以不同,只要对同一输入给出相同输出 即可。

这种黑盒思路和 ProgramBench 接近。ProgramBench 给 Agent 一份程序及文档,再用端到端行为测试检查重建结果。研究者特意指出,有限测试只能覆盖规范的一部分,漏掉一项测试也可能意味着程序存在根本缺陷。

本次实验使用下面四种语言。

语言
选择原因
Python
动态类型,语法紧凑,模型常用
TypeScript
渐进式类型,严格模式可提供静态反馈
Go
静态类型,标准工具链集中
Rust
所有权约束严格,编译反馈强

我使用 Codex CLI 0.147.0,模型统一为 gpt-5.6-terra,推理强度为 medium。

四种语言各运行 5 次,共 20 个独立会话。每次都从全新目录开始,只能使用标准库和机器上已有的工具链,不能联网下载依赖。Agent 可以看到任务说明和 8 项公开测试,看不到 20 项隐藏测试。单次时限为 720 秒,过程中不进行人工纠错。

正式开跑前,任务、公开测试和隐藏测试的 SHA-256 都已冻结。运行顺序也预先写入清单,失败不能重跑后覆盖。

NOTE

这不是通用语言基准。它是一道固定任务、一个模型、一次版本快照下的原创小样本实验。

— 四种语言使用相同任务、独立会话和两级测试的实验流程

03

RESULTS

20 次实测结果

20

独立会话

160/160

公开测试断言

399/400

隐藏测试通过

四种语言的中位数如下。

语言
中位完成时间
时间范围
中位 Output token
Token 范围
公开测试全绿
隐藏测试全绿
Python
108.2 秒
93.5 至 127.8 秒
4,569
3,797 至 5,737
5/5
4/5
Go
130.8 秒
122.1 至 150.9 秒
5,383
4,564 至 5,964
5/5
5/5
TypeScript
134.7 秒
108.2 至 159.9 秒
5,487
4,829 至 6,958
5/5
5/5
Rust
146.6 秒
105.3 至 162.0 秒
6,088
4,665 至 7,356
5/5
5/5

20 次运行全部正常结束,没有超时和进程错误。公开测试累计执行 160 次断言,全部通过。隐藏测试累计执行 400 次,最终通过 399 次。

— Python、Go、TypeScript 和 Rust 的中位完成时间、Output token 与隐藏测试成绩

正文选用 Output token,是因为它最接近 Agent 实际生成内容的多少。输入 token 会反复包含任务、源码和工具返回,还受到缓存命中的影响。这里没有把 token 强行折算成一个看似精确的综合成本。

04

SPEED

Python 确实快,而且优势很稳定

Python 的中位完成时间为 108.2 秒,比 Go 少 22.5 秒,比 TypeScript 少 26.4 秒,比 Rust 少 38.3 秒。

它的中位 Output token 也是四种语言里最低的。五次运行中,Python 最慢的一次用了 127.8 秒,依然低于 TypeScript 和 Rust 的中位数,并且只比 Go 的中位数慢约 7 秒。

在这道从零实现的 CLI 任务上,Python 的紧凑表达和模型熟悉度 确实转化成了实际速度。至少这部分结果,与动态语言适合快速原型的经验一致。

Python 官方文档也写得很清楚,运行时不会强制执行函数和变量的类型标注,类型检查需要交给额外工具。这会减少默认约束,也把更多责任交给测试与实现者。

05

FAILURE

唯一一次翻车,藏在 1e309 里

出错的是第 13 次正式运行。

这份 Python 实现通过了 8 项公开测试,也通过了 20 项隐藏测试中的 19 项。失败用例依次输入 +1、NaN、1e309 和 3.5。按照规范,前三项都该被跳过,最终只输出 3.5。

Agent 使用 Python 的 Decimal 解析数字字符串。Python 的高精度数字类型 Decimal 能装下 1e309,所以程序误以为它是合法结果。但普通 JSON 程序通常使用浮点数,解析这个数字后会溢出成无穷大,程序因此被判失败。

— 1e309 经 Decimal 检查后输出为普通浮点无穷值并导致隐藏测试失败

这个问题没有语法错误,也没有触发运行时异常。它属于规范边界上的语义偏差。

问题在于,Agent 自己跑过的公开测试全绿。只要不跑隐藏测试,这份实现就会被当成完成。

编译成功和公开测试全绿,都只是阶段性信号。

这里不能据此断言 Python 更容易出错。每种语言只有 5 次机会,唯一缺陷也可能来自随机生成差异。不过它至少提醒我们,Agent 能否可靠交付,很大程度取决于测试有没有覆盖真正危险的边界。

06

TIE

Go 和 TypeScript 几乎打平

Go 的中位时间比 TypeScript 快 3.9 秒,中位 Output token 少 104。放进五次运行的波动范围里,这点差距不够支持明显的高下判断。

两种语言的 10 份实现都通过了全部隐藏测试。

Go 的优势主要体现在工程流程简单。官方工具链内置测试支持,go test 能直接执行约定目录里的测试并返回失败位置。

TypeScript 则提供渐进式约束。它也留有 any 这个出口,官方文档明确说明,使用 any 会关闭后续类型检查。因此评估 TypeScript 时,是否启用严格模式以及 Agent 有没有绕开类型系统,都会影响结果。

本次任务里,两者交出的结果很接近。Go 略省时间和输出,TypeScript 没有为类型与配置付出夸张代价。

07

VARIANCE

Rust 最慢,单次成绩却最会骗人

Rust 的中位完成时间为 146.6 秒,中位 Output token 为 6,088,两项都排在最后。它的五份实现全部通过隐藏测试。

Rust 官方文档展示了所有权规则如何在编译期阻止错误使用变量。这些反馈能帮助 Agent 提前修正一部分问题,也会增加生成和修改量。

有趣的是,Rust 最快的一次只用了 105.3 秒。这个成绩比 Go 和 TypeScript 的中位数都快,甚至接近 Python 的中位数。

如果我只挑这一次展示,完全可以写出另一种结论。五次结果放在一起后,Rust 仍是中位数最慢、波动也很明显的一组。

「看一次演示,很容易把随机性误认成语言能力。」

∞

THE END

这次实验给了我什么答案

对这道中等规模、标准库可完成、从零实现的 CLI 任务,Python 是最快的原型语言。它省下了约两成到三成时间,也使用了最少的 Output token。

Go 和 TypeScript 提供了更均衡的结果。速度落后 Python,幅度还能接受,五次隐藏测试全部通过。Rust 付出的生成成本最高,五份实现同样全部过关。

正确率的差异还不足以归因给类型系统。样本太小,四种语言总共也只出现一个错误。那次错误倒是揭示了另一件更实际的事。类型检查、编译器和公开测试都无法代替一份严谨的行为规范与隐藏测试。

今后如果用 Agent 从零搭一个脚本、数据工具或短命原型,我仍会优先考虑 Python。需要长期维护的服务,我会把团队熟悉度、生态、部署和静态反馈一起放进选择。无人值守地交给 Agent 执行时,测试设计 的优先级还要继续上调。

一门语言给 Agent 的实际开发成本,来自语言语法、编译器反馈、测试体系、依赖生态和模型熟悉度的共同作用。脱离任务谈一个永远最适合 AI 的语言,结论很难稳定。

这次最重要的数字也许并非 108.2 秒。

是 399/400。

那一个没通过的测试,正好提醒我们,AI 写得快和软件可以放心交付之间,还隔着一套认真设计的验证系统。

REFERENCE

资料与实验文件

· MiniGit 多语言实验https://github.com/mame/ai-coding-lang-bench

· MiniGit 的 Codex 复现实验https://github.com/banteg/minigit-bench

· ProgramBench 论文https://arxiv.org/abs/2605.03546

· GPT-5.6 Terra 官方说明https://developers.openai.com/api/docs/models/gpt-5.6-terra

· Python typing 文档https://docs.python.org/3/library/typing.html

· Go 测试文档https://go.dev/doc/tutorial/add-a-test

· TypeScript 文档https://www.typescriptlang.org/docs/handbook/2/everyday-types.html

· Rust 所有权文档https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html

END

我是evan,热衷于分享 AI 观察与干货。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

最新文章

随机文章