Historically, concerns about aliasing and confinement in object-oriented languages arose from the
viewpoint: spaghetti-data resulted in programs too delicate to modify or “… we could prove
if only we knew that
is not aliased”. By and large, these issues arose in the context of sequential systems. Nowadays, exploiting multi-core architectures generally requires concurrent programming. The issues above become magnified: in software engineering terms updates to aliased objects can now lead to unpredictable data races rather than resulting in hard-to-modify but deterministic code. Program reasoning also became harder as there are more ways to break encapsulation. For example ‘
’ and ‘
’ are no longer equivalent.