COBOL

Fra DDHFwiki
(Omdirigeret fra Cobol)
Spring til navigation Spring til søgning
COBOL for Students

COBOL (Common Business Oriented Language) var et af de tidligste højniveau programmeringssprog. Det er nu mere end 60 år gammelt og bliver stadigvæk brugt i dag.

På det tidspunkt hvor COBOL blev designet fandtes der ingen kortvarige EDB-uddannelser men der var et voksende behov for programmører til administrativ EDB. Der blev derfor lagt vægt på at sproget skulle ligne engelsk, og at det skulle være så simpelt at fejl ikke kunne gemme sig i koden. Undervisning i COBOL blev udført som brevkursus og for alm. kontoransatte. Bogen COBOL for Students starter med en introduktion til begreber såsom computere, skærme og printere.

Kildekodeformat

I modsætning til næsten alle andre nyere sprog, så havde COBOL et fast format, hvor kolonnerne var dedikeret til specifikt indhold. Man kan undre sig over hvorfor. Det skal ses i sammenhæng med tidspunktet for designet af COBOL. Der fandtes ikke skærmterminaler endnu. Programmøren skrev koden i hånden på kvadreret papir hvor kolonnerne var tegnet ind i forvejen. Arkene blev enten kodet ind på hulkort af programmøren selv eller afleveret til en assistent - en hulledame. Når hulkortene var færdige kunne de blive kørt igennem en hulkortlæser for at lave en printudskrift, som kunne verificeres for korrekt indtastning. Hvis der var en fejl, så kunne programmøren lave et nyt hulkort med samme sekvensnummer og udskifte kortet. Først når programmet skulle oversættes og køres kom det i kontakt med mainframen.

Kolonnerne er opdelt på følgende måde:

  • Kolonne 1 til 6 - Sekvensnummer
  • Kolonne 7 - Indikator-tegn
  • Kolonne 8 til 11 - Område A
  • Kolonne 12 til 72 - Område B

Alle tegn udover kolonne 72 blev ignoreret af oversætteren (IBM 704s kortlæser kunne kun læse 72 kolonner). Da skærme blev taget i brug fik COBOL programmører for vane at sætte en sytråd fast på skærmen ved kolonne 73 for at kunne se om de havde skrevet en for lang linje.

Sekvensnummeret blev ikke brugt af oversætteren, men kunne bruges til at lade programmøren specificere hvor en ny linje skulle lægges ind, lidt på samme måde som BASIC havde linjenumre.

En stjerne (*) i Indikator-kolonnen markerer at linjen er en kommentar. En skråstreg er også en kommentar men laver et side-skift på printeren inden linjen skrives ud.

Sektions- og paragraf-navne begynder i område A og efterfølges af et punktum og et mellemrum eller linjeskift. Programsætninger kan starte hvorsomhelst i område B.

Frit format blev muligt med ny COBOL standard i 2002, men var dog implementeret som udvidelser i mange produkter allerede i 80erne pga. terminaler nu var den primære måde at editere på.

Divisioner

Et COBOL program består af fire divisioner:

IDENTIFICATION DIVISION - Identificerer programmet med visse obligatoriske metadata.
ENVIRONMENT DIVISION - En beskrivelse af det udstyr der skal bruges til at oversætte og eksekvere programmet.
DATA DIVISION - En beskrivelse af det data der skal behandles.
PROCEDURE DIVISION - De instruktioner der skal udføres. Dvs. selve programmet.

Hver division er opdelt i sektioner, som er yderligere opdelt i paragraffer og derunder er opdelt i sætninger.


Eksempel

Dette program opsummerer tallene fra 1 til 100. Resultatet er 5050.

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. SUM-TO-100.
000300 ENVIRONMENT DIVISION.
000400 CONFIGURATION SECTION.
000500 SOURCE-COMPUTER. GNUCOBOL.
000600 OBJECT-COMPUTER. GNUCOBOL.
000700 DATA DIVISION.
000800 WORKING-STORAGE SECTION.
000900 77  I         PICTURE    999 USAGE COMPUTATIONAL.
001000 77  TOTAL     PICTURE 999999 USAGE COMPUTATIONAL.
001100 77  VISNING   PICTURE ZZ9999.
001200 
001300 PROCEDURE DIVISION.
001400 HOVED-PRG.
001500     MOVE ZERO TO TOTAL.
001600     PERFORM LOOP1 VARYING I FROM 1 BY 1 UNTIL I GREATER THAN 100.
001700     MOVE TOTAL TO VISNING.
001800     DISPLAY "SUM ",VISNING.
001900     STOP RUN.
002000 LOOP1.
002100     ADD I TO TOTAL.

