Top
Best
New

Posted by marcingas 11 hours ago

Show HN: I made a Clojure-like language in Go, boots in 7ms(github.com)
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.

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.

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.

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).

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.

Take it for a spin, tell me what you think. Issues and PRs are welcome!

119 points | 37 commentspage 2
j3s 4 hours ago|
absolutely sick of reading through obviously AI-slopped READMEs. it's your project, take a little pride and tell me why i should like it quickly instead of asking your agent to rattle off a list of features -- it's severely boring & offputting.
marcingas 4 hours ago|
Thanks for feedback. Here's a pre-AI-slopped README https://github.com/nooga/let-go/blob/98c2e2ebf38519bceb4f799...

You can also refer to the HN post itself - it says why I think it's cool.

jimbokun 2 hours ago|||
This version is infinitely better.
j3s 4 hours ago||||
apologies if i was blunt - readme sloppage is a particular annoyance of mine that is quickly becoming common. i'm not against vibecoding, far from it. but a readme is a part of a project that humans immediately touch - seeing it littered with em-dashes signals carelessness.

i appreciate you taking my feedback with grace.

rcarmo 2 hours ago|||
I would like to point out, again, that em dashes are very much used by humans that run macOS or iOS — like in this case.
marcingas 3 hours ago|||
No worries at all. I understand your point. I'll look into fixing this!
stingraycharles 3 hours ago|||
Why did you feel the need to slopify your README? The original version read much, much better.

I genuinely don’t understand why people do this.

marcingas 3 hours ago||
Good question, perhaps I really was just careless. I'll look into fixing the README.
stingraycharles 3 hours ago||
It’s all good. Your project is awesome (and I say this as someone who has done Clojure fulltime for 5 years and nowadays write mostly Go).
asdfasd323f 6 hours ago|
obviously vibecoded
marcingas 5 hours ago||
Yes, I have used AI to boost Clojure compat and fill out some blanks but the runtime itself is not vibecoded. I wrote it myself between Jan 2021 and July 2023. All commits on GH.
jeremyjh 5 hours ago|||
Did you even look at the repo history? Clearly it blasted off this year that way but that isn't how it started. Probably he got way more into it once he could make faster progress on all the yak shaving required to make it more useful.
marcingas 4 hours ago|||
Yeah, pretty much. I abandoned it in 2023 due to lack of time. At this point it had enough lift for solving AoC problems and writing small scripts. I've recently dusted it off and did the boring parts of the "roadmap" with Claude.
asdfasd323f 5 hours ago|||
I did. And it looks like you did too. Which is why you answered your own question in the second half of your comment, quite amusingly. "Probably" LOL!
jeremyjh 4 hours ago||
So...you didn't ?

https://github.com/nooga/let-go/tree/d9dc094822b2983ebf44604...

In 2023 he had a working Clojure compiler with:

Macros with syntax quote, Reader conditionals, Destructuring, Multi-arity functions, Atoms, channels & go-blocks a'la core.async, Regular expressions (the Go flavor), Simple json, http and os namespaces, Many functions ported from clojure.core, REPL with syntax-highlighting and completions, Simple nREPL server that seems to work with BetterThanTomorrow/calva,

adi_kurian 5 hours ago|||
Is it bad? Did you try it?
asdfasd323f 5 hours ago||
The readme clearly has abundant emdashes and emojis everywhere, the code itself is obviously vibed. Not really sure what you're objecting to, to be honest.
marcingas 4 hours ago||
Yeah, it has em dashes alright. But the emojis you're referring to were committed in January 2023 (0c4925c). But that's besides the point I guess. What is your point?
blanched 5 hours ago||
You made an account just to post this low effort “criticism”? What’s the point?
asdfasd323f 5 hours ago||
[flagged]