Immutability changes everything

Pat Helland

Når du kan endre og slette data som du vil, er det ditt problem å ta vare på gammel data hvis du skulle ønske det. Det finnes et hva av løsninger. Copy on write. Låsing. RCU. Message passing. Men alt dette er eksempler på at det i bunn og grunn er ditt problem. Det er også ditt problem å sørge for eierskap, og f.eks returnere kopier av objekters interne state slik at omverdenen ikke har anledning til å ødelegge staten din. Lykke til med cache-invalidering dersom du returnerer en intern datastruktur som du har cachet opp på andre vis, og noen utenifra kommer tli å endre på disse dataene.

Disse tingene løses kategorisk dersom du har immutable data. Du kan fritt returnere dataene til omverdenen uten å bekymre deg for at de plutslig endres av noen andre. Du trenger ikke å selv håndtere å ta vare på gammel data - når noen har en referanse til immutable data, kan de holde på den så lenge de vil.

En vanlig form for håndtering av state, er at man har pekere som oppdateres over tid. Når du leser ut en verdi fra en slik peker, får du nåværende immutable verdi tilbake. Senere vil du få en annen nyere immutable verdi tilbake. Dermed oppnår man det beste fra begge verdner. Både med og uten monads, avhengig av programmeringsspråk.

Det største kompromisset med immutability, er at objektorientering blir vanskelig å få til. Det finnes per idag ingen OO-systemer som gir like god immutability som f.eks funksjonell programmering i Scala eller Clojure. Spør du utviklere om OO eller FP er veien å gå, får du 2 ^ antall utviklere svar.