Remix.run Logo
andai 9 hours ago

In my experience, what's actually nice is the correctness. The low-levelness is not helpful for most of the software I write, and imposes a constant burden.

Rust, of course superbly achieves its goals within its niche! But it is a niche, is my meaning here.

What I actually want is code that's correct, but ergonomic to write. So my ideal language (as strange as it sounds) would be Rust with a GC.

I don't want to worry about what string type I'm using. I want it to just work. But I want it to work correctly.

Lisette looks like it's in this exact category! It seems to combine the best aspects of both Rust and Go, which is a very promising endeavour. I'll have to take a proper look :)

mirekrusin 8 hours ago | parent | next [-]

MoonBit [0] is the best/future complete/active “rust with gc”.

[0] https://www.moonbitlang.com

bearforcenine an hour ago | parent [-]

Did MoonBit add support for some kind of shared memory concurrency like threads? I remember discovering the language, being very excited about it, and then learning it is single-threaded, which makes it a poor replacement for Rust IMHO.

akkad33 9 hours ago | parent | prev | next [-]

You can use Ocaml today and achieve all the correctness

masklinn 7 hours ago | parent | next [-]

> all the correctness

When did OCaml get affine types? Or unique references?

zozbot234 3 hours ago | parent [-]

https://oxcaml.org/

IshKebab 9 hours ago | parent | prev [-]

OCaml has a lot of other cons though that Rust doesn't have. I would definitely pick Rust over OCaml even for projects that can tolerate a runtime with GC pauses. (And clearly most people agree.)

amelius 9 hours ago | parent [-]

What cons?

jech 6 hours ago | parent | next [-]

The ecosystem. The language is lovely, but dune/opam is not up to the standard of the Go or Rust build systems, and the set of useful libraries is somewhat skewed. Whenever I write a program in Caml, I gain an hour thanks to the nice language, and then lose two fighting with dune/opam.

There's also the support for concurrency and parallelism, which has started to improve recently, but is still years behind what is available in Go (but still better in my opinion than what is available in Rust).

zorobo 8 hours ago | parent | prev | next [-]

For example, multicore OCaml is not free of race conditions. The GC, while super efficient (pauses are in the milliseconds), is not suitable for hard realtime.

Still, where absolute max performance or realtime are not required, I'd choose OCaml as it is elegant & a pleasure to code in (personal opinion, ymmv).

IshKebab 5 hours ago | parent | prev [-]

Poor windows support, confusing and buggy tooling (yeah really), mediocre documentation, global type inference, weird obsession with linked lists leading to performance gotchas, difficult syntax (yeah really), small community.

I can expand on any of those if you disagree with them.

gf000 9 hours ago | parent | prev [-]

There are an endless number of modern MLs that do the same thing. That's not a novelty - Rust was novel in making it part of a low-level language.

tux3 9 hours ago | parent [-]

I don't think being low level is the main innovation, really. There are several things Rust did right over traditional ML. Explicitly caring about learnability and the "weirdness budget". Having great error messages that don't require a course in category theory (many ML) or 800kB of scrollback buffer (C++) to understand.

Having great tools. Excellent documentation. Being friendly to new users.

Yes, it's also a systems language without a runtime. But that's not the novel part. You could write horrors in C++ that approximate ML even without language support. There are eldritch libraries where some kind of pattern matching is done via generic lambdas.

The main difference is developper UX. Good tools, good error messages, quality of life. The novelty is making ML not painful.

masklinn 7 hours ago | parent | next [-]

> Yes, it's also a systems language without a runtime. But that's not the novel part.

Low level strong correctness was absolutely a novel part. In fact it’s exactly why many people glommed onto early rust, and why it was lowered on the stack.

Although learnability and weirdness budgets were also extremely novel in low level contexts which had been subsumed by C and C++.

> horrors in C++

Yes, horrors in C++. Half baked jerry-rigged and barely usable nonsense. Not an industrial strength langage with a reliable type system and a strong focus on safety through types.

uecker 5 hours ago | parent [-]

Memory safety is not the same a scorrectness and more advanced type is also not the same thing as correctness.

masklinn 3 hours ago | parent [-]

50 years of computing have proved pretty conclusively that less than that is wishful thinking at best. Large C++ programs, even with massive amounts of resources and tooling, can’t even get memory management correct.

uecker 3 hours ago | parent [-]

That Rust gives you correctness is very misleading claim.

gf000 5 hours ago | parent | prev [-]

These are all great qualities of rust, but they would not have been enough to make a dent.

Being memory safe without being managed is what makes rust a truly novel and interesting language for which it rightfully gets the hype.