Systemudvikling og systemer

Gensyn med firsernes programmeringssprog

Så er der dømt firsernostalgi. Båndstationer, mikrodatamater og ikke mindst programmeringssproget Comal-80 forbinder mange med den pangfarvede tidsepoke. OpenComal og Comal 2 genopliver programmeringssproget på nutidens platforme.

I begyndelsen af 1980'erne nåede jeg den alder, hvor jeg kunne begynde i ungdomsskole. Den tilbød et kursus i datalære. Eftersom jeg syntes, at datamater lød som nogle spændende apparater, meldte jeg mig. Jeg havde dog aldrig prøvet en datamat på det tidspunkt. Første kursusgang sad jeg foran en datamat med båndstation og indtastede et lille program i et programmeringssprog ved navn Comal-80. Da jeg gik hjem den aften, havde jeg en følelse at have kontrol over maskinerne: ”Det var mig, som fik datamaten til at udskrive noget på skærmen”. I løbet af det efterår tænkte jeg mange gange, at lykken måtte være at tjene penge ved at skrive computerprogrammer.

Gammel svend

Comal-80 er den udgave af programmeringssproget Comal, som er udviklet omkring 1980. Men allerede i 1973 sidder Børge Christensen på Tønder Seminarium og udvikler en udvidelse af BASIC. Sammen med Benedict Løfstedt fra Aarhus Universitet implementerer de Comal på Regnecentralens RC 7000. Fremkomsten af mikrodatamater – altså små ”billige” computere – omkring 1980 gør det muligt at gå nye veje. Comal er tænkt til undervisning, og Regnecentralen og andre computerfabrikanter ser et marked i at designe og producere til skoler. Comal følger med, og Comal-80 rykker ind i blandt andet den danske folkeskole – og for mit vedkommende – i ungdomsskolerne.
Det er ikke kun i Danmark, at Comal-80 bliver et populært programmeringssprog i skolerne. I samme periode vælger for eksempel Irland at satse på hardware fra Apple og CP/M og Comal-80 til software.
2013 markerer med andre ord et 40 års jubilæum for et stykke enestående dansk teknologi- og skolehistorie.

En bedre BASIC

