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

· web systems devtools · Source ↗

TLDR

  • let-go is a bytecode compiler and VM for a Clojure-dialect written in Go: 10MB binary, ~7ms cold start, standalone executables, and WASM output.

Key Takeaways

  • Benchmarks vs Babashka (GraalVM native): 7ms vs 20ms startup, 14MB vs 27MB idle memory, 10MB vs 68MB binary size.
  • Passes 4696/4921 assertions (95.4%) of the jank-lang/clojure-test-suite across 217 test files.
  • Compiles to standalone binaries (lg -b myapp) or self-contained WASM HTML pages (lg -w outdir) with xterm.js terminal emulation.
  • Supports Babashka pods, core.async (real goroutines, not IOC), nREPL (CIDER/Calva/Conjure), and Go struct interop via RegisterStruct[T].
  • Known gaps: no STM/Refs, no Agents, no chunked seqs, no clojure.spec, numeric overflow wraps silently on int64.

Hacker News Comment Review

  • Commenters immediately flagged an ecosystem crowding question: Joker, Janet, Glojure, and let-go all occupy similar space, with active cross-project collaboration already happening between let-go and Glojure authors.
  • There is a thread-level consensus that Go’s runtime and stdlib are the real draw; the syntax layer is what these projects are solving, with Lisette also mentioned as an active compile-to-Go alternative.
  • A minor README inconsistency (7ms vs 6ms) was caught and corrected by the author; median is ~6.5ms on Apple M1 Pro.

Notable Comments

  • @veqq: Points to Janet in production use and Fennel (Lua VM) as mature JVM-free Clojure-like alternatives worth comparing.
  • @phplovesong: “signals that the runtime / stdlib of Go is one of the best” but surface syntax drives developers toward lisps and DSLs on top of it.

Original | Discuss on HN