Bemærk at 'GREATER THAN' er skrevet ud i bogstaver. Hvorfor ikke bare bruge '>'? Forklaringen er simpel. Hulkort brugte på det tidspunkt BCD tegnsættet. Det var ikke muligt at kode parenteser, <, =, > og mange andre tegn. Dette kom dog lidt senere.

Report Writer

COBOL-sproget har en indbygget rapportgenerator. Denne dukkede op i 1961, og blev optaget i 1968 udgaven af ANSI COBOL standarden som et valgfrit modul. Ideen er at gøre programmøren mere produktiv ved at overskrifter, bundlinjetotaler, sidenummerering udføres automatisk.

En rapport defineres ved brugeren har specificeret en REPORT SECTION i DATA DIVISION. Her beskriver man selve rapporten med en RD overskrift, hvor man definerer antal linjer, kolonner m.m. Derefter defineres overskrifter, detail-linjer, og sum-linjer som 01-poster. I PROCEDURE DIVISION skriver man lidt kode for at åbne den fil der skal læses. Derefter kaldes INITIATE ordren. Der skrives et par linjer kode til at læse en post og kalde GENERATE ordren. Denne skriver en detail-linje samtidig med at skrive subtotaler og skifte side når bunden af en side er nået. Når der ikke er flere poster i filen, kaldes TERMINATE, som skriver bund-totaler og afslutter rapporten. En rapport er altså et COBOL-program. Det skal oversættes med en COBOL compiler, men det er 90% deklarationer og 10% COBOL-ordrer.

Særtilfælde

ALTER

Edsger Dijkstra skrev "Go To Statement Considered Harmful" i 1968, hvor han argumenterede for at GO TO udtrykket skabte ustruktureret kildetekst. Programmeringssprogene havde alle GO TO, da det er en grundlæggende ordre i maskinkode. COBOL-folkene var dog gået fuld skrue på at gøre GO TO endnu mere uigennemskuelig med ALTER. Denne gør det muligt at ændre GO TO til at gå til en anden lokation end det der står i kildeteksten. COBOL tillader selv-modificerende programmer. Dette eksempel tæller fra 1 til 5, hvor den bruger ALTER til at bryde ud af løkken.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. OBFUSCATE-WITH-ALTER.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77  I   PIC 9.

       PROCEDURE DIVISION.
       START-HERE.
           DISPLAY "STARTET"
           ALTER LOOP-BACK TO PROCEED TO LOOP-TOP.       Sæt GO TO addressen til at pege på toppen af løkken
           MOVE 1 TO I.

       LOOP-TOP.
           DISPLAY I.
           ADD 1 TO I
           IF I > 5 THEN 
              ALTER LOOP-BACK TO PROCEED TO AFTER-LOOP.  Vi har nået 5, og vi bryder ud
       LOOP-BACK.
           GO TO.                                        Der er ingen grund til at angive en etiket.
                                                         Den bliver altid sat med ALTER.
       AFTER-LOOP.
           DISPLAY "AFSLUTTET"
           EXIT.

Producenter

Regnecentralen

I 1965 lavede Regnecentralen verdens hurtigste COBOL oversætter for Siemens 3003. Det var arbejde, der var udført af compilergruppen ledet af Peter Naur og Jørn Jensen.

Micro Focus

I de sene halvfjerdsere tog engelske firma Micro Focus initiativ til at skabe Compact Interactive Standard (CIS) COBOL for 8-bit mikrocomputere. Compileren fremstillede virtuel maskinkode pga. de ekstreme RAM begrænsninger. Maximum var 64 kilobytes for både program og data. Koden blev derefter eksekveret af et runtime system efter samme princip som Java. Produktet blev i nogle tilfælde solgt under andre navne, som f.eks. Digital Research COBOL.

Micro Focus blev dominerende på markedet for små og mellemstore systemer, hvorimod mainframe systemer primært havde udgaver udviklet af hardware-leverandøren.

Ryan-McFarland

Firmaet Ryan-McFarland fremstillede RM/COBOL. De blev opkøbt af Micro Focus.

Mere information