(Disclaimer: regular readers probably know what my take is on what follows, and I probably know where we disagree too. I just want to summarize my views to OP – regard everything below as #[cfg(member_status = "new")]
)
I agree with OP in that “complicating the syntax” is a problem, but, as others mentioned it too, it’s probably the smallest one. That said, some discussions in recent proposals for features for which the syntax would require throwing away bounded lookahead parsing make me cringe a bit, along with pulling out specific existing subsets of the language with new syntax a la try fn
.
As far as I can tell, however, most unwanted complexity in Rust feature proposals comes from semantics, or at least it’s an interaction between syntax, semantics, and possibly in either case, breaking existing patterns or symmetries, or adding so-called surface area (ie. “things to learn”) which is disproportionately large compared to the advantages it brings or how common it is.
A common problem I can observe is proposals that go straight against Rust’s original, fundamental ideas. Overloading the =
operator was a recent one I recall, but in the past we’ve had requests for C++ style move constructors, stdlib APIs which are unsound but not unsafe
, OO-style inheritance, and many others.
There’s another tendency whereby a narrow set of newcomers try to bend the language so it matches their expectations about other languages they have previously used, instead of learning the goals and idioms of Rust, which creates a similar kind of tension. A less serious variant thereof is people understanding and knowing how Rust is different from e.g. traditional OO or pure functional languages, but still trying to add their favorite pet features, which accumulate over time.
Tangential with regards to C++: I do think it’s a valid fear, because Rust recently kept picking up features quicker than C++ as far as I can tell, and I think this rate is going to lead to unsustainable growth. Yes, C++ has a 40-year-old baggage of backward compatibility. But it also started on top of a very small and consistent language (C wasn’t always as quirky and messy as it eventually became trying to support all the exotic, niche platforms of the 70s and 80s). And conversely, Rust also cares a lot about backwards compatibility. So I don’t think that we can just dismiss the issue with hubris and say “but we know better than those lowly C++ guys” – the issue is real.
In any case, I don’t think discussions of this problem are (or should be considered) irrelevant or off-topic, however it also gets brought up every once in a while (not nearly as often as feature requests, though).