The March Programming Language

@march-lang.bsky.social

March is a statically-typed FP language: actors and message passing from the BEAM, algebraic data types from ML, compiled to native binaries through LLVM. Perceus RC with in-place reuse means no garbage collector and no pauses, at Rust-like performance.

New versions will ship with [@lemma] march-lang.org/docs/lemmas/ which marks a plain March function that proves something at compile time via Z3 and is erased. A lemma under `cap verified` combines theorem proving with capabilities sot hat the compiler reject code that can't be proven.

Lemmas — March

A statically-typed, capability-based functional language in the ML/Elixir tradition, with a compile-time effect system and native-code compilation via LLVM.

march-lang.org

March can now infer refinement types for you. march --refine-infer tries candidate contracts, keeps only the ones the SMT-backed checker proves and that close an open obligation without breaking a caller, writes them, then re-checks. Two unproven obligations → two contracts → verified.

March 0.5.0, new since 0.4: • Choreographies: one global protocol, projected to typed per-role endpoints, run across a cluster • Set measures (elts, card) and abstract refinements, via SMT • Epoch-versioned hot reload • Live nodes: remote REPL, actor tracing, forge top, and which code is running

Coming soon: What did the compiler do to my function? `forge query fn handle` lists every pass that changed it and prints the IR after the last. `why-miss` names the input that busted your cache. Add `--json` and an agent can ask the compiler instead of grepping a 10k-line dump.

March 0.4.0 is out: • TRMC is on by default — natural `map` no longer blows the stack • Scheduler threads track your CPU count • Interpreter ~11x faster • Parallel allocation no longer scales negatively • Actor.stop drains instead of dropping github.com/march-language/march/releases/tag/v0.4.0

Release March v0.4.0 · march-language/march

Added Compiled to_string/println render a user ADT's constructor, not #<tag:N>. A boxed constructor cell carries a per-type tag and nothing else, so the compiled backend's type-erased formatter h...

github.com

The next version will include capability audits from the build tools, and file scoped read/write capabilities. You'll be able to see if dependencies use capabilities and compile them out of modules you don't call. A malicious dependency without a file read and network CAP can't exfiltrate files.