See this Reddit thread: http://www.reddit.com/r/rust/comments/2tq33x/ref_keyword/
let a = &y; let b = &mut y; let mut c = &y; let mut d = &mut y;
Are semantically equivalent to:
let ref a = y; let ref mut b = y; // let mut ref c = y; // Not valid // let mut ref mut d = y; // Not valid
In all cases, the first examples should be preferred. To put another way, use of
ref should be reserved for pattern matching. (Alternatively, as per this RFC removing
ref would do the trick).