lørdag 17. desember 2011 Julekalender Polyglot Cobol
COBOL ble skapt i 1959, og er den dag i dag et av de viktigste språkene i utallige, kritiske forretningssystemer. COBOL er tungvindt, og COBOL gjør ting enkelt. COBOL er elsket, og COBOL er hatet. Jeg oppfordrer deg ikke til å bli en COBOL-utvikler, men alle seriøse utviklere bør vite hva COBOL er, hvordan et COBOL-program ser ut, og hvilket betydning det har hatt og fortsatt har.
COBOL står for COmmon Business Oriented Language, og var et sammarbeid mellom U.S. Department of Defence og ulike datamaskinprodusenter, brukere og universiteter. Det ble designet for å løse typiske forretningsproblemer, være maskin-uavhengig, og utvidbart.
Sentralt i utviklingen av språket stod Grace Hopper, og du kan lese mer om henne og bakgrunnen for språket i julekalenderen fra i fjor.
COBOL skiller seg klart fra de andre overlevningene fra samme tidsperiode. Mens bruk av f.eks. FORTRAN krevde kunnskap om både matematikk og hvordan datamaskiner fungerer, rettet COBOL seg mer mot brukere med forretningsforståelse. Syntaksen er langt fra minimalistisk, og skulle i teorien være enklere å lese for "vanlige mennesker".
COBOL har hatt en enorm utbredelse. I 1997 rapporterte Gartner Group at 80% av "the world's business" kjørte på COBOL, med over 200 milliarder linjer kode, og at antallet kodelinjer fortsatt økte med rundt 5 milliarder hvert år. Jeg antar at denne veksten har gått kraftig tilbake, blant annet takket være populariteten til Java og .NET. Men det er åpenbart at COBOL fortsatt spiller en veldig viktig rolle, og det står et ukjent antall stormaskiner rundt omkring i verden og eksekverer COBOL-linjer.
Bruken av COBOL har derimot vært omstridt. I 1975 bemerket Edsger Dijkstra at: "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense." Han sa forsåvidt det samme om BASIC også.
Det var veldig spennende å sette seg ned og forsøke å lære nok COBOL til å løse Euler-oppgaven. Og etter et par tutorials viste det seg å være ganske lett. Programmet ligner ikke mye på noen av de andre du har sett, men det er egentlig bare førsteinntrykket. For løsningen er rett og slett bare en for-løkke, en if-test og en oppsummering i en variabel.
Men for at du skal forstå hva du ser nedenfor må jeg forklare litt nærmere. Programmet består av ulike deler, kalt divisjoner. Identification-divisjonen inneholder metadata om programmet. I Data-divisjonen må jeg definere alle variablene jeg skal bruke, og i Procedure-divisjonen kommer selve algoritmen.
1 000010 IDENTIFICATION DIVISION. 2 000020 PROGRAM-ID. EULER-1-PROG. 3 000030 AUTHOR. TORBJORN MARO. 4 000040*Sum numbers below 1000 that's multiples of 3 or 5 5 000050 6 000080 DATA DIVISION. 7 000090 WORKING-STORAGE SECTION. 8 000100 01 N PIC 9(4). 9 000101 01 MOD-3 PIC 9. 10 000102 01 MOD-5 PIC 9. 11 000105 01 EULER-SUM PIC 9(6) VALUE 0. 12 000110 13 000120 PROCEDURE DIVISION. 14 000130 MAIN-PARAGRAPH. 15 000140 PERFORM VARYING N FROM 0 BY 1 UNTIL N > 999 16 000142 COMPUTE MOD-3 = FUNCTION MOD (N, 3) 17 000143 COMPUTE MOD-5 = FUNCTION MOD (N, 5) 18 000150 IF MOD-3 = 0 OR MOD-5 = 0 THEN 19 000160 COMPUTE EULER-SUM = EULER-SUM + N 20 000165 END-IF 21 000170 END-PERFORM 22 000180 DISPLAY EULER-SUM 23 000190 STOP RUN. 24
I linjen jeg har numerert 000105 sier jeg at EULER-SUM er en variabel som består av opp til 6 siffer – 9 betyr et heltall, og 6 i parantes betyr 6 stykker. "VALUE 0" betyr at variabelen initielt settes til 0.
Linje 000140 er starten på en løkke som kjører fra 0 til og med 999. For hver iterasjon beregner jeg modulo N av 3 og 5, og hvis en av dem er lik 0 oppdaterer jeg i linje 000160 summen ved å legge til N.
Det var utrolig mye som måtte skrives for å oppnå veldig lite dette her :)
Jeg har egentlig sagt det allerede – seriøse utviklere bør kjenne sin historie. Jeg vet ikke hvor mye praktisk nytte denne kunnskapen vil gi meg, men gjennom å gå inn for å lære meg litt COBOL – nok til å skrive denne artikkelen - har jeg faktisk fått litt mere respekt for språket enn det jeg hadde i utgangspunktet. Og hvem vet, kanskje vil noen ha meg til å fikse litt på et COBOL-program en vakker dag, og jeg kan sitte der og håve inn 5000 kroner i timen!
COBOL har forresten også vært en viktig insirasjonsskilde til utviklingen av ABAP, et språk man bruker når man programmerer SAP. ABAP er i dag rangert som ett av de 20 mest populære programmeringsspråkene vi har.
Du finner endel gamle men tilstrekkelige tutorials og lærebøker på nettet om du leter litt – for eksempel her og her. Det vanskeligste er å finne en COBOL-kompilator som du kan kjøre på PC'en din; de fleste COBOL-implementasjonene koster enten penger, er laget for stormaskiner, eller begge deler på en gang.
Om du har lyst til å forsøke deg på litt kode, men ikke orker å sette opp OpenCOBOL eller COBOL for GCC, så kan du jukse litt. Jeg brukte nemlig en site som heter ideone.com. Der kan du enkelt skrive og kjøre kode for et hav av ulike kompilatorer og tolkere, deriblant COBOL.