State is Mutable if it can be changed by actions. Compare ImmutableState?
cannot be changed by any actions, and you can correctly assume it will remain the same. ImmutableState?
is necessarily ReadOnly?
state cannot be changed by your
actions. However, you cannot assume that ReadOnly?
state is ImmutableState?
because state that is ReadOnly?
to you might still be changed by someone else.
Also note that StateIsNotValue?
. State is physical. Values are not physical, and cannot be physically manipulated. A given state may represent
a value -- this requires a means of interpreting said state and giving it higher semantic meaning. (In most computing languages, the value is implicit in the representation. On CPUs, the value is implicit in its use. One means of interpreting state is called a 'codec', allowing representation to be cleanly separated from value.) Changing MutableState
can make it represent a different value, or can make it represent the same value in a different way.
The act of changing mutable state to contain a particular value is generally called 'writing' to it. Similarly, the act of comprehending a value from a state via a known representation is generally called 'reading' from it. It's important to understand that it is the values that are written and read, not the underlying representations -- it is normal for values to go through representational transformations in this process. However, reading and writing are both physical processes and must be performed by physical things, so while the value is read or written, it continues to only ever be referenced by a physical representation.
by some. Its use is not particularly dangerous when there is only one reader and writer, but in non-trivial computational systems, where more than one exists, assumptions made for convenient computation may be violated. The two main solutions for this are synchronization (through either mutual exclusion or tracking transactions) or through avoidance of MutableState
(by only ever writing to new spaces, and freeing space when it is provable that nobody needs it). The latter is the approach chosen by FunctionalLanguage
s. This advantages these languages considerably in avoidance of unnecessary synchronization. However, such languages are incomplete because they cannot describe even their own computation because they cannot describe communication -- reading, writing, and value representation. (They may, however, describe a description of computation or communications.)
Computation, itself, requires MutableState
because computation is the process of calculation (performing transformations over values) as carried out in a physical world -- values need representations, and physical transformations must occur over state in order to properly reflect the useful transformations over the values that said state represents. Thus, at the very least, physical or wave-form states must be mutated within the processing unit.
While it is impossible to entirely KillMutableState
, it is possible to divorce the programmer from it or to discourage its use and make such far more explicit, reducing the need for synchronization. It is proposed that the next KillerOperatingSystem
be as Functional as possible.