> Rust has only become more uniform and contains less special cases than just a couple of years ago.
How so? Aren't await and ? both new special cases?
Re:I can't keep up with idiomatic Rust
by steveklabnik on Thursday April 09, 2020 @10:24AM
(#22822800)
They are new features, so in some sense, they're "special cases", but even then, okay, so that's adding two special cases. Rust is still removing special cases all the time.
Take the Rust 1.42 release, for example. Way back in Rust 1.31, we removed the need for you to write `extern crate`. But when you were writing a procedural macro, you still had to write "extern crate proc_macro;". With Rust 1.42, you no longer have to, and it just works, like everything else. This removed a special case.
Rust has been doing a lot of the "this was special cased to ship, now we are making it more general like we always planned" lately.
What the GP means there is that when the list of new "features" comes out with each Rust release, if we discard the features that are just new stdlib APIs (~75% of the total count for an average release), most of the remaining "features" are just tweaks to existing language features that remove edge cases, e.g. non-lexical lifetimes.
As for your second question, async/await is absolutely the biggest thing added since 1.0 (and is an outlier in new features in that regard); the ? operator is just an improved version of the try! macro that shipped with 1.0.
The way I see it NLL added a huge number of edge cases. Pre-NLL it was clear what kind of lifetimes were possible; now I have no clue what the different lifetimes are and every keyword interacts with lifetimes in a different way.
Pre-NLL made the language incredibly clunky to use, with a lot of code acrobatics required to do something you know should work logically according to ownership but the scope lifetime rules wouldn't allow.
I don't disagree. But IMO a lot of clarity and comprehensibility has been sacrificed in the current implementation. I'd rather have seen a style that de-emphasised control flow keywords and made it easier to use closures, or simply blocks, to express the behaviour that people wanted. I've yet to see a case where what was really needed was NLL rather than better support for lexical lifetimes.
Re:I can't keep up with idiomatic Rust
by umanwizard on Thursday April 09, 2020 @08:42AM
(#22821960)
I don’t know any other “systems” language whose language definition changes every six weeks. When you say Rust changes slowly, what are you comparing it to?
Frequency of change and rate of change are very different. C++ (now) changes at about the same rate but in larger, less frequenct increments.
Re:I can't keep up with idiomatic Rust
by Ar-Curunir on Thursday April 09, 2020 @10:42AM
(#22822972)
Do you think C and C++ didn’t change in their first five years?
The rate of adding features is quite slow, as demonstrated elsewhere in this thread. Important features spend a long time baking, and a long time in testing before they are piecewise stabilized.
> When a new version of Rust is released, the core Rust devs write a blog post gleefully explaining all the new "features" the current version has.
Of course when someone talks about a CHANGELOG, they'll talk (rather happily) about the things that have changed/improved.