Comal: Det danske programmeringssprog, som udfordrede Basic

En drengs tidlige computer-fascination, en seminarielærer i Tønder, selvlærte kodeinteresserede elever samt en sjat øl er ingredienserne til et dansk programmeringssprog, som især dominerede i 1970'erne og 1980'erne.

I februar 2020 er det 45 år siden, at det danskudviklede programmeringssprog Comal blev frigivet på hulstrimler og lagde grunden for et programmeringssprog, som gennem 1970'erne og 1980'erne var utroligt populært - ikke kun i Danmark, men også i mange europæiske lande og USA.

En del af nøglepersonerne bag sproget er gået bort, men en af de centrale personer er ganske nulevende.

Mogens Kjær stod bag Comal-fortolkere til Commodore, DOS, OS/2 og Unix. Version2 har talt med den nu 59-årige programmør, der ikke har en formel it-uddannelse, men som selvlært udvikler fik afgørende indflydelse på Comal-sprogets udbredelse.

Interessen for it, eller EDB, som det hed i 1970'erne, startede tidligt for Mogens Kjær.

»Jeg interesserede mig meget for computere, da min far var it-chef hos Haldor Topsøe, hvor de havde en Gier-computer fra Regnecentralen,« siger Mogens Kjær, der i dag er pensioneret, men stadig er aktiv i Dansk Datahistorisk Forening

Foreningen huser blandt andet en Gier-maskine, som Mogens stiftede bekendtskab med via sin fars arbejde.

Det var allerede som en niårig purk, at Mogens Kjær blev indfanget af computernes verden. Som han selv beskriver det på sit website:

»Den 14. juni 1969, da jeg var 9 år gammel, inviterede min far hele familien til Københavns Forum. Der havde Haldor Topsøe en udstilling. Min far var it-chef hos Topsøe, og virksomheden var begyndt at anvende computere allerede i 1958.«

»Jeg kan ikke huske, hvad temaet for udstillingen var, men på deres stand havde de en terminal, der var forbundet med en mainframe via en telefonlinje. Terminalen kørte APL\360. Jeg var kun 9 år, men jeg var øjeblikkeligt opslugt af computeren. Jeg kan huske at mine forældre havde svært ved at få mig hjem igen.«

Den lille dreng begyndte at læse APL-manualerne APL\360 User's Manual og APL\360 Primer, ligesom han senere begyndte at anvende Haldor Topsøes Gier-maskine.

Sov på ungdomsskolen

»Det var min første introduktion til computere, og jeg har været interesseret i dem lige siden.«

Interessen tog til, og i tiden omkring 7.-8. klasse begyndte Mogens Kjær at gå på ungdomsskole i Lyngby-Taarbæk Kommune. Der havde de en RC7000-computer fra Regnecentralen, som han begyndte at programmere i Basic på.

»Jeg tilbragte meget tid på ungdomsskolen. Jeg var tit derude om natten og i weekenden,« mindes Mogens Kjær.

Omtrent på samme tid, som Mogens Kjær begyndte at tilbringe mange af døgnets timer på ungdomsskolen i Lyngby-Taarbæk, skete der noget langt fra Nordsjælland, nærmere bestemt på Tønder Seminarium, som ville få afgørende betydning for Mogens Kjærs liv.

Lærerseminariet i Tønder fik en Data General Nova 1200, hvilket åbnede mulighed for, at de kommende lærere kunne undervises i datalære. En af seminarieunderviserne var den ene af Comals to ophavsmænd, Børge Christensen. Hans fag var matematik, men ville gerne undervise i det nye datalære.

Den nu afdøde Børge Christensen fortalte følgende i et foredrag om Comals baggrund:

»Jeg havde for lang tid siden taget et datalogi-kursus på universitetet, det var kun et tre-ugers kursus, men det vidste de ikke.«

»Selv rengøringen klagede over bugs«

Børge Christensen lagde aldrig skjul på, at han ikke kunne fordrage Basic, en foragt, som måske blev grundlagt med hans første møde med den Extended Basic, som fulgte med Nova 1200-computeren.

»En af de første ting, vi bemærkede, var, at den var så fyldt med bugs, at selv rengøringen klagede over det,« spøgte Børge Christensen i sit foredrag.

Men Børge kunne virkelig ikke lide Basic og fandt det besværligt at rette de lærerstuderendes opgaver, da han ofte ikke kunne forstå de studerendes Basic-programmer.

