/p/2026-08-10 · explainer
Paper explainer · 2608.06041 · Twist, Stone, Yannakoudakis & Zhang

It recommends Rust
and writes Python.

Ask a model to start a new project and it settles the language for you, usually without mentioning that it did. Across 25 models and 28 briefs drawn from areas where Python is a poor fit, models wrote Python 35.3% of the time while recommending it for only 10.7% of the same briefs — and fewer than half of all implementations used any of the model's own top three recommendations. Reading 9,826 of their reasoning traces explains it: 69.8% never weighed the language at all, and 7.8% invented a reason.

01 · The gap

Every model tested recommends Python less than it uses it

The design is simple enough to be hard to argue with. The same project brief is put to a model twice: once as "write code for this", once as "what are the best languages for this". Nothing else changes. Drag through the 25 models — they are ordered by how often each one reaches for Python — and watch the two bars separate.

Interactive · one model at a time2,100 samples per model · default decoding
050100%
writes Python more than it recommends it
the same brief, the same model, two questions — this gap is positive for all 25
follows its own top three
share of implementations written in a language the model itself put in its top three

Two patterns worth carrying away. Smaller models lean on Python harder — 66.5% for the smallest Nemotron against 18.3% for GPT-5.4 — and code-specialised models are not the exception you would expect: Codestral and both Code Nemotrons write Python for more than half of these projects, and adding code specialisation to Kimi K2.6 raised its Python rate by six points.

02 · The briefs

Seven areas, each a different reason Python is wrong

The benchmark is not a trick. Seven areas were picked so that each captures a distinct reason Python is a poor default — a runtime that will not fit, a platform that will not run it, a latency budget it cannot meet — with four concise, language-agnostic briefs in each. Two developers with seven or more years of experience independently rated Python weak, acceptable or strong for every one. Step through the areas.

Interactive · the seven project areas4 briefs each · 3 wording variants · 28 tasks

      

02040% of all responses

Aggregated over every model and every one of those briefs, Python is still the most common answer at 35.3%, with JavaScript at 19.0%, C at 13.4% and C++ at 8.0% — four languages covering 75.7% of all responses and every other language at 4% or less. On a benchmark constructed entirely from projects where the familiar default is the wrong one.

03 · The reason

Read the reasoning and mostly there isn't any

This is the part that turns a preference finding into an engineering one. Every Python implementation from the 15 models that expose raw reasoning traces was classified by what the trace actually says about the language choice — 9,826 of them, by a judge validated at 96.0% accuracy against hand labels on a held-out set. Step through what it found.

Interactive · why the model chose Python9,826 traces · 15 models · hierarchical labels
03570% of traces

      

The phrase to remember is the authors': the chain of thought starts too late. It reasons carefully about how to implement a stack it never chose. And the two error categories underneath — 7.8% fabricating a requirement that was never in the prompt, 1.9% naming one language and shipping another — are not preferences at all. They are a grounding failure and a consistency failure, and both are things you can test for.

04 · The consistency

Its advice and its output are barely correlated

Plot every model twice: how often it writes Python, against how often its implementation lands in its own top three recommended languages. Points below the dashed line are models that write Python more than they follow their own advice. Drag to inspect one.

Interactive · advice against output, all 25 modelsdashed line: writes Python as often as it follows its own advice
rank correlation, advice to output
1.00 would mean the languages it recommends most are the ones it uses most. The mean across all 25 is 0.17.
effective languages per area
How many languages a model really spreads across within one area. 1.00 means it always writes the same one. The mean is 3.05.

The best rank correlation on the board is 0.36, and one model is negative at −0.10 — the languages it pushes hardest are not the ones it writes. So a model's stated recommendation is close to useless as a predictor of what it will hand you, which means asking it "what should I use here?" and then telling it to build the thing are two independent draws, not one decision.

05 · In your stack

How often this lands in your repo illustrative

The relevant question is not whether models like Python. It is how many of the scaffolds your agent produces get a stack nobody chose. Set your volume and how much of it sits in areas where the familiar default is wrong.

Interactive · your volume against the measured ratesrates measured · your volume and mix are illustrative
scaffolds with an unexamined stack
at the measured rate for that tier, over the poor-fit share of your volume
of those, with a fabricated reason
at 7.8% of Python implementations carrying invented support for the choice

The cheap control is structural, not a better prompt. Make the stack decision its own step with its own output — a short written comparison of two or three candidates against the actual constraints, produced and reviewed before any file is created — and then check that the code you got back is in the language that step chose. That single check catches the 1.9% outright mismatches for free, and it forces the deliberation that 69.8% of traces skipped.

The numbers

What the paper actually reports

What this does not show

In practice