Go로 만든 Clojure 유사 언어 Let-go 공개, JVM Clojure와 약 90% 호환하며 10MB 정적 바이너리로 7ms 부팅
편집자 요약
Let-go는 pure Go로 작성된 Clojure 유사 언어로, JVM Clojure와 약 90% 호환되며 약 10MB 정적 바이너리로 배포됩니다. 개발자는 콜드 부팅 시간이 약 7ms로 JVM보다 약 50배, Babashka보다 약 3배 빠르며, nREPL 서버와 Go 프로그램 내 임베딩, AOT 컴파일을 지원한다고 설명합니다.
맥락
Let-go는 Clojure 생태계의 표현력을 유지하면서 CLI, 웹 서버, 데이터 처리 스크립트처럼 빠른 시작 시간과 단일 바이너리 배포가 중요한 영역을 겨냥합니다. 다만 JAR 로딩과 Java API 지원이 없어 기존 Clojure 프로젝트의 대체재라기보다는, 경량 런타임과 Go 임베딩을 결합한 새로운 실행 환경 실험에 가깝습니다.
본문
Let-go is a Clojure-like language (~90% compatible with JVM Clojure) written in pure Go. It ships as a ~10MB static binary and cold boots in ~7ms - that's about 50x faster than JVM and 3x faster than Babashka. It has decent throughput on algorithmic workloads - within ballpark of the GraalVM-backed sci.<p>I started this project in 2021 as an elaborate practical joke: I wanted to have an excuse for writing Clojure while pretending to write Go.<p>Jokes aside, it turned out to be pretty decent: it feels like real Clojure, it has an nREPL server (supported in Calva, CIDER, etc.), it's easily embeddable in your Go programs (funcs, structs and channels cross the boundary without fuss). It's good for writing CLIs, web servers, data processing scripts and even doing some systems programming - I used it to write a deamonless container runtime. Oh, and it runs on Plan9.<p>Under the hood there is a fairly simple compiler and a stack VM, both handcrafted specifically for running Clojure-like code. The compiler can work in AOT mode producing portable bytecode blobs and standalone binaries (runtime+bytecode).<p>This is not a drop-in replacement for Clojure in general - it does not load JARs, it does not have all Java APIs and it most probably won't run your exiting Clojure projects without modifications. At least not at the moment.<p>Take it for a spin, tell me what you think. Issues and PRs are welcome!