No, I think you misunderstand John’s post here. John is referring to not needing the exclusive ownership access if we just special case MutableSpan (and Inout).
As someone trying to come up to speed with exclusive ownership, the fact that the language would admit something like
inout Inout<Borrow<T>>makes me anxious. It seems to add so many dimensions to the ownership space that I will never feel confident that I have chosen the right mix of modifiers and wrapper types.
I agree this is confusing. The nice thing about the reborrowing approach discussed in the exclusive ownership proposal that you mentioned is that the most natural spelling is just always consuming Inout<T> (which was also suggested in Difficulty using MutableSpan ) (a great article on what that really is in Rust is here: haibane_tenshi's blog - Obscure Rust: reborrowing is a half-baked feature note &mut u32 is just Inout<UInt32>). Personally speaking, if we had reborrowing support for Inout and MutableSpan, passing these as consuming would become commonplace and could potentially (big if) become the default specifier if you didn’t supply one. E.g.
func foo(with x: Inout<Int>) { // consuming Inout<Int>
x.value += 1 // ok
}