Why do functions like read_line need to use a mutable output variable?

You can always just make it immutable afterward:

let mut s = String::new();
io::stdin().read_line(&mut s);
let s = s; // now immutable
1 Like