»Det var svært at se, hvad der foregik i 20 eller 30 linjers programmer. Jeg blev nødt til at tegne diagrammer for at forstå, hvad de havde gjort,« fortalte Børge Christensen.

Hans instinktive modvilje mod Basic blev styrket, da han mødte datalogen Benedict Løfstedt.

»Det er ikke din fejl, det er ikke elevernes fejl, det er sproget, som I anvender. Det er ikke et computersprog. Det er en fornærmelse af den menneskelige intelligens,« sagde Benedict Løfstedt og anbefalede Børge Christensen at læse Niklas Wirths Systematic Programming om programmeringssproget Pascal.

Navnet Comal Børge havde arbejdet med Algol (ALGOrithmic Language), og det slog ham, at Common Algol (Comal) ville være et godt navn. Comal skrives også COMAL, men Version2 undgår så vidt muligt versaler.

Børge Christensen elskede Pascal, men mente, at det var for avanceret for hans studerende. Der var én god ting ved Basic efter Børges mening, og det var den interaktive mulighed for hurtigt at skrive et program uden at skulle starte en editor.

Han begyndte at korrespondere med Benedict Løfstedt om, hvordan de kunne forene det bedste fra Pascal og Basic.

I begyndelsen af 1974 havde Børge og Benedict den første definition af, hvad der senere ville blive kendt som Comal75, men Børge vidste, at der var lang vej til et velfungerende programmeringssprog.

»Det er en ting at definere et programmeringssprog, men noget helt andet at implementere det,« erkendte Børge, der selv programmerede i maskinkode på Nova 1200-maskinen, ligesom nogle af hans bedste elever var begyndt at dykke ned i maskinarkitekturen.

BDD – Beer Driven Development

To af dem blev blev rigtigt gode, dygtigere end Børge.

»I løbet af et par uger blev de langt bedre til det, end jeg nogensinde var.«

De to studerende begyndte at implementere det nye sprog, som Børge Christensen og Benedict Løfstedt havde defineret. I løbet af et halvt år lykkedes det at få implementeret en første version af sproget i et tæt samarbejde med Børge Christensen, men det var ikke uden problemer:

»Jeg havde et problem med den ene af dem. Han drak meget. Han forsvandt nogle gange, og selvom vi vidste, hvor han var, så var det kun, når han havde fået nok at drikke, at vi kunne hente ham. Han ville ikke komme tilbage til arbejdet, inden han havde fået nok. På det tidspunkt ville han være meget fuld, dansk øl kan være meget stærk, men vi havde brug for ham, da han var vores ekspert i debugging. Vi hældte kaffe i ham og puttede ham i et koldt brusebad. Så kunne han arbejde 24 timer. Det var fantastisk,« har Børge Christensen fortalt om den utraditionelle udviklingsmetode Beer Driven Development (BDD), som den ene studerende praktiserede.

Trods BDD kørte den første version af Comal den 5. august 1974, og i februar 1975 var den klar til udsendelse på hulstrimler.

Nova-computerne var udbredte på de danske uddannelsesinstitutioner, så versionen blev hurtigt spredt ud i det danske land. Med lange variabelnavne, IF...THEN...ELSE-strukturen samt navngivne subrutiner begyndte Comal at erstatte Basic, der ikke havde den slags avancerede sprogkonstruktioner.

Inkonsistent Comal80

Comal dukkede også op på Lyngby-Taarbæk Ungdomsskole, erindrer Mogens Kjær.

»Efter nogle år begyndte der at dukke hulstrimler op med Comal på,« siger Mogens Kjær, der i modsætning til Børge Christensen ikke havde noget imod Basic:

»Jeg er ikke så religiøs, når det gælder programmeringssprog,« - men han kastede sig over det nye sprog:

»På et eller andet tidspunkt kom min lærer med et udkast til en ny version af Comal, Comal80. Det kiggede jeg på, og jeg syntes, der var en hel masse ting, der var inkonsistente og ikke passede sammen,« siger Mogens Kjær.

Derfor skrev han et brev til Børge Christensen i Tønder og gjorde ham opmærksom på det inkonsistente i specifikationen.

På det tidspunkt gik Mogens Kjær i gymnasiet og måske ville en anden sprogdesigner havde følt sig trådt over tæerne af at få kritik af en ung gymnasieelev, men ikke Børge Christensen.

»Da jeg så brevet, vidste jeg, at han kunne gøre noget ved det. Det var den mest kvalificerede kritik, jeg nogensinde har fået. Jeg fulgte hans anbefalinger,« har Børge Christensen sagt om brevet fra Mogens Kjær.

