Skip to content
Tech News
← Back to articles

Show HN: I made a Clojure-like language in Go, boots in 7ms

read original get Go Programming Language Book → more articles
Why This Matters

This new language combines the simplicity and speed of Go with the expressive power of Clojure, offering a lightweight, fast-starting, and versatile environment for developers. Its ability to compile into standalone binaries and web apps with minimal startup time makes it particularly appealing for modern deployment scenarios and browser-based applications. This development could influence how developers approach language interoperability, deployment, and performance optimization in the tech industry.

Key Takeaways

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