Greetings loafers! (λ-gophers haha, get it?)
This is a bytecode compiler and VM for a language closely resembling Clojure, a Clojure dialect, if you will. The smallest and fastest-starting Clojure-family language in Go — a single ~10MB binary with ~7ms cold start.
Why let-go?
Standalone executables — compile your program into a single binary with lg -b myapp main.lg . No runtime needed, just distribute and run.
— compile your program into a single binary with . No runtime needed, just distribute and run. WASM web apps — compile your program to a self-contained HTML page with lg -w outdir main.lg . Full terminal emulation via xterm.js, runs in any browser. Deploy to GitHub Pages or open locally.
— compile your program to a self-contained HTML page with . Full terminal emulation via xterm.js, runs in any browser. Deploy to GitHub Pages or open locally. Fast startup — 7ms cold start. Pre-compiled bytecode (LGB format) makes boot near-instant even with a large standard library.
— 7ms cold start. Pre-compiled bytecode (LGB format) makes boot near-instant even with a large standard library. Small footprint — 10MB binary, 14MB idle memory. 7x smaller than Babashka, 30x smaller than JDK.
— 10MB binary, 14MB idle memory. 7x smaller than Babashka, 30x smaller than JDK. Batteries included — core.async channels, HTTP server/client, JSON, Transit, IO, Babashka pods, nREPL server.
— core.async channels, HTTP server/client, JSON, Transit, IO, Babashka pods, nREPL server. Go interop — embed let-go in Go apps, map Go structs to records, call Go functions from let-go and vice versa.
— embed let-go in Go apps, map Go structs to records, call Go functions from let-go and vice versa. Broad Clojure compatibility — macros, destructuring, protocols, records, multimethods, transducers, lazy seqs, persistent data structures, BigInts.
... continue reading