A comprehensive benchmark reveals Ruby, Python, and JavaScript as the fastest and cheapest languages for AI coding agents, with dynamic languages outperforming static ones by 1.4-2.6x in both speed and cost.
When AI coding agents like Claude Code generate code, does the choice of programming language matter? A comprehensive benchmark testing 13 languages on a simplified Git implementation reveals surprising performance differences that could reshape how we think about AI-assisted development.
The Experiment: Building Mini-Git Across 13 Languages
To answer which language works best for AI coding agents, I conducted a controlled experiment using Claude Code (Opus 4.6) to implement a "mini-git" - a simplified version of Git with core functionality like init, add, commit, log, status, diff, checkout, and reset.
The task was split into two phases: v1 (new project) implementing the basic commands, and v2 (feature extension) adding the remaining functionality. Each language was tested 20 times to gather statistically significant data.
Languages tested included:
- Dynamic: Python, Ruby, JavaScript, Perl, Lua
- Dynamic + type checker: Python/mypy, Ruby/Steep
- Static: TypeScript, Go, Rust, C, Java
- Functional: Scheme (dynamic), OCaml (static), Haskell (static)
The Results: Dynamic Languages Dominate
Across 600 runs, the performance differences were stark. Ruby, Python, and JavaScript emerged as clear winners:
Top Performers (Fastest & Cheapest):
- Ruby: 73.1s ± 4.2s, $0.36, 219 LOC
- Python: 74.6s ± 4.5s, $0.38, 235 LOC
- JavaScript: 81.1s ± 5.0s, $0.39, 248 LOC
Middle Tier:
- Go: 101.6s ± 37.0s, $0.50, 324 LOC
- Java: 115.4s ± 34.4s, $0.50, 303 LOC
- Rust: 113.7s ± 54.8s, $0.54, 303 LOC
Lower Tier:
- Perl: 130.2s ± 44.2s, $0.55, 315 LOC
- Python/mypy: 125.3s ± 19.0s, $0.57, 326 LOC
- OCaml: 128.1s ± 28.9s, $0.58, 216 LOC
Slowest:
- Scheme: 130.6s ± 39.9s, $0.60, 310 LOC
- TypeScript: 133.0s ± 29.4s, $0.62, 310 LOC
- C: 155.8s ± 40.9s, $0.74, 517 LOC
- Haskell: 174.0s ± 44.2s, $0.74, 224 LOC
- Ruby/Steep: 186.6s ± 69.7s, $0.84, 304 LOC
Only 3 failures occurred out of 600 runs (Rust 2, Haskell 1), suggesting remarkable stability across most languages.
The Type System Penalty
One of the most striking findings was the performance cost of static typing. Python/mypy was 1.6-1.7× slower than plain Python, while Ruby/Steep was 2.0-3.2× slower than plain Ruby. This overhead appears to stem from the AI spending more tokens on type annotations and the additional processing required for type checking.
Why Dynamic Languages Excel
Several factors contribute to the performance gap:
Token Efficiency: Dynamic languages require fewer tokens to express the same functionality, directly reducing generation costs.
AI Familiarity: Python, Ruby, and JavaScript have vastly more training data, making the AI more proficient at generating idiomatic code.
Project Setup Overhead: Languages requiring configuration files (Cargo.toml, package.json) incur additional setup time that dynamic languages avoid.
Thinking Token Usage: Surprisingly, more concise languages like OCaml and Haskell actually consumed more thinking tokens, suggesting the AI spent more time reasoning about complex type systems.
The Real-World Impact
The performance differences aren't just academic. In iterative development, the difference between 30 seconds and 60 seconds per iteration compounds significantly. When you're constantly prompting, waiting, and thinking about the next task, response time becomes critical to maintaining flow and productivity.
Counter-Arguments and Nuances
Critics rightly point out that this experiment favors greenfield projects. In complex existing codebases, static typing's benefits for discovery and validation become more pronounced. The experiment also doesn't account for runtime performance, ecosystem maturity, or long-term maintenance considerations.
Some argue that catching bugs early through static analysis is worth the performance penalty. However, the experiment showed that even statically typed languages failed occasionally, and type errors are among the easiest bugs to detect and fix.
The Future of AI-Assisted Development
The results suggest a pragmatic approach: start with dynamic languages for rapid prototyping, then migrate to statically typed languages as projects mature. Modern AI agents appear capable of cross-language migration, making this strategy increasingly viable.
As AI coding technology evolves, these performance gaps may narrow. But for now, the data is clear: for AI coding agents, dynamic languages offer a compelling combination of speed, cost-effectiveness, and stability that's hard to ignore.
The bottom line: If you're using AI coding agents for prototyping or greenfield development, Ruby, Python, and JavaScript aren't just viable choices - they're the fastest, cheapest, and most reliable options available.

Comments
Please log in or register to join the discussion