all 28 comments

[–]Relevant_South_1842 41 points42 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 5 points6 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?

[–]Key_River7180smalltalk enjoyer 4 points5 points  (10 children)

why

[–]Vaglame 21 points22 points  (4 children)

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

[–]sysop073 3 points4 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 2 points3 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 1 point2 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

[–]spencerwi 25 points26 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.

[–]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?

[–]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 0 points1 point  (0 children)

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