In Rust, a “value” is a concrete sequence of bytes with an associated type. (The corresponding term in C/C++ is “rvalue”.) A “place” is some memory location that can hold a value. (The corresponding term in C/C++ is “lvalue”.) An “assignment expression” in Rust moves a value into a specified place.
Some places, but not all, are tracked by Rust’s borrow checker. These are called “move paths”. Examples of move paths are variables, i.e. named places on the stack. But there exist other move paths, notably elements of structs. For example, it is possible to have an initialized variable pair of type (String, String) and move out of pair.0. The borrow checker will be aware that the move path pair.0 is now uninitialized, while pair.1 is still initialized. This tracking does not occur for elements of arrays or other collections.
The Rust borrow checker tracks the lifetimes of things as they are moved between move paths. It is common to say that what is moved are values, but the things that the borrow checker tracks are not values: mutating a thing does not change its identity for the borrow checker.
Is there a specific term in Rust parlance for “the thing that can be moved but also mutated”? In the context of other programming languages I’d call such things “instances” or “objects”, but these terms do not seem to be used in Rust. (For example the term “object” is typically used in the context of dyn.)
If there is no term, is it because this way of thinking is not considered useful? I admit that I might be splitting hairs here, but I find that being able to clearly name concepts helps with understanding, and not being able to name concepts might betray a lack of understanding.