Build log

Compile or Die

The Rust compiler does not care about your intentions. It cares about your precision. That is not a bug. It is the whole point.

The Rust compiler does not negotiate.

It does not accept roughly right. It does not let you ship something that might work and find out later. It does not care that you have been at this for six hours and you are fairly sure you understand what is happening. You either satisfy it completely or you go nowhere.

For the first three months, that feels like the language is broken.

It is not the language.

What The Compiler Is Actually Doing

Every other language has the same implicit contract: write the thing, run the thing, discover what was wrong with the thing in motion. The errors are runtime errors. The bugs are production bugs. The cost of imprecision is paid later, by someone, somewhere, usually at the worst possible moment.

Rust moves that cost forward. Every question the compiler asks: who owns this, can this be null, could two things touch this at once, are you certain about the lifetime of this reference: is a question that would otherwise be answered by a crash, a data race, or a silent corruption you would not find for weeks.

The compiler is not blocking you. It is making you pay now instead of later. The price is the same. The timing is not.

The Moment It Clicks

There is a specific moment that happens to every Rust developer. You have been fighting the borrow checker for days. You have rewritten the same function four times. You are starting to wonder if you made a mistake choosing this language.

And then the thing compiles.

And it works. First run. No segfault, no race condition, no mysterious behaviour under load. It just works, because the compiler already made you prove that it would.

That moment does not happen once. It keeps happening. And every time it does, the relationship with the compiler shifts. It stops feeling like an obstacle. It starts feeling like the most rigorous technical standard you have ever been held to.

Compile or Die as Architecture

For the kind of infrastructure CongDB represents, approximate correctness is not a starting point to iterate from. A context graph holding trust-weighted decisions for regulated institutions either behaves deterministically or it does not belong in the stack.

Rust enforces that standard at the point of construction, not the point of deployment. The discipline the compiler demands is the same discipline the problem demands. They are not in tension. They are the same requirement expressed in two different places.

That is not a constraint to work around. It is a constraint to work with.

What It Costs

The onboarding is real. The learning curve is steep. There will be weeks where progress feels slow because the compiler will not allow movement until the underlying question is answered precisely.

That is not wasted time. That is the work.

Every hour spent satisfying the compiler in development is an hour not spent diagnosing a production system under pressure. Every question it forces you to answer precisely is a question that would otherwise have been answered badly, later, in worse conditions.

Compile or die is not a boast. It is a description of the terms.

You learn to work on those terms, or you pick a different language. Both are valid choices. Just be clear about what you are trading.