Immutability of participating data entities
The positive qualities of the approach of not using mutable program entities are well known:
- Given the right state upon construction the immutable cannot be invalidated it during its whole lifetime
- Immutable entities are easy to test
- They do not require cloning or copy constructors
- Immutable entities are automatically thread-safe
I must note that F# is not 100% strict about using immutable entities. As you may have already noticed, I used values, changing the state in my imperative and object-oriented solutions earlier. But the language requires the programmer to make an extra effort to introduce a changeable state (with the mutable
modifier to let
binding or via ref
cells, although F# 4.0 pretty much eliminates the need for the latter).
Also, the majority of data structures introduced by the language are also immutable, which means that a typical data transformation produces a new immutable instance of a data structure from the existing data structure. This consideration requires a certain caution from programmers when dealing with bulk in-memory instances, but as my experience has taught me, developers get used to this feature easily.