For the same reason we currently have to say `&mut i` in main() - to explicitly acknowledge that the callee may mutate i. By the same logic, this should be done everywhere.
On Wed, Dec 25, 2013 at 3:11 PM, Kevin Ballard <[email protected]> wrote: > On Dec 25, 2013, at 5:17 PM, Vadim <[email protected]> wrote: > > I agree that unexpected mutation is undesirable, but: > - requiring 'mut' is orthogonal to requiring '&' sigil, IMHO, > - as currently implemented, Rust does not always require mut when callee > mutates the argument, for example: > > fn main() { > let mut i: int = 0; > foo(&mut i); > println!("{}", i); > } > fn foo(i: &mut int) { > bar(i); // no mut! > } > fn bar(i: &mut int) { > *i = *i + 1; > } > > Note that invocation of bar() inside foo() does not forewarn reader by > requiring 'mut'. Wouldn't you rather see this?: > > fn main() { > let mut i: int = 0; > foo(mut i); > println!("{}", i); > } > fn foo(i: &mut int) { > bar(mut i); > } > fn bar(i: &mut int) { > i = i + 1; > } > > > What is the point of adding `mut` here? bar() does not need `mut` because > calling bar(i) does not auto-borrow i. It’s *already* a `&mut int`. > > -Kevin >
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
