const, in Rust, is short for constant and is related to compile-time evaluation. It shows up:
- when declaring constants:
const FOO: usize = 3; - when declaring compile-time evaluable functions:
const fn foo() -> &'static str
These kinds of values can be used as generic parameters: [u8; FOO]. For now this is limited to array size, but there is talk, plans, and hope to extend it further in the future.
By contrast, a let binding is about a run-time computed value.
Note that despite mut being used because the concept of mutability is well-known, Rust actually lies here. &T and &mut T are about aliasing, not mutability:
&T: shared reference&mut T: unique reference
Most notably, some types feature interior mutability and can be mutated via &T (shared references): Cell, RefCell, Mutex, etc.
Note: there is an alternative use of mut and const with raw pointers (*mut T and *const T) which is not discussed here.