Det førte til mange og lange telefonsamtaler mellem Tønder og Lyngby.

»Børge er nok det menneske, jeg har ringet til oftest,« siger Mogens Kjær i dag.

Comal til Commodore

Børge Christensen var meget interesseret i at få Mogens Kjær med på Comal-holdet. Selve implementeringen af Comal80 var allerede i gang, men via Børge Christensen kom Mogens Kjær i kontakt med importøren af Commodore-maskiner i Danmark.

Det var firmaet Instrutek baseret i Horsens med direktøren Erling Nielsen.

»Der var ikke noget, der hed Commodore Danmark dengang. Instrutek importerede 8032 og 6502-baserede BASIC-maskiner. De var interesserede i at komme ind på skolemarkedet, og hvis man skulle det, krævede det, at maskinerne kunne køre Comal,« siger Mogens Kjær.

Det var omkring 1980, og på det tidspunkt var Mogens Kjær startet på universitetet. Ikke med at læse datalogi, men biokemi.

Børge Christensen var meget interesseret i at få Comal i en Commodore-version, da han kunne se, at mikrocomputerne var begyndt at vinde frem, hvilket truede med at bringe Basic tilbage til uddannelsesinstitutionerne.

»Det skræmte mig så meget, at hvis jeg skulle undervise i BASIC igen, så ville jeg ikke undervise i datalære mere,« har Børge Christensen sagt.

Den første Comal80 blev implementeret på en Z80-baseret computer, Zilog 80 i 1980, og nu havde Børge Christensen øje på Commodore.

Børge foreslog derfor Mogens Kjær at implementere Comal80 til Commodore.

Der blev arrangeret et møde med Commodores udviklingsafdeling i Schweiz, og Børge Christensen sørgede for, at Erling Nielsen fra Instrutek inden mødet havde understreget behovet for en Comal for at trænge ind på uddannelsesområdet.

»Børge var god til den slags. Han sagde til firma A, at firma B allerede var i gang med Comal, og det samme til firma B,« siger Mogens Kjær, der sammen med Børge Christensen rejste til Commodores udviklingsafdeling i Basel.

»Det var første gang, jeg mødte Børge,« siger Mogens Kjær.

Det endte med, at Mogens Kjær fik en kontrakt på at udvikle Comal til Commodore PET 8032.

»Jeg kan ikke huske beløbet, og om kontrakten var med Commodore i Schweiz eller London, men jeg mener, at beløbet svarede til omkring 70.000 kroner. De kiggede lidt i banken, da der kom en ung knøs med en check på et så stort beløb i schweizerfranc eller pund. Det var mange penge dengang,« siger Mogens Kjær.

»Jeg flikkede noget sammen«

Mogens boede i Lyngby nord for København, og Instrutek var baseret i Horsens, så det gjorde det lidt bøvlet med afstanden i en tid, hvor internetopkoblinger var sjældne.

»Der var en gut fra Instrutek, der var begyndt at læse på DTU, og han boede på et kollegium i nærheden af mig. Det var Jens Erik Jensen, og han kendte til Commodore, så jeg fik en maskine at arbejde på, så jeg kunne lave en Comal til den,« siger Mogens Kjær.

Han havde programmeringserfaring med sprog som Basic, Comal, Fortran og Algol, men nu fik han ansvaret for at lave en Comal80-fortolker til en populær mikrocomputer.

Du havde kodet i Basic og Comal - hvordan gik du i gang med at skrive en fortolker i maskinkode?

»Jeg ved det faktisk ikke. Jeg må have tænkt, at det må virke på den og den måde, og så flikkede jeg noget sammen. Der kom så flere folk ind over, og de kom så med input: 'Det der kan laves anderledes',« siger Mogens Kjær.

Du havde ikke nogen teoretisk baggrund indenfor fortolker-teknologi?

»Nej, slet ikke. Jeg tror, Jens Erik fandt en bog, hvor der stod nogle tricks i, men det var ikke en detaljeret beskrivelse af, at sådan gør man. Dengang var tingene måske ikke så avancerede, så der har måske ikke været så mange forskellige måder at gøre tingene på andet end den rigtige, når man fik kigget lidt på det. Det er begrænset, hvad man kan lave med tabelopslag, stakke og den slags,« siger Mogens Kjær .

Han fik skrevet en Comal-version, der kunne indlæses fra diskette.

»Jeg startede med at lave en softloaded Comal, der kunne læses ind fra diskette, men det betød selvfølgelig, at man brugte en masse af de 32 KB, der var i maskinen til fortolkeren, så der var ikke meget tilbage til et program,« siger Mogens Kjær.

