The Mica compiler is 165,186 lines of Go across 663 files, with an empty dependency set. Not a small dependency set — empty. The GNU assembler and linker are the only external tools involved, and they consume textual assembly the compiler emits.

Why this matters beyond tidiness

Procurement. A toolchain built on a multi-million-line dependency needs a supply-chain answer: which transitive dependencies, from whom, updated on whose schedule, audited by whom. Here the answer is that there are none. For a regulated or security-sensitive environment that is a materially different conversation.

One thing to trust, not a tree of them. Every phase — scanner, parser, type system, semantic analysis, intermediate language, inlining, control flow and SSA, obligation analysis, register allocation, two native backends, ELF and DWARF emission — is ours. Adopting Mica means trusting one vendor, not a vendor plus everyone who ever contributed to a dependency it pulls in.

Reproducibility. A build that depends on nothing external is a build that still works in five years, and one whose output does not shift because a transitive dependency changed a default.

Inspectable at every stage

Every intermediate stage can be dumped, as text or as JSON: tokens, the abstract syntax tree, the typed intermediate language, SSA form, the assembly, and the debug metadata. The compiler also narrates its own memory decisions — one line per allocation site, giving the lifetime class it established and the allocator it selected.

Nothing about the safety story happens behind a curtain. You can watch it reason, which is as useful for evaluating a claim as it is for teaching.

Verified, not asserted

Correctness rests on a test corpus of 1,389 programs declaring 8,436 test cases, of which 1,378 programs run on both architectures. The merge gate runs three suites concurrently — including one that puts the compiler’s own Go code under the race detector, and one that exercises a legacy lowering path kept green deliberately as a differential oracle against the SSA path.

A compiler warning fails the suite. See how we verify.

See also