Immutability and referential transparency has many known benefits and ability for optimization. Several modern JavaScript libraries take advantage of this, and many more functional compile-to-JS languages.
This is based upon the Value Types proposal (Typed Objects / Explainer).
All these types provide value equality for both ==
and ===
.
Records are a new value type that represents the value type analogy of an immutable object.
const xy = # x: 1 y: 2 ; // frozen value typeconst xyz = # ...xy z: 3 ; // functional extension
ImmutableVector is a new value type that represents the value type analogy of an immutable array, without holes. It cannot be sparse.
const xy = # x y ; // frozen value typeconst xyz = # ...xy z ; // functional extension
ImmutableMap is an immutable version of Map. Any mutable operation returns a new ImmutableMap instead of mutating the existing reference.
const a = ;const b = a;a; // 2b; // 3
ImmutableSet is an immutable version of Set. Any mutable operation returns a new ImmutableSet instead of mutating the existing reference.
const a = ;const b = a;asize; // 2bsize; // 3
It is my intention to propose this as a Stage 0 proposal to ECMAScript 7.