~/langs $ cargo build --release // compiling... still compiling...

ARUST

the compile-time paladin · memory safety with no garbage collector

2015 1.0 shipped 0 data races 0 GC pauses ~200 crates per hello world

[01] ORIGIN

Born at Mozilla from a simple observation: the browser is a million lines of C++, and every one of them is a potential CVE.

Graydon Hoare started Rust as a side project in 2006; Mozilla picked it up to build a parallel browser engine without the segfaults, and 1.0 landed in 2015. The bet was radical at the time: encode ownership and lifetimes into the type system so that memory bugs become compile errors instead of incident reports. The bet paid off so hard that the industry spent the next decade retrofitting "memory safety roadmaps" around it, and it is the language I reach for when strangers will run my code: Marmot's MDK and the core of White Noise are Rust, on purpose.

creatorGraydon Hoare, then the Rust teams; Mozilla-incubated
paradigmownership + borrowing, expression-oriented, sum types
memorycompile-time proven, no GC
depscargo + crates.io (read the indictment before you celebrate)
famous usersLinux kernel, Android, Firefox, Cloudflare, basically every wallet
my useMDK, White Noise internals: the code that holds other people's keys

[02] WHAT IT GETS RIGHT

aura the borrow checker

Use-after-free, double-free, dangling pointers and data races are not bugs you fix in Rust; they are programs that don't exist. For cryptographic code that strangers run unsupervised, this is not a luxury. It is the entry requirement, and only Rust meets it without a garbage collector.

passive sum types done right

enum + match + Option + Result: the error path is a value the compiler refuses to let you forget, and adding a variant breaks every place that should care. Half of MDK's correctness lives in exhaustive matches over protocol states.

aura fearless concurrency

Send and Sync are compiler-checked properties, not comments. You refactor multithreaded code with the confidence of a single-threaded program, and the 3am pager stays quiet.

kit the tooling bar

cargo, clippy, rustfmt, rust-analyzer, rustdoc with tested examples. Every other systems language is graded against this kit now, and every other systems language fails.

stance fenced unsafe

When you must touch raw pointers, the danger sits inside a greppable unsafe block with a culture of documenting why it's sound. A million-line codebase audits down to its opt-outs.

passive zero-cost abstractions

Iterators, closures and generics compile to the loop you would have written by hand. The pretty code and the fast code are usually the same code, which is the promise C++ made and Rust kept.

[03] THE CODE

enum Payment {
    Lightning { invoice: String },
    OnChain   { address: String, sats: u64 },
}

fn process(p: Payment) -> Result<Receipt, PayError> {
    match p {
        Payment::Lightning { invoice } => pay_ln(&invoice),
        Payment::OnChain { address, sats } => pay_chain(&address, sats),
    }
    // add a Monero variant tomorrow and this function refuses
    // to compile until you handle it. that's the whole pitch.
}

The state space is the type. match must cover it, Result must be looked at, and the failure path is as visible as the happy path. "If it compiles, it works" is a meme because it keeps being true.

[04] THE BAD

// status effects

  • LONG CAST TIMEcompile times measured in coffee breaks. The proofs have a price and you pay it on every build, every CI run, every "let me just check one thing".
  • SPLIT PERSONALITYasync Rust and sync Rust are two games on one cartridge. Pin, executors, function coloring: the async half re-imports the complexity the sync half so elegantly removed.
  • CHECKER STUN-LOCKthe borrow checker also rejects programs you know are fine, so you architect around it: arenas, indices instead of references, clone-and-move-on. Sometimes you're designing for the prover, not the problem.
  • CRATE GACHAcargo made dependencies frictionless, and frictionless is the disease: hello-world pulls two hundred crates from strangers. The language is A tier; the dependency culture is F.

[05] VERDICT

A tier. When the code holds other people's keys, the paladin takes the field.

Use it when failure costs someone else: protocol libraries, wallets, anything security-critical that ships to machines you don't control. That's exactly why Marmot's MDK is Rust. For code you own end to end, where you want the machine close and the ceremony gone, the brawler is more fun and nearly as fast to write. Vendor your crates either way; you know why.

// the borrow checker has never once apologized. it has also never once been the bug.