Совершенно нормально повторно привязать неизменяемую переменную к изменяемой, например, следующий код работает:
let x = 5;
let mut x = x;
После последнего оператора мы можем изменить x
переменную. На самом деле, подумал, есть две переменные, первая перемещена в последнюю. То же самое можно сделать и с функцией:
fn f(mut x: i32) {
x += 1;
}
let y = 5;
f(y);
В Rust запрещено заменять неизменяемые ссылки на изменяемые. Это важное различие, потому что стоимость собственности всегда можно безопасно изменить по сравнению с заимствованной.