For at få mere plads til Comal-programmerne begyndte Mogens Kjær og Jens Erik Jensen at se på, hvordan fortolkeren kunne lægges ind i ROM.

Commodore 64 med Comal-kapsel

»Det var et ekstra board, som man satte ind i Commodoren. Jens Erik havde kontakt til en gut, Helge Lassen, der boede i Sønderjylland. Han kunne designe sådan nogle boards og de trykte kredsløb, der skulle anvendes til at sætte komponenter på,« siger Mogens Kjær.

»Helge havde nattevagter i Forsvaret, hvor han havde god tid til at lave de ting,« siger Mogens Kjær.

Selve fremstillingen af boards blev foretaget af nogle Horsens-baserede firmaer.

»Det var centreret omkring Horsens, da Jens Erik kendte en del der,« siger Mogens Kjær.

Derefter begyndte Commodore 64 at komme til Danmark.

»Vi fik en af de allerførste modeller og skulle i gang med at udvikle en Comal-kapsel, der kunne sættes i ligesom en spil-kapsel. Så kørte Commodoren Comal, og det var også en vældig succes.«

IBM vil have Comal

I mellemtiden var IBM også blevet interesseret i Comal-sproget.

»IBM ville gerne ind på skolemarkedet med deres nye pc, så der fik vi et job om at lave en Comal til den. Den hed IBM Comal, men vi beholdt rettighederne til at bruge versionen til andre formål. Vi besluttede på det tidspunkt at starte et decideret firma, UniComal.«

Sammen med Jens Erik Jensen, Lars Laursen og Palle Pedersen etablerede Mogens Kjær firmaet Unicomal omkring 1982.

Da IBM lancerer PS/2 i 1987, får Unicomal også opgaven med at udvikle en Comal-version, der kan køre under OS/2.

»Jeg var i Montreux med Jens Erik Jensen på kursus om, hvordan basale IBM OS/2-ting fungerede, og så fik vi en udviklingsbetaversion af assembler og udviklingsværktøjer. Så kunne man læse manualen igennem senere, og se hvordan man kunne lave nogle ting smartere,« siger Mogens Kjær, der især glædede sig over, at i forhold til DOS-versionen var OS/2 ikke begrænset til de 640Kb.

Unix-version i C

Unicomal fik også en opgave fra Brüel&Kjær med at udvikle en Comal til Unix.

»De havde brug for det i forbindelse med dataopsamling fra deres måleinstrumenter. Der havde de brug for et generelt værktøj, så de kunne skrive softwaren til dataopsamling,« siger Mogens Kjær, der på det tidspunkt delte sin tid mellem Unicomal og sit biokemi-studie.

»Jeg var i gang med min biokemi-uddannelse og arbejdede en del år deltids på Carlsberg. 2 dage for Unicomal og 3 dage på Carlsbergs forskningscenter, hvor jeg lavede mit speciale i biokemi.«

»Vi anvendte Unix-maskiner til det arbejde, så det var ikke fremmed for mig at arbejde med Unix på det tidspunkt.«

Hvor de tidligere Comal-fortolkere var skrevet i maskinkode, blev Unix-versionen udviklet i C.

Unicomal lukker

Trods opgaverne for Commodore, IBM og Brüel&Kjær blev Unicomal nødt til at lukke i 1993.

»Vi fandt ud af, at vi ikke kunne tjene penge på at lave udviklingsværktøjer. Når markedet var mættet, så kunne vi ikke sælge flere udviklingsværktøjer. Samtidig fik vi ikke fat i så mange applikations-opgaver,« siger Mogens Kjær, der derefter kom til at arbejde fuldtids i Carlsbergs forskningscenter.

»I starten var det som biokemiker, og så blev det mere og mere it. De sidste 20 år har det været it, men det har altid været en fordel for mig, at jeg kunne tale med forskerne i Forskningscenteret med min biokemiske baggrund. Det gjorde det nemmere at forstå, hvad det handlede om,« siger Mogens Kjær, der gik på tidlig pension forrige år.

Han er i dag aktiv i Dansk Datahistorisk Forening, hvor han blandt andet har skrevet en Gier-simulator, computeren, som startede Mogens Kjærs livslange interesse for it.

En interesse, der førte ham sammen med it-beslægtede folk som Børge Christensen, Jens Erik Jensen, Palle Pedersen, Lars Laursen samt andre, der gav os Comal.