ML types.
Actor concurrency.
No GC Pauses.
March is a statically-typed functional language: actors and message passing from the BEAM, algebraic data types from ML, compiled to native binaries through LLVM. Perceus reference counting with in-place reuse means no garbage collector and no pauses, at Rust-like performance.
What makes March different
The right ideas, done right.
Performance
Zero-allocation recursive transforms
FBIP rewrites uniquely-owned data in place, so transforms like this allocate nothing on the reuse path. The functional-style rewrite is automatic; no unsafe code required.
See benchmarks →
Benchmark
tree-transform(depth=20, 100 passes)
After pass 1, March allocates nothing — every node rewritten in-place. 7.5× faster than OCaml. 19× faster than Rust. Apple M-series, --opt 2.
| Language | Median | Allocs/pass |
|---|---|---|
| Elixir (BEAM) | 2580 ms | 2M |
| OCaml (ocamlopt) | 3825 ms | 2M |
| Rust (rustc -O) | 9977 ms | 2M |
| March (FBIP) | 513 ms | 0 ✓ |
← Back
Concurrency
Actor model, typed and isolated
Share-nothing message-passing actors with supervision trees. Accidental shared mutable state is a compile error, not a runtime bug.
Type System
Hindley-Milner inference, ADTs, exhaustive patterns
Types flow without annotation boilerplate. The compiler enforces exhaustive pattern matching — a missing case is a compile error. Generics are monomorphized, no boxing overhead.
Memory
Deterministic memory, no collector.
Perceus reference counting reclaims memory the instant it's no longer used, at a point the compiler picks. Predictable latency, no collector, no pauses. Linear types guarantee file handles, sockets, and connections can't leak or double-free.
Try March
See how March feels to write.
Full playground — no install needed ↗Quick Start
Get started in minutes
One command installs on macOS and Linux.