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.

Våre anbefalinger

Simple Made Easy
Anbefalt av August

Rich Hickey, oppfinneren av Clojure og Datomic, snakker om forskjellene på «Simple» og «Easy». Det er stor forskjell på «vanskelig», som er subjektivt (Russisk er vanskelig fordi du ikke kan det), og «simpelt», som er objektivt (spagetti-kode er vanskelig å lese fordi det er sammenvevd). Denne presentasjonen har allerede rukket å bli rene Woodstock-legenden, og forklarer godt hovedpoengene med Clojure uten en eneste linje kode.

Våre foredrag

Hva er immutability? Hva er hensikten? Kan man benytte seg av det i JavaScript? Hvordan? Hvilke konsekvenser har immutability for UI-programmering? Dette foredraget gir deg svar på disse spørsmålene, med mer til.

When it comes to functional programming techniques seeing widespread adoption in the JavaScript community, immutability is a strong contender for «next in line». In this talk I’ll show you what immutability is all about, why it’s useful, and how to work with it. We’ll even put immutability to work in a React app and observe how we can reduce complexity while increasing performance.

I de fleste domener har gammel data høy verdi. Det bør ikke være ditt ansvar å løse dette manuelt med tradisjonelle muterbare databaser. Få en introduksjon til ny grensesprengende database-teknologi som løser dette problemet for deg.

Introduksjon til hvordan i alle dager en immutable database kan funke, og hvorfor det er bra greier.

Våre blogginnlegg

Referentially Transparent CRUD

Artikkel om hvordan Datomic lar deg implementere tradisjonell CRUD med referentially transparent funksjonell kode.

Immutability in React

Artikkelen bygger videre på artikkelen om immutability i JavaScript, og viser immutable data i sving i en React-applikasjon.

Immutability in JavaScript

Introduksjon til immutability, og hvordan jobbe med immutable data i JavaScript