2026-07-09

Rust Is a Harness

Languages win adoption for all kinds of reasons (ecosystem, tooling, corporate backing), but language design itself has spent the last twenty years optimizing for the human writer. Python reads like pseudocode, Ruby was built for programmer happiness, and Go's pitch was that a new hire could read the codebase on day one. That design target assumes a human is doing the typing. When an agent writes most of your code, how pleasant the language is to write matters less than how quickly and precisely it can tell the agent it's wrong.

Fail while the agent is still in the loop

Rust moves failure forward in time, to the moment when the agent is still in the loop and correction costs almost nothing. The agent writes code with a lifetime error, the compiler rejects it with line numbers and a suggested fix, and the agent applies the fix. The cycle takes seconds and costs a fraction of a cent. The same bug in a dynamic language costs a production incident and someone's evening.

People used to say the borrow checker was Rust's biggest adoption problem. Fighting it was a rite of passage. An agent doesn't get frustrated. It will go around the compile-and-fix loop fifteen times without a word of complaint, and each lap takes seconds. The borrow checker stopped being a tax on human patience and became cheap verification.

Ergonomics are a depreciating asset

Optimizing for the human writer was the right bet when humans wrote every line. When an agent writes 80% of the code, the value of "pleasant to write" collapses. The agent doesn't care that Rust makes it spell out ownership, and it doesn't get tired of writing Result<T, E> and matching on every error variant. Verbosity, the classic complaint about strict languages, is nearly free when a machine produces the text.

What still costs real money is verification, because every line the agent writes is a line someone or something has to check. This is where a strict language flips from liability to asset: the more the compiler verifies, the less the human reviewer has to. When I review agent-written Rust, the memory safety questions are already answered and a whole class of concurrency bugs can't exist in the safe subset, so my attention goes to logic and design, which is where agents still actually make mistakes.

The type system is a spec language

There's a second effect that I think is underrated: Rust's type system carries intent. When you encode your domain in enums and traits, and a function signature says it takes &mut self or returns Option<T>, you've written a machine-checked specification of what the code is allowed to do.

Agents are much better at satisfying a spec than at inferring one. Give an agent a rich set of types and a function signature, and the space of plausible implementations shrinks a lot, because half the wrong answers won't compile. In a dynamic language the agent has to guess your intent from names and comments, and comments drift out of date in a way that types can't.

This is also why agent-driven refactoring works so well in Rust. Change a type and the compiler hands you the complete list of call sites that need updating, and the agent walks the list until it's empty. The same refactor in Python is a grep and a hope, and the agent hopes with exactly as much accuracy as you'd expect.

A prediction

When code generation is cheap, verification is the bottleneck, and Rust ships more verification per line than anything else in mainstream use. So among teams where agents write most of the code, I expect Rust to become the boring, obvious default for new backend and systems work, the way Java was the boring default for enterprise software in 2005. This doesn't cover frontend or data science, and it's not every company, but I'd be surprised if it takes more than a few years.

The bigger change is to language design itself. Languages have always been shaped by their users, and for seventy years the user was a human, so we optimized for human working memory, human patience, and human taste. The user is changing, and the pressure now is for machine-readable diagnostics, checks that run in seconds, and semantics strict enough that wrong code fails to compile instead of failing in production. The next mainstream languages will be designed as harnesses from the start. Rust is just the one that's furthest along today.