– Typiskt för Misra C var tidigare att vi satte upp totalförbud mot olika saker. Nu är vi mer tillåtande, under vissa villkor, säger Mark Pitchford på LDRA, vars nya kodgranskningsverktyg stöder Misra-C 2012.
Debatten kring goto – att flytta exekveringen till en annan kodrad – är en klassiker inom datavetenskapen. ”It seems that fanatical advocates of the New Programming are going overboard in their strict enforcement of morality and purity in programs” skrev Knuth 1975 om dem som önskade totalförbud för goto, efter att ha läst Dijkstras uppsats från 1968 ”Go to statement considered harmful”.
Nu 40 år senare blir Misra-C 2012 lite mer Knuth och lite mindre Dijkstra. Det hörs redan uppskattande rop från kodknegarnas cubicles. Kommittén har uppfattats som klåfingrig och mardrömseffekten av totalförbud sägs i vissa fall ha blivit att källkod skrivits om för att komma runt förbudet. Med ännu farligare kod som resultat.
Ett annat totalförbud som hävs är mot makron.
– Många utvecklare hatade det gamla makroförbudet, säger Mark Pitchford.
– Och det finns faktiskt omständigheter då makron är en elegant, bekväm och tekniskt sund lösning. De nya reglerna begränsar makron till att bara användas på bra sätt.
Det finns nu tre strikthetsnivåer på regler. Obligatoriska (mandatory) får inte brytas, rådgivande (advisory) får brytas, och förhandlingsbara (required) som får brytas, men bara med en motivering och i samråd med chefen.
Reglerna har också fått bättre dokumentation, inklusive motiveringar. Det gör dem enklare att acceptera.
– Kodregler kan bli mycket kontroversiella om utvecklaren inte ser poängen med dem, säger Paul Burden, PRQA.
Motiveringarna minskar också tolkningsproblem – det har funnits olikheter i regeltolkning även mellan olika verktygsmakare.
– Överhuvudtaget tar den nya standarden mer hänsyn till verktygen. Det är nu tydligare vad du som användare ska förvänta dig av ett verktyg, säger Mark Pitchford.
En ny kategorisering gäller lokala regler (single translation units) och systemregler. De förra är enklare – de kan kontrolleras med tillgång till en enstaka kodfil.
– Systemomspännande regler kräver mer jobb. Ibland är de oavgörbara, säger Paul Burden.
Utöver 142 regler – som kan avgöras av verktyg – finns nu dessutom 16 direktiv som kräver lite mer mänsklig intervention, för exempelvis dokumentation och kodkommentering.
Det är först nu i Misra-C 2012 som C99 stöds – med 13 års eftersläpning.
– C99 har tagit lång tid på sig att anammas, berättar Paul Burden.
År 2004, när förra Misra C släpptes, fanns det inga kompilatorer som stödde C99. De flesta stöder fortfarande inte hela C99.
Någon nästkommande version av Misra C är ännu inte påbörjad.
– Men nu finns i och för sig C11 och en ny C-standard är typiskt en sådan sak som skulle kunna sparka igång processen att förnya standarden igen, säger Mark Pitchford.
Misra-C föddes i ett brittisk säkerhetsprojekt i bilbranschen på 90-talet och är idag den största standarden för defensiv programmering i språket C.
– Det finns gott om kompilatorer som stöder Misra C. Det är ett bra mått på framgången. Plus flera dedicerade verktyg för statisk analys, som det vi har, säger Paul Burden.
Både LDRA och PRQA sitter i kommittéerna som definierar standarden.