Design-filosofien bag Comal er at skabe et programmeringssprog, som kan lære unge mennesker (folkeskolens ældste elever samt elever på ungdomsuddannelserne) grundprincipperne i struktureret programmering. I 1970'erne er BASIC et meget udbredt programmeringssprog, men med alle GOTO- og GOSUB-sætninger som et typisk BASIC-program indeholder, er det ikke ligefrem velegnet til at lære struktureret programmering.
PASCAL (udviklet i slutningen af 1960'erne) er allerede i 1970'erne populært på universiterne, men et oversat sprog er kompliceret at bruge og muligvis for tungt til de små computere, som en folkeskole råder over. Men PASCAL er et elegant – for tiden – eksempel på et sprog til struktureret programmering. PASCAL har modsat BASIC underprogrammer (procedurer og funktioner) og et rigt sæt af kontrolstrukturer. Det er let at skrive programmer uden brug af GOTO. Men alle variabler skal erklæres, og typesystemet kan ofte føles som en spændetrøje.
Comal forsøger at tage de bedste elementer fra henholdsvis PASCAL og BASIC. Variabler skal ikke erklæres, men der er de fine kontrolstrukturer fra PASCAL. I 1980'erne er udviklingsmiljøer (IDEs) ikke voldsomt avancerede, men Comal er på en og samme tid både udviklingsmiljø og fortolker. Det gør det let for nybegyndere at komme i gang med programmering og bruge en computer. Som udviklingsmiljø er et Comal-system ganske avanceret. Det er for eksempel muligt at stoppe, rette i kildeteksten og genstarte programmet.
Det er værd at huske, at mødet med Comal samtidig er det første møde med en computer for mange elever. Introduktionsbøger til Comal fra 1980'erne indeholder ofte et afsnit eller to om, hvad en diskette e,r og hvordan du tænder for en computer!

Tilbage til nutiden

Comal-80 er den mest kendte udgave af programmeringssproget Comal. Hvis du ikke ejer en Commodore-64, Piccoline eller Butler, kan du bruge din nyeste computer til Comal. Den eneste forudsætning er, at du enten bruge UNIX, FreeBSD, Linux, Microsoft Windows eller Mac OS X som styresystem. Det betyder vist egentlig bare, at alle har en chance for at være med.
Til Microsoft Windows og Linux/FreeBSD/UNIX kan du bruge OpenCOMAL. OpenCOMAL er en open source-implementering af Comal. Der er ikke tale om et aktivt vedligeholdt projekt, men til retroprogrammering er det et godt stykke software. Du kan downloade en zip-fil fra Github (se Links og Bøger). Zip-filen indeholder alle projektets filer. Er du Windows-bruger, finder du en fil ved navn opencomal.exe i folderen bin. Den kan du med fordel pakke ud på dit skrivebord. Samme zip-fil kan du bruge under Linux. Du kan enten vælge at oversætte OpenCOMAL eller bruge den eksekverbare fil i bin-folderen.
Comal 2 er et slags Comal-system til Mac OS X. Det afviger fra klassisk Comal-80 et par steder i syntaksen. Du downlader det fra projektets hjemmeside (se Links og Bøger) og kører det. Modsat klassiske Comal-systemer er editor og output adskilt, og du taster ikke kommandoer, men klikker med musen (eller bruger genveje).

Udviklingsmiljøet

Som nævnt indeholder et Comal-system ofte et udviklingsmiljø. Ideen er, at du starter din computer op i Comal - det vil sige, at du ikke ser noget til styresystemet eller andre applikationer. Med andre ord: Du har ikke andet end Comal-systemet. OpenCOMAL er skrevet over denne filosofi. Du skal nemlig starte OpenCOMAL og nøjes med det. Det er dog også muligt at skrive Comal-programmerne i en ganske almindelig editor (Emacs, VIM, Notepad, etc.) og bruge OpenCOMAL som en fortolker til dine programmer.
Der er en række kommandoer, som du kan bruge sammen med dit Comal-system. Det fine ved Comal er, at mange af disse kommandoer er standardiserede, og at ethvert Comal-system implementerer kommandoerne.
Comal er linje-orienteret. Det betyder at du ikke skriver i et frit format. Nutidens kildetekst kender ikke denne begrænsning, men i Comal bliver du nødt til at give dine linjer numre. Kommandoen AUTO hjælper dig, idet den automatisk vil give dig et nyt linjenummer til hver linje. For at du kan tilføje linjer mellem to eksisterende linjer, vil AUTO typisk springe 10 linjer ad gangen. Kommandoen LIST viser dig programmet, men RENUM kan omnummerere linjerne. Omnummerering er praktisk, hvis du har tilføjet mange linjer og igen gerne vil have spring på 10 linjer. Du kan slette linjer med kommandoen DEL (efterfulgt af linjenummeret).
SAVE og LOAD-kommandoerne bruger du til henholdsvis at gemme og hente programmer. Kommandoen NEW sletter det aktuelle program. Har du skrevet dit Comal-program i en editor og har det liggende i klar tekst, skal du bruge kommandoen ENTER for at indlæse det. Endelig kan du med RUN afvikle det aktuelle program.

Eksempler

Der er nok mange læsere, som for 25-30 år siden har programmeret i Comal (især Comal-80). Eftersom det er et fint programmeringssprog, er det værd at genopfriske hukommelsen – eller lære et nyt (gammelt) programmeringssprog at kende.
Modsat mange populære programmeringssprog er Comal ligeglad med, om du skriver med store eller små bogstaver. Når et program er kommet ind i Comal-systemet, ændres alle nøgleord og variabelnavne til store bogstaver. Comal-systemet foretager også andre ændringer i din kildetekst, og det er egentlig smart for nybegynderen.
Variabler i Comal skal ikke erklæres. Typesystemet er ikke rigt på mange forskellige typer. Gør du ikke noget særligt, vil dine variabler være tal, og Comal skelner ikke mellem heltal og flydende kommatal. Det gør det let for den uerfarne programmør, som typisk ikke vil skelne mellem 2 og 2,1 – det er jo bare tal, ikke sandt? Vil du tvinge Comal til at arbejde med heltal, kan du sætte en havelåge (#) efter variabelnavnet. Strenge er også mulige i Comal – du sætter blot et dollartegn ($) efter variablens navn.
Input og output er meget enkelt i Comal. Du kan få input fra brugeren med INPUT-konstruktionen, men du kan skrive ud med PRINT og PRINT USING (sidstnævnte kan styre bredde på output). I programmet ”Tabel” kan du se, hvordan det fungerer. Eksemplet viser også, hvordan du skriver en ubetinget løkke.
Det er muligt at bruge arrays i Comal. Nøgleordet er DIM. De skal erklæres, før de bruges – og det er ikke muligt med dynamisk størrelse på dem. I programmet ”Primtal” kan du se, hvordan arrays bruges. Læg også mærke til, at tildelinger skrives som := (som i PASCAL). Du kan skrive = i Comal-systemet, og det vil automatisk skrive dine tildelinger om til :=-udgaven. Comal-systemet vil iøvrigt også indrykke blokke automatisk for dig. For at tydeliggøre, hvor en løkke, en forgrening eller en anden kodeblok slutter, bruger Comal nøgleord, som skal matche begyndelse (FOR ... ENDFOR og IF ... ENDIF). For en garvet programmør virker det tungt, men for en nybegynder er det en glimrende hjælp.
Comal understøtter underprogrammer i form af procedurer (PROC) og funktioner (FUNC). Forskellen på de to er, at funktioner returnerer en værdi. I program ”Brusselator” finder du et eksempel på løsningen af to koblede sædvanlige differentialligninger. De to afledede (x og y) er implementeret som henholdsvis funktionerne xdot og ydot. Hovedprogrammet (løkken i bunden af programmet) bruger disse to funktioner til at fremskrive løsningen.
Virkefeltet (scope) for procedurer og funktioner er lidt underligt for en nutidig programmør. Der er nemlig ikke noget: der er ingen lokale variabler. I eksemplet ”Brusselator” er variablerne x og y globale. Det er muligt at få lokale variabler, men det kræver, at du skriver CLOSED i funktionens hoved. Programmet ”Fibonnaci” illustrerer dette. Det viser også, at Comal tillader rekursion. Rekursion er et af datalogiens centrale begreber, idet mange problemer har elegante løsninger med rekursive løsninger.

********************************

INDSÆT SKÆRMBilledet Fib her

*************************

Bidrag til historien

Dansk Datahistorisk Forening er i anledning af Comals 40 års jubilæum gået i gang med at opbygge en samling af effekter. For eksempel har foreningen scannet nogle af de oprindelige brugervejledninger og stillet dem til rådighed på nettet (Se boksen "Links og bøger"). Foreningen har også en række computere, som har kørt Comal. Det er muligt at besøge foreningens museum.
Det er ikke utænkeligt, at enkelte læsere har effekter, programmer og historier om Comal, som de gerne vil dele. Foreningen vil uden tvivl sætte stor pris på ethvert bidrag.
De danske biblioteker har ikke mange Comal-bøger stående længere – og det er ganske forståeligt. Men er du nysgerrig, har de centrale biblioteker eksemplarer af en del Comal-litteratur stående i depot, og det er muligt at bestille materialet hjem.  

Programmering i pensum

Jeg må erkende, at det at downloade og lege med OpenCOMAL har bragt nogle minder frem. Comal er og bliver mit første møde med it og datalogi. Det var nok også første gang, jeg oplevede, at jeg ikke var alene om at være nørd. I en by med under 10.000 indbyggere og ca. 150 børn pr. årgang var det en befrielse af møde de 10-12 andre nørder i byen en gang om ugen på ungdomsskolen. Når jeg idag møder en nørdet teenager, husker jeg tilbage på mine Comal-dage i 1980'erne i et forsøg på at forstå ham eller hende.
Comal er et stykke danmarkshistorie. Visionerne for informationssamfundet var i 1970'erne og 1980'erne store: Alle børn skulle lære at programmere, inden de gik ud af folkeskolen. I dag er it-visionerne for den danske folkeskole så lave, at de kommer til at handle om Excel, smartboards og iPads.
Hvis Danmark skal tilbage som en førende nation i det 21. århunderede, bør Comal (eller et andet begyndervenligt programmeringssprog) indføres i folkeskolens it-kanon!