News for hackers. Stuff that matters.
Re:Rust stabilizes generic associated types by kibwen on Tuesday September 13, 2022 @05:20PM (#32830326)
Conceptually it's "just" the ability to take one existing concept, generics, and apply it to another existing concept, associated types. Under the hood there's a lot going on to make that work with the type system, and there's some advanced things that this now enables, but as far as a beginner is concerned this is less "a new feature" than "lifting a restriction on an existing feature".

By analogy, imagine a version of C where you can't use a struct as a member of a union. Then, a new version of C comes along letting you use structs in unions. We could call that a new feature, "struct-in-unions"... or we could just call it lifting a restriction on an existing feature. It's entirely natural to want to use structs with unions, and it's probably what a learner of the language intuitively expects should be possible. Likewise, a learner of Rust probably expects that any type can be used as an associated type, and before today that wasn't true, and after today that is true.

Re:Rust stabilizes generic associated types by smilekzs on Thursday September 15, 2022 @08:44PM (#32860510)
I second this as a recent learner.

I have been learning Rust by writing some toy code over the weekends, and 9 out of 10 times when I hit a roadblock and went to my local Rust Users Group, the answer was "just wait for GAT". Turns out these patterns occur organically out of fairly mundane needs of abstraction (e.g. the now-infamous `LendingIterator`), and especially for me as a C++17/20 daily driver, _arbitrary_ limitations on expressivity.

Don't get me wrong --- Rust feels a lot more expressive than C++17/20 in the vast majority of areas, but for the rest maybe 10%, it's pothole land for stable Rust. Eliminating some of these potholes is a big win for Rust's adoption story.

Re:Rust stabilizes generic associated types by downvotetruth on Tuesday September 13, 2022 @05:56PM (#32830670)
Generics being a form of a compiler only dependently typed lambda axis is still infinitely more complex than chaining product & coproduct (sum) data types.
Re:Rust stabilizes generic associated types by kibwen on Tuesday September 13, 2022 @05:57PM (#32830695)
Please elaborate? Keep in mind that Rust isn't about making the simplest or most expressive language possible. Rather, it's about pushing the envelope on what sort of expressiveness we can soundly get away with while still benefiting from mechanical sympathy given the current state-of-the-art of optimizing compilers (and, also, while not being so foreign as to cause C-style language programmers to run away screaming).
Re:Rust stabilizes generic associated types by downvotetruth on Tuesday September 13, 2022 @07:01PM (#32831243)
It's labeled "stable", but this seems to require a bit more understanding by implementers than simple composition to safely use, specifically the part about "where clauses [being] required when those bounds can be proven in the methods that construct the GAT or other associated types that use the GAT in the trait".
Re:Rust stabilizes generic associated types by capableweb on Tuesday September 13, 2022 @05:44PM (#32830535)
> Conceptually it's "just" the ability to take one existing concept, X, and apply it to another existing concept, Y.

Yes, precisely. This is the literally what parent was talking about, "programming language abstractions [...] stacking on top of each other"

Re:Rust stabilizes generic associated types by necubi on Tuesday September 13, 2022 @05:49PM (#32830584)
As opposed to creating completely different ways of doing things from the existing patterns?

The parent was echoing the common complaint (exclusively from people who don't actually use rust, in my experience) that rust is getting "too many features."

But as others in this thread has pointed out, features like GATs actually make the language simpler, because they're removing weird (and to a new user, unexpected) restrictions on existing features. This will then unblock removing other surprising restrictions, like the inability to use async functions in traits.

Rust takes the philosophy that it's better to do hard work in the compiler in order to make the language simpler and easier for users. That's what's happening here.

Re:Rust stabilizes generic associated types by AeiumNE on Wednesday September 14, 2022 @05:38AM (#32834978)
I thought it was doing hard work in the compiler to make the binary safe for processors.
Re:Rust stabilizes generic associated types by stusmall on Tuesday September 13, 2022 @06:20PM (#32830906)
Try thinking of it less as a new abstraction and more of removing a restriction from a previous abstraction. It is pretty easy to run into a situation where you want them without even knowing what the concept of a GAT is.

Rust gets a lot of unfair criticism of "adding new stuff" when a lot of what is "added" is actually removing restrictions and making it where a developer has less to learn.