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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…