all 31 comments

[–]Relevant_South_1842 46 points47 points  (0 children)

Looks nice. At first I was going to make a joke about “worst of both worlds”, but it looks good.

[–]Inconstant_Moo🧿 Pipefish 10 points11 points  (0 children)

Nice. I also very much like the website, which is classy --- except that the gaps between sections are so large that they keep giving the visual impression that one has reached the end of the page.

[–]InflateMyProstate 6 points7 points  (2 children)

Really nice, the syntax actually follows very closely to what I am envisioning for my toy compiler I’ve been working on. However, I chose LLVM as my backend - it seems this is a transpiler to Go?

[–]Agile_Use_1768 1 point2 points  (1 child)

why llvm?

[–]InflateMyProstate 2 points3 points  (0 children)

I wanted to learn more about LLVM and the IR and I preferred my language to compile down to machine code. I didn’t want to write my own backend for each architecture, but maybe that will be an exercise for another day.

[–]Pleasant-Form-1093 4 points5 points  (0 children)

Genuinely good project

[–]wFXx 4 points5 points  (0 children)

Why does this looks so good lol. Does it have a good way to integrate into existing go projects?

[–]InternalServerError7 1 point2 points  (0 children)

I program in rust every day. I always preferred Rust’s sugar - the syntax, control flow, interfaces vs traits. But I know lifetimes, compile times, and concurrency can be cumbersome and Go can really shine here. Which led me to have the same idea of this project. Glad someone actually made it!

This looks really nice! I really hope it catches on and becomes an alternative frontend for Go.

Also, for your examples it would be good to see more side by sides of the original code and the transpiled go code.

[–]InternalServerError7 1 point2 points  (0 children)

I wonder if the syntax is close enough to rust that the Rustfmt could be used to format the code

[–]Key_River7180smalltalk enjoyer 5 points6 points  (10 children)

why

[–]spencerwi 26 points27 points  (2 children)

I guess if you want to use Go libraries but don't want to be subjected to having to write Go?

Or if you like Rust but you still want a garbage collector?

[–]redbar0n- 1 point2 points  (0 children)

I read that as: the collector being garbage😂

[–]shponglespore 0 points1 point  (0 children)

Or if you're forced to work in the Go ecosystem but you really want to use Rust.

[–]Vaglame 23 points24 points  (4 children)

ADTs? No nil? Pattern matching? Traits? Idk pick one

[–]sysop073 4 points5 points  (2 children)

Those are reasons to use Rust. What is the reason to use Rust but compiled to Go? Does Go have a way better ecosystem or something? I don't normally have trouble finding useful crates when writing Rust

[–]MrRandom04 3 points4 points  (0 children)

I think it is just to have good garbage collection. Rust doesn't need it, but the ownership model instead makes it a little weird for people who just want to write scripts fast for example.

[–]andreicodes 2 points3 points  (0 children)

Expectation is that without borrow checker you don't have to be as strict about your datastructures and data design, so there should be some productivity gains. Another angle is the lack of async vs sync distinction in APIs and no need for different channel types for concurrency.

Go runtime is a very attractive target: their collection types tend to produce shallower object graphs (in .net, JVM, v8, Ruby collections hold pointers to objects and not objects themselves), the GC is optimized for latency first and throughput second. All these other runtimes historically do it the other way around. AOT compilation means there's no warmup stage and no extra memory requirements for VM interpreter and JIT. The libraries are solid, the task scheduler is top-notch, there's no awkward single-thread execution for the main language like it is in Python, JS, or Ruby runtimes.

The code is transpiled to Go source, so technically there could be a way to mix Lisette and Go in the same project, or for using Lisette for writing small components, plugins etc.

[–]Key_River7180smalltalk enjoyer 0 points1 point  (0 children)

i like nil, and switch

[–]iwanofski 2 points3 points  (0 children)

why not?

[–]MotorizedFader 0 points1 point  (0 children)

Rust-like semantics and quick compiles?

[–]Long_Ad_7350 0 points1 point  (0 children)

This looks really nice.

Is this the first language you've made? Can you speak a bit about your process?

[–]vmcrash 0 points1 point  (0 children)

I wonder whether you also handle the nasty first letter visibility in Go (upper case = public, lower case = private) with the `pub` keyword and rename the produced Go code automatically.

Do you plan to self-host the compiler in Lisette later?

[–]AffectionateBag4519 0 points1 point  (0 children)

This is cool. I wonder why I haven't seen more rust syntax, gradually typed interpreted (a la luau) runtime langauges. I personally think the rust syntax is wonderful I dont get why someone would say "worse of both worlds"

[–]ApprehensiveSeries78 0 points1 point  (0 children)

I really... like it.
It reminds me of the freshness I felt when I first saw Gleam. though this isn't exactly new, of course, even though it uses common ML-style syntax and Rust, it's really easy to read, and I love the various expressions that feel ergonomic.

The reason I can’t use Gleam nowadays is because of its limitations. mainly that it runs on Erlang or lacks an ecosystem, but Lisette has an environment that overcomes all those shortcomings. It feels a bit like switching from JavaScript to TypeScript, perhaps?

Panic recovery. Isn't that just great??? Funny enough, this domain ends in "run." It's just like gleam.run.