På IDG skiver Lars Danielsson idag om vår lansering av Visual Studio 2010 i Stockholm, som skedde i måndags. I artikeln, på ett lite roligt sätt, antyder han att det inte var alla som direkt förstod min liknelse om målarburkar i förhållande till F#.

Så låt mig få förklara den lite tydligare:

C# och VB.NET, bland andra språk, är mutable, vilket innebär att man kan skriva:

varibel++

Detta gör att innehållet i variabeln förändras.

Detta kan man inte göra med exempelvis F#. Där är en variabel eller "value" som man valt att kalla det för att särskilja det ifrån det tidigare immutable. (Det är på samma sätt som strängar också fungerar i C# och VB.NET.)

Min liknelse om målarburken

Två målare skall måla en vägg. De delar på samma målarburk. Burken innehåller vit färg. Efter ett tag skall den ena målaren måla på en annan yta och med en nyans av rosa i det vita. För att göra detta tar han och blandar i rosa färg i målarburken som innehöll den vita färgen.

Genom att göra detta gör han målburken mutable. Innehållet i målarburkan har helt enkelt förändrats.

Problemet är att den andra målaren vet inte om det. Han doppar sin pensel i den målarburken som tidigare endast innehöll vit färg, men nu alltså har förändrats.

Om den första målaren istället skulle ha blandat färg utifrån ett immutable sätt så skulle han ha tagit en ny målarburk och blandat i vit målarfärg ifrån den första burken och rosa målarfärg i den nya burken. Då är den ursprungliga målarburkens färg oförändrat och det gör också att den andra målaren kan fortsätta att använda den för att måla vit med.

Trådar

Om man i förlängningen låtsas att målarna är två trådar i ett program kan man se här att variabler, där innehållet förändras, kan vara förödande för ett programs exekvering. Genom variabler som olika trådar använder, får man ett implicit beroende som ibland kan vara svårt att hålla ordning på.