Why compiler disallow "late" binding ? I think the compiler should know there is a reference to 3 and does not drop it until the end of b. And I know A and B have different semantics, A is in fact a binding and B is in fact an assign. But if we allow B , we will be more flexible.
fn main () {
// case A
let a = &mut 1;
*a = 2; // works
// case B
let b;
b = &mut 3;
*b = 2; // not works
}