This is the reference index for what the Mica compiler actually does. Each entry is a single page covering one capability: the problem it solves, what it looks like in code, what the compiler guarantees — and, in a section every page carries, what it deliberately does not promise.
Status marks what has shipped. shipped means it is in the released compiler
and covered by the test corpus; building means it is merged but still growing;
designed means the specification is settled and the implementation is not
started.
shipped
15
Memory and lifetime
Heap lifetime proven at compile time
shipped
Every allocation creates an obligation. Wherever the compiler can follow the pointer, an undischarged cell is a build error - with no garbage collector, no borrow checker, and no annotations to write.
Ownership without lifetimes
shipped
Values copy, pointers share, exactly one owner disposes. Ownership defaults follow data-flow direction, so the common case needs no annotation at all.
Allocator selection is a link-time decision
shipped
Hosted or freestanding fixed-arena - chosen when you link, with byte-identical code generation across both. Compiler-scheduled regions run inside either. The intermediate language never names malloc.
Concurrency
Compile-time data-race freedom
shipped
Sharing must be spelled. A task that touches a global or an ancestor's cell without a synchronized mark is a compile error - including through a call, and including via a bare address.
Determinism as a shipped guarantee
shipped
Parallel linear algebra is bit-identical to serial at every carrier count. Floating-point contraction decides identically on both backends. Reductions stay on a single carrier rather than being split across them.
Memory model and ordering guarantees
shipped
Mica adopts DRF-SC, and a small named set of runtime seams is the only source of happens-before ordering a program can observe.
Tasks and blocking I/O
shipped
A task that would block on a descriptor leaves the ready queue instead. The carrier runs the other tasks, readiness re-queues it, and the call retries.
Language and types
The failure channel
shipped
Bugs and expected errors do not share a mechanism. Recoverable failures travel on a channel declared in the signature; bugs terminate deterministically.
Refusals as design
shipped
Constructs that would defeat whole-program analysis are refused by the compiler, not discouraged by convention. Each refusal has a structural replacement.
Code generation
Own code generation, end to end
shipped
No LLVM, no GCC backend. Scanner through SSA optimization, register allocation, and ELF emission - two native backends, all of it ours.
How the optimizer sees your code
shipped
The control flow graph, liveness, and reaching definitions — the facts Mica proves about a program before any optimization is allowed to change it.
Register homes are a release-mode decision
shipped
Two register allocators sit behind one placement seam — a whole-function linear scan and a graph colourer with copy coalescing — and a debug build runs neither, so every value keeps a stack home the debugger can read at any program point.
Global value numbering
shipped
Repeated pure computations are identified by hashing their operation and operands, and eliminated where an earlier occurrence provably dominates the later one.