用 Claude Code 在 Ruby、Python、Go 等 13 种语言中实现简化版 Git,对比不同语言的 AI 编程友好度和最佳实践。
我让 Claude Code 用 13 种语言实现了一个简化版本的 Git。Ruby、Python 和 JavaScript 速度最快、成本最低、稳定性最好。静态类型语言的速度和成本相差 1.4–2.6 倍。
哪种编程语言最适合 AI 编码 agent?
"静态类型可以防止 AI 幻觉 bug!""不,跳过类型注解可以节省 token!"
争论很多,但量化数据很少。所以我做了个实验。
我要求 Claude Code 用各种语言实现一个"mini-git"(Git 的简化版)并测量每个版本的时间和成本。Git 因 Linus 在两周内完成而闻名,所以这个任务看起来很合适。
该任务分为两个阶段:
v1 (新项目):实现 init、add、commit 和 log。
v2 (功能扩展):添加 status、diff、checkout 和 reset。
提示词很简单:"Read SPEC-v1.txt, implement it, and make sure test-v1.sh passes."。v2 的方式类似。
对比的语言:
每种语言运行 20 次。模型是 Claude Opus 4.6(高思考力)。
20 次试验的平均结果,按平均成本排序。
在 600 次运行中(15 种语言 × 2 个阶段 × 20 次试验),只有 3 次失败(测试未通过)。失败的是 Rust(2 次)和 Haskell(1 次)。在一次 Rust 失败日志中,agent 声称"测试是错的"。由于其他所有 Rust 试验都成功了,这看起来是一次幻觉。
总时间的点图(v1 + v2):
Ruby、Python 和 JavaScript 排在前 3 位:73–81 秒,$0.36–0.39,标准差较低——快速且稳定。
从第 4 位开始(Go、Rust、Java),方差大幅增加。Go 平均 102 秒,但离散度为 ±37 秒。
时间和成本强烈相关:
v2 完成后的代码行数:
OCaml(216 行)、Ruby(219 行)和 Haskell(224 行)最紧凑。C 明显突出,有 517 行。
有趣的是,代码更少并不意味着更快或更便宜的生成。OCaml 和 Haskell 代码紧凑,但在速度和成本效率上处于中等偏下水平。
"Turns"是单个 prompt 执行中的 API 往返次数(工具调用 → 结果 → 下一个响应)。
v1 显示语言之间最大的差距。Python(32.9 秒)和 Ruby(33.2 秒)领先,JavaScript(36.0 秒)紧随其后。Ruby/Steep 耗时 105.0 秒——比纯 Ruby 慢 3.2 倍。Lua(96.4 秒)和 OCaml(80.9 秒)也很慢。
v1 从空目录开始,所以需要项目配置文件的语言(Cargo.toml、package.json 等)会产生额外开销。Python、Ruby 和 JavaScript 只需生成一个 minigit 文件,这可能部分解释了这个差距。
在 v2 中,差距缩小。前 3 名仍然是 Ruby(40.0 秒)、Python(41.8 秒)、JavaScript(45.1 秒)。Perl(45.7 秒)、OCaml(47.1 秒)和 Lua(47.2 秒)紧随其后。
Haskell 在 v2 中也是最慢的,平均 99.6 秒,尽管代码行数最少(224 行)——它似乎在思考 token 上花费很多。C 耗时 90.8 秒,受其高 LOC(517)拖累。
类型检查器开销:Python/mypy 比 Python 慢 1.6–1.7 倍;Ruby/Steep 比 Ruby 慢 2.0–3.2 倍。
所有实验代码和结果都在 GitHub 上:
mame / ai-coding-lang-bench
哪种编程语言最适合 Claude Code? 用 Claude Code 对 13 种语言进行基准测试。
一个定量基准,比较 Claude Code 在 13 种编程语言中的代码生成效率。
详细讨论见博客文章:Which Programming Language Is Best for Claude Code? / 日本語版
至少对于原型规模的任务,Ruby、Python 和 JavaScript(不是 TypeScript)似乎最适合 Claude Code——最快、成本最低、最稳定。
"静态类型防止 AI 幻觉 bug!"VS"动态类型节省 token!"——定性论证很多,但定量数据很少。本实验旨在填补这个空白。
我们要求 Claude Code(Opus 4.6)用各种编程语言实现 mini-git(Git 的简化版),并测量每个版本的时间、成本和代码行数。
该任务分为两个阶段:
v1(新项目):实现 init、add、commit 和 log。
单次运行结果在 report.md 中。执行日志和生成的源代码在 data 分支上。
注意:benchmark.rb 使用 --dangerously-skip-permissions,所以如果想复现实验,请小心(我在 Docker 内运行)。
接下来是我的解读。我是 Ruby 贡献者,请记住这个偏见。我也没有详细分析所有生成的代码。
这个实验无法确定单一原因,我认为也没有单一原因。但我们可以从趋势形成假设:
类型系统:动态语言始终更快、更稳定。
简洁性:较短的代码通常意味着生成更快——但 OCaml 和 Haskell 代码紧凑却成本较高,似乎是由于思考 token 使用量大。
过程式 vs. 函数式:排除前 3 名,过程式和函数式语言之间没有很大差距。值得注意的是,OCaml 在 v2 中实现了 47.1 秒,与 JavaScript 相当(尽管 OCaml 可以用过程式风格编写,所以纯函数式比较很困难)。
语言特定难度:C 的内存管理和 Rust 的所有权模型可能增加开销。
AI 熟悉度:Python、Ruby 和 JavaScript 的训练数据远多。Scheme 和 Haskell 可能更少,结果反映了这一点。Ruby/Steep 相比 mypy 的更大开销(2.0–3.2 倍 vs. 1.6–1.7 倍)可能也反映了 AI 对 Steep 的熟悉度不如 mypy。
最可能的是,这些因素结合产生了观察到的结果。
可能。测试通过了,但动态类型语言中未测试的路径可能有类型错误。
也就是说,类型错误是最容易检测和修复的 bug 之一。如果 agent 经常在没有类型检查器的情况下引入类型错误,它可能也会以类似的速率引入逻辑 bug——这时问题就超越了类型检查范围。
值得注意的是,600 次运行中唯一的 3 次失败都在 Rust(2 次)和 Haskell(1 次)——都是具有所有权和 monads 等独特概念的静态类型语言。这可能是巧合,但类型并不能防止所有 bug。
在实际开发中,你不断迭代:prompt → 等待 → 思考下一个任务 → 再次 prompt。等待 30 秒和等待 60 秒之间的差异很重要——不仅在总时间上,而且在专注力和流畅度上。响应时间在迭代开发中至关重要。
"花更长时间构建更健壮的东西"是个合理的论证,但当竞争对手以两倍速度交付时,等待是正确的选择吗?开发速度本身是品质的一个维度。
也就是说,如果将来差异缩小到 1 秒对 0.5 秒,那它确实不会重要。
我同意。但设计一个对 15 种语言都公平的大规模基准相当具有挑战性。有人应该尝试。
绝对是。从生成的角度来说也是——如果你能利用生态系统,就需要生成更少的代码,这应该更快、更便宜。如果运行时速度对你的应用至关重要,就没有理由选择缓慢的动态语言。
在本实验中,我特意选择了没有外部库依赖的任务来隔离语言级别的差异。规范使用自定义哈希而不是 SHA-256 的原因是这样。
我定量评估了哪些编程语言最适合用 Claude Code 进行代码生成。至少对于原型规模的任务,Ruby、Python 和 JavaScript 似乎是最合适的。
静态类型可能在更大规模上变得有利——有人应该测试这个。
经典策略——先使用动态语言,随着项目成熟迁移到静态语言——仍可能是正确的选择。编码 agent 似乎非常擅长跨语言迁移(需要验证),使得这个选择变得越来越现实。
于 2026 年 3 月评估。鉴于 AI 进步的速度,结果可能在几个月内就会改变。
本实验由 Claude for Open Source Program 支持。感谢 Anthropic 提供 6 个月免费的 Claude Max 20x!