As someone who maintains a 145k line Rust codebase all on his own, I have to hard disagree on this one.
Once you get used to the syntax it just blends into the background and becomes a non-issue.
> This adds a mental load which is -- as clearly visible from above -- is totally unnecessary.
Totally unnecessary? Okay, so how would you do the following with the sigilless syntax (and disambiguate between them):
- Specify a unique reference? (`&T` is shared, `&mut T` is unique)
- Specify a lifetime? (`&'a T` is a reference to T with lifetime `a`)
- Specify a raw pointer? (`*const T` and `*mut T` are const/non-const raw pointers)
- Specify that the argument is moved into the function? (just the raw type `T`)
People have been trying to come up with a better syntax for Rust, and AFAIK so far nobody has been able to do it. There's always a tradeoff somewhere that ends up making matters worse than what we have now.