(Varoitus, tämä on aika pitkälle erikoistuneeseen alaan liittyvä kirjoitus.) Selvittelen, mitä eri tahot ovat sanoneet muutoskalkyylista ("patch theory" tmv.), jotta minulla olisi eheä ja tarkka kuva siitä, mitä esim. Darcs-versiohallintaohjelmistossa oleva patch commutation oikeastaan tarkoittaa. Muutos on tietyssä tilanteessa ("kontekstissa") tehty vaikutus, jonka vuoksi tilanne muuttuu toiseksi.
Muutosten kommutointi tarkoittaa, että kaksi peräkkäistä muutosta <p, q> uudelleenjärjestellään siten, kuin q olisikin tapahtunut ennen p:tä. Muutosten sisältöä saattaa joutua fiksaamaan, jotta lopputulos olisi järkevä. Joka tapauksessa <q', p'> on tällainen käännetty pari, jos sen yhdistetty vaikutus on sama kuin <p, q>:lla ja lisäksi muutoksella q' on sama "merkitys" kuin q:lla, samoin p':llä p:n kanssa.
Minua kiusaa se, että missään ei tunnu olevan ketään, joka edes yrittäisi määritellä, milloin kahdella eri kontekstissa olevalla muutoksella on sama "merkitys". Se on oikeastaan määritelty perinteen kautta, muun muassa sen perusteella, minkälaiset muutokset CVS osaa yhdistellä ongelmitta. Muutoksen merkitys on myös kielellisesti määritelty: merkitys on sama, mikäli muutoksen kielellinen kuvaus on sama.
Kyseessä on siis pohjimmiltaan ihmisten intuitio siitä, millaisia "muutoksia" ylipäänsä on olemassa. Jos muutosta a kontekstissa x kutsutaan samoilla sanoilla kuin muutosta b kontekstissa y, ne ovat "merkitykseltään" sama muutos. Jos muutos c muuttaa kontekstin x kontekstiksi y, niin sitten muutosten <c, b> kommutoinnin pitäisi tuottaa <a, c'>.
Mutta muutosta voi kuvailla tosi monin eri tavoin. Sillä on melko vapaa teema-reemarakenne, eli mille tehdään ja mitä tehdään. Kummatkin näistä voi kuvailla haluamallaan abstraktiotasolla. Perinteinen versiohallinta vain sattuu keskittymään siihen, mihin kohtaan mitäkin tiedostoa lisätään millainen rivi tai mitä rivejä sieltä poistetaan. Riveihin viitataan rivinumeroilla.
Taustakirjallisuutta:
Ehkä pitäisi kirjoittaa muutosalgebrasta ja sen semantiikasta yleisemmällä tasolla.