Lisette a little language inspired by Rust that compiles to Go
jspdown
257 points
133 comments
April 05, 2026
Related Discussions
Found 5 related stories in 50.7ms across 3,663 title embeddings via pgvector HNSW
- Sed, a powerfull mini-language from the 70s random__duck · 19 pts · March 23, 2026 · 54% similar
- Notes on writing Rust-based Wasm vinhnx · 218 pts · March 08, 2026 · 53% similar
- An incoherent Rust emschwartz · 160 pts · March 23, 2026 · 53% similar
- A tail-call interpreter in (nightly) Rust g0xA52A2A · 147 pts · April 05, 2026 · 53% similar
- A preview of Coalton 0.2, a statically-typed Lisp fanf2 · 21 pts · March 15, 2026 · 52% similar
Discussion Highlights (20 comments)
phplovesong
Go has an awesome runtime, but at the same time has a very limited typesystem, and is missing features like exhaustive pattern matching, adts and uninitted values in structs. Lisette brings you the best of both worlds.
emanuele-em
Really nice work on this. The error messages alone show a lot of care, the "help" hints feel genuinely useful, not just compiler noise. I'm curious about the compiled Go output though. The Result desugaring gets pretty verbose, which is totally fine for generated code, but when something breaks at runtime you're probably reading Go, not Lisette. Does the LSP handle mapping errors back to source positions? Also wondering about calling Lisette from existing Go code (not just the other direction). That feels like the hard part for adoption in a mixed codebase. Is the goal here to eventually be production-ready or is it more of a language design exploration? Either way it's a cool project.
sail0rm00n
I’m sold just for proper enumeration support.
bestouff
For "classic" Rust what's actually nice is that no runtime is needed, so this looks like a step backwards. What would be actually nice is running async Rust on the Go green threads runtime.
baranul
There are several languages that compile to Go, trying to be a better a Go. Off the top of my head: XGo ( https://github.com/goplus ), Borgo ( https://github.com/borgo-lang/borgo ), Soppo ( https://github.com/halcyonnouveau/soppo )...
virtualritz
Looks great. But I can't help wondering: If it is similar to Rust why not make it the the same as Rust where it feature-matches? Why import "foo.bar" instead of use foo::bar? Why Bar.Baz => instead of Bar::Baz =>? What are you achieving here? Why make it subtlety different so someone who knows Rust has to learn yet another language? And someone who doesn't know Rust learns a language that is different enough that the knowledge doesn't transfer to writing Rust 1:1/naturally? Also: int but float64? Edit: typos
lucianmarin
A programming language similar to Python that compiles to Rust or Go will be amazing.
kubb
Oh look, a better syntax than the Go team could design!
melodyogonna
I'm wondering about the logistics of making this integrate with Go at the assembly/object file level rather than at source code level. What if it compiled to Go's assembly rather than to Go source code
rbbydotdev
Looks beautiful! Any plans to make it self compile?
rednafi
Go syntax and the Go runtime would be the perfect combo for me. Oh well... I love Rust for what it is, but for most of my projects, I can’t justify the added complexity. Sure, there are a bunch of things I miss from the Rust world when I’m working on large-scale distsys services in Go, but introducing Rust in that space would be a recipe for disaster. I guess the Go team knows that if they start adding everyone’s favorite Rust features, the language would become unrecognizable. So we’re not getting terser error-handling syntax or enums. Having union types would be nice too. But I work in platform engineering, so my needs are quite different from someone writing business logic in Go. I understand that having a more expressive syntax is nice when you’re writing complex business code, but in reality, that almost always comes with a complexity/fragility tradeoff. That’s part of the reason no one wants to use Rust to write their business logic, despite it being so much more expressive. For distsys, programming ergonomics matter far less compared to robustness and introspectability. So the Go runtime with Go syntax is perfect for this. But of course, that’s not true for all use cases. Sorry for the rant - completely uncalled for. This is a cool project nonetheless :)
bhwoo48
Love the idea of bringing Rust ergonomics to the Go runtime. As someone currently building infra-automation tools (Dockit), the trade-off between Rust's safety and Go's simplicity is always a hot topic. This project addresses it in a very cool way. Will definitely follow the development
ksec
On the surface this looks great. Seems to hit the sweet spot in a lot of areas. I know it is Rust inspired, but why write it in Rust and not Go?
emehex
Looks a lot like Swift! Awesome!
thomashabets2
I've chatted a bit with the author, but not actually tried the language. It looks very interesting, and a clear improvement. I'm not particularly quiet about not liking Go[1]. I do think there may be a limit to how far it can be improved, though. Like typed nil means that a variable of an interface type (say coming from pure Go code) should enter Lisette as Option<Option<http.Handler>>. Sure, one can match on Some(Some(h)) to not require two unwrapping steps, but it becomes a bit awkward anyway. (note: this double-Option is not a thing in Lisette at least as of now) Lisette also doesn't remove the need to call defer (as opposed to RAII) in the very awkward way Go does. E.g. de facto requiring that you double-close on any file opened for write. Typescript helps write javascript, but that's because until WASM there was no other language option to actually run in the browser. So even typescript would be a harder sell now that WASM can do it. Basically, why try to make Go more like Rust when Rust is right there? And fair enough, the author may be aiming for somewhere in between. And then there's the issue of existing codebases; not everything is greenfield. So this seems best suited for existing Go codebases, or when one (for some reason) wants to use the Go runtime (which sure, it's at least nicer than the Java runtime), but with a better language. And it does look like a better language. So I guess what's not obvious to me (and I mentioned this to the author) is what's the quick start guide to having the next file be in Lisette and not Go. I don't think this is a flaw, but just a matter of filling in some blanks. [1] https://blog.habets.se/2025/07/Go-is-still-not-good.html
oncallthrow
I've read the entire page and still don't know whether or not I can import Go modules in this language, which seems rather important
bluebarbet
Eats shoots and leaves.
smokel
This is great news for those of us looking for baby names. So far my list includes: Pascal, Ada, Dylan, Crystal, Lisa, Julia, Ruby, and now Lisette.
tempaccount420
Please commit your CLAUDE.md
jasdfwasd
Could large data types be problematic for the prelude types Option/Result/Tuple? They don't store as pointer and every receiver is by value.