A changeable pattern and implementation is presented in which types (used
in programming environments and virtual machines) may be mutable as
controlled by a programmer, and share many of the benefits of value
types, without the drawbacks of value types. The changeable pattern
provides flexibility for restricting the modifiability of the resultant
uses of the values, as well as providing a means for providing
notifications upon changes. In one implementation, a single set of
changeable types is provided that derive from a common Changeable base
class, and any type for which mutability is desired may derive from the
Changeable class. Properties associated with the changeable define state
that determines cloning and/or changeability characteristics on
subsequent uses of the type. True mutability is provided via a status
property of next use being set to a changeable reference state such that
subsequent uses of the type do not cause a state change.