Informatisk julekalender: Lille Julaften


torsdag 23. desember 2010 Julekalender C

thompson_ritchie

Jeg har funnet frem et par skikkelige skjegg-nisser til å representere lille julaften. Siden utviklingen av de aller første datamaskinene er det er få, om i det hele tatt noen, som har hatt så stor påvirkning på utviklingen av programmeringsindustrien som det Ken Thompson og Dennis MacAlistair Ritchie hadde gjennom sitt arbeide med operativsystemet Unix og programmeringsspråket C på 70-tallet.

På 60-tallet jobbet Ken og Dennis sammen med å utvikle operativsystemet Multics, og samtidig utviklet Ken et programmeringsspråk han kalte Bon. Da Bell Labs trakk seg ut av dette prosjektet i 1969 brukte duoen erfaringen sin til å utvikle et nytt operativsystem som fikk navnet UNIX. Thompson bestemte også at OS’et behøvde sitt eget språk, og designet programmeringsspråket B, forløperen til C, som ble utviklet av Dennis. C er som de fleste vet fortsatt mye brukt i dag, og har influert de fleste, moderne programmeringsspråk. Unix har også vært betydningsfullt, og i tillegg til å direkte føre til utviklingen av Linux etablert det konsepter og prinsipper som nå er standard innen utvikling av operativsystemer.

Ken Thompson er også kjent for å ha utviklet UTF-8 encodingen, jobbet mye med både hardware og software for sjakk, og for å ha poularisert regulære uttrykk gjennom flittig bruk i ulike verktøy på Unix som editoren ed og tekstprosesseringsverktøyet grep. Av Kens nyere prestasjoner bør jeg også nevne at han er en av designerne bak Google’s programmeringsspråk Go.

Ken har mange litt spesielle holdninger til programmering, og det er inspirerende å høre på hva han har å si. Han er ekstremt produktiv, og har blant annet sagt:

“You can't trust code that you did not totally create yourself.”

Som et eksempel på litt C-kode har jeg plukket ut implementasjonen av GCD, Greatest Common Devisor, fra kildekoden til Linux. Er du interessert finner du all koden på github.

 1 #include <linux/kernel.h>
 2 #include <linux/gcd.h>
 3 #include <linux/module.h>
 4 
 5 /* Greatest common divisor */
 6 unsigned long gcd(unsigned long a, unsigned long b)
 7 {
 8   unsigned long r;
 9 
10   if (a < b)
11     swap(a, b);
12   while ((r = a % b) != 0) {
13     a = b;
14     b = r;
15   }
16   return b;
17 }
18 EXPORT_SYMBOL_GPL(gcd);

C har fått mye pepper, og beskyldes for å ha ødelagt mye for utviklingen og bruken av høyerenivå-språk. Dennis sier det selv på denne måten: "C is quirky, flawed, and an enormous success."


comments powered by Disqus