Just wondering... Does anyone else feel that "syntax" around lifetimes and type bounds is becoming very unwieldy? I am referring to this PR: https://github.com/mozilla/rust/pull/11768. Is using dummy struct fields for specifying custom type bounds on the struct itself really the best we can do in a brand-new language?
At least for the lifetimes, Rust could extend existing syntax and allow specifying them on by-value returns objects, so that, for example, this: pub trait MutableVector<'a, T> { fn mut_iter(self) -> MutItems<'a, T>; ... } could be written as: pub trait MutableVector<'a, T> { fn mut_iter(self) -> 'a MutItems<T>; ... } This also makes the intent much more clear. Currently, one would have to dig into the definition of MutItems<'a,T> to figure out that the lifetime parameter 'a is used to create a dummy borrow field into the vector, so that the whole iterator is then treated as a mutable borrow. This feels very convoluted, if you ask me. On a slightly different note, is there a strong reason for having to name lifetime parameters explicitly? Could we simply re-use actual parameter names prefixed with ' as their lifetimes? The above could then be reduced to this: pub trait MutableVector<T> { fn mut_iter(self) -> 'self MutItems<T>; ... } This used to be valid syntax, btw, though it worked because 'self lifetime was special, IIRC. Note that I am not proposing to eliminate explicitly named lifetimes entirely,- there are still cases when they are needed. But as far as I've seen, those are few and far between. Thanks for reading, Vadim
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev