What do you think let and const do? I think that’s where the disconnect is.
Here’s (as I understand it) what they mean to Rust:
const NAME: declare a compile-time constant. This is a value that isn’t going to be different between builds; think const PI: f32 = 3.1415926535;. Typically used for module level constants, though usable within function contexts–though note that it still means the same thing, thus keeping the all-caps naming convention. The binding does not exist at runtime; it is inlined to its use sites.
let name: create a local binding. This is a value that is determined at runtime, and can differ between invocations of the function it is in based on the values of the right side of the assignment. For the most part, this should be your go-to default binding mode when writing functions.
let mut name: create a mutable local binding. This is equivalent to how let works except you are allowed to reassign the binding and to take mutable references to it.
In JavaScript it’s const or let for immutable or mutable bindings. In Java 10 it’s final var or var. In Rust, it’s let or let mut.
const is a different model, that the compiler has to know the single value of at compile time, and doesn’t exist at runtime, because it’s been inlined. In fact, rustc/LLVM will even do the same thing for let bindings and even more complicated expressions if it can fold it down to a constant expression.
There is no need to add final/readonly – let without mut already is that.
One last time: let and const are completely different tools in Rust. const in Rust is closest to static final in Java or constexpr in C++. let in Rust is final var in Java or const in JavaScript. Rust’s const is for constants in the mathematical sense: things that have always been and will always be the same.