> Is this a pain point at the moment for Rust devs?
No, in rust as long as you don't use a feature you don't need to know about it.
> Or is there actually a really large variety of styles?
There are official(-ish?) style guidelines. So while there are a variety of styles most code uses mostly the same style.
> I'm personally of the opinion that less is more.
Sure, but you normally want to have a "complete well rounded language".
For this in rust you need GAT, but you don't need HKT, Functors, Monades or similar.
I hope there will never be a Monade trait in std, it would add a lot of mostly hardly useful complexity we really don't need and would mostly be used for IMHO mostly useless over abstraction.
But GAT are really needed. E.g. to properly work with certain async use cases (through for this you only need GAT for lifetimes, not arbitrary type. In my experience GAT limited to lifetimes cover 80+% of the cases where you really really need GAT).
> No, in rust as long as you don't use a feature you don't need to know about it.
I don't think that's a particularly good argument, since it's true for all languages. Even if you don't use a feature, you will use and read code written by others all the time and understanding that code can be pretty important.
I agree with you. Spend enough time in an ecosystem and you'll eventually find a need to interact with most of its features.
My experience in Rust has been pretty positive. I'm writing a new book on systems programming with Rust and, as a result, have spent a great deal of time digging into the internals of libraries, the compiler. The compiler is, by far, the most surprising because it's allowed to use nightly features in new and interesting ways. Everything else, when I encounter something new to me, I'm able to understand from the Rust documentation. The key differentiator with C++ is, I think, the focus on documentation and ensuring that new features are explainable in a simplistic way. This helps make new features introduced into the language jive, to my eye.
That said, there are areas of the ecosystem _outside_ the language that are hard to keep up with. The future notion in Rust used to be like that, before Future was included in the base language. That's tricky but, again, I think Rust strikes a good balance here: conservative about content in the base language, enthusiastic experimentation in the ecosystem. It's possible that this'll break down some day but it hasn't yet and I don't see it as happening soon.
The difference is that with rusts safety you can to some degree "try thinks out". Which doesn't work with C++ as you might have hidden UB.
Also C++ has a bunch of "hidden" features and unexpected interactions with other features and UB like e.g. forward guarantee because of which `while(1);` is UB.
No, in rust as long as you don't use a feature you don't need to know about it.
> Or is there actually a really large variety of styles?
There are official(-ish?) style guidelines. So while there are a variety of styles most code uses mostly the same style.
> I'm personally of the opinion that less is more.
Sure, but you normally want to have a "complete well rounded language".
For this in rust you need GAT, but you don't need HKT, Functors, Monades or similar.
I hope there will never be a Monade trait in std, it would add a lot of mostly hardly useful complexity we really don't need and would mostly be used for IMHO mostly useless over abstraction.
But GAT are really needed. E.g. to properly work with certain async use cases (through for this you only need GAT for lifetimes, not arbitrary type. In my experience GAT limited to lifetimes cover 80+% of the cases where you really really need GAT).