De boeken Tijd voor COBOL behandelen COBOL-85. Behalve met het schrijven van nieuwe programma's, moeten programmeurs zich ook vaak bezig houden met het onderhouden van oude programma's. Die bestaande programma's zullen soms geschreven zijn volgens de oude norm COBOL-74. Wie met zulke programma's aan het werk gaat, zal een idee moeten hebben van de verschillen tussen de twee COBOL-versies.
A2.1 Vergelijking
Het kijken naar de verschillen tussen COBOL-74 en COBOL-85 is voornamelijk een kwestie van weten welke elementen van COBOL-85 nieuw zijn. Want de verschillen komen hoofdzakelijk neer op toevoegingen aan COBOL-74. De meeste programma's die geschreven zijn voor een COBOL-74-compiler draaien zonder problemen na compilatie door een COBOL-85-compiler. Probleemloze verwerking van oude programma's na compilatie door een nieuwe compiler is echter niet altijd gegarandeerd. De oude norm bevatte op verschillende plaatsen onduidelijkheden of liet bepaalde effecten in het midden. Dat betekende dat de makers van een compiler zelf een geschikte oplossing moesten vinden of uitleg moesten geven aan de tekst. In de nieuwe norm zijn veel onduidelijkheden opgelost. Maar de gekozen oplossing kan strijdig zijn met de oplossing van de compiler-bouwers destijds.
De COBOL-85-norm bevat twee lijsten met verschilpunten tussen de oude en de nieuwe versie. De ene lijst bevat 107 verschillen die geen problemen opleveren voor bestaande programma's. De tweede lijst is een opsomming van verschillen waardoor sommige bestaande programma's misschien aanpassing nodig hebben. In dit aanhangsel zijn de belangrijkste punten van beide lijsten gegroepeerd en samengevat.
Vooruitlopend op de verwachte nieuwe norm, zijn verschillende compilerbouwers in hun COBOL-74-compilers al verder gegaan dan de COBOL-74-norm toestond. Zo staan veel COBOL-74-compilers het woordje then in de if-opdracht toe, hoewel het in de norm ontbrak. Een ander voorbeeld is het gebruik van kleine letters in de COBOL-opdrachten. De norm van COBOL-74 laat alleen kleine letters toe in commentaarregels en in alfanumerieke constanten. Veel COBOL-74-compilers maken geen probleem van kleine letters in de rest van het programma.
Speciale aandacht verdienen de zogenaamde obsolete elements (verouderde onderdelen). Die vormen niet echt een verschil tussen de twee COBOL-versies, want in beide zijn ze aanwezig. Maar ze staan in de laatste norm vermeld met de aantekening dat ze in de volgende norm zullen verdwijnen. Zie voor een bespreking van de obsolete elements aanhangsel A1 van dit boek.
In dit aanhangsel komen in paragraaf A2.2 de elementen aan bod die geheel nieuw zijn. Het is een lange lijst van taalelementen die je waarschijnlijk niet aantreft in programma's voor een COBOL-74-compiler. Daarna volgt (in paragraaf A2.3) een bespreking van wijzigingen in bestaande taalelementen. Het betreft hier vaak verboden die zijn opgeheven of versoepelingen van regels. Ook staan hier enkele uitbreidingen van bestaande opdrachten vermeld. Omdat zulke uitbreidingen tevens vernieuwingen zijn, is de keuze voor plaatsting in paragraaf A2.2 of A2.3 niet altijd even duidelijk. Raadpleeg in geval van twijfel beide paragrafen.
Indien mogelijk is een verwijzing opgenomen naar de plaats in de leerboek van Tijd voor COBOL waar het betrokken onderdeel is behandeld.
A2.2 Geheel nieuw
Niet aanwezig in COBOL-74 zijn de volgende taalelementen. Ze zijn hier in alfabetische volgorde vermeld.
en
een hele trits gereserveerde woorden.
A2.3 Wijzigingen
Verschillende onderdelen van de taal hebben in de nieuwe norm enige wijziging ondergaan. Uit de volgende opsomming blijkt dat veel wijzigingen ons bij de stof in de leerboeken veelvuldig van pas zijn gekomen. COBOL-74 heeft nogal wat beperkingen.
In een relatievoorwaarde zijn de tekens >= en <= toegestaan. Ook de uitgebreide schrijfwijze is mogelijk: is greater than or equal to en is less than or equal to. In COBOL-74 was een omschrijving nodig: not < en not >. Op die manier moet ongelijk nog steeds worden geschreven: not = (zie paragraaf 1.7).
In COBOL-85 is relatieve subscripting toegestaan, zoals in
display maandnaam(mnd + 1)
Het veld mnd kan hierbij zowel een index als een gewoon numeriek veld zijn (zie paragraaf 6.1 en paragraaf 11.1). In COBOL-74 was de plus of de min tussen haakjes bij een tabelverwijzing alleen toegestaan bij een index.
Het aantal dimensies van een tabel mag 7 bedragen (zie paragraaf 11.11). In COBOL-74 was het maximale aantal 3.
De environment division, data division en de procedure division, de configuration section en paragrafen source-computer en object-computer mogen ontbreken in een COBOL-85-programma. Bij COBOL-74 waren ze verplicht. Bovendien mogen de paragrafen source-computer en object-computer nu ook leeg zijn. Dat wil zeggen dat het vermelden van de computernaam niet meer verplicht is.
Het woord filler mag in COBOL-85 wegblijven. Een veld heeft dan in het geheel geen naam (zie paragraaf 4.14). In COBOL-74 is dat weglaten niet toegestaan.
In COBOL-74 is de ondergrens bij een tabel met een variabel aantal elementen 1 en in COBOL-85 is de ondergrens 0 (zie paragraaf 6.4). De volgende tabelbeschrijving is dus niet juist in COBOL-74.
03 kind-gegevens occurs 0 to 19 times depending on kind-aantal.
In COBOL-85 is het toegestaan dat een herdefinitie kleiner is dan het oorspronkelijke veld. De herdefinitie van een 01-veld mag zowel groter als kleiner zijn (zie paragraaf 4.15). In COBOL-74 is verschil in lengte alleen toegestaan bij een 01-veld.
Parameteroverdracht is in COBOL-74 alleen mogelijk by reference. Omdat er geen keus is, bestaat er geen noodzaak om een overdrachtswijze te vermelden. De woorden by reference bestaan dus niet in COBOL-74. In COBOL-74 moeten de parameters velden van 01-niveau zijn. In COBOL-85 is ook een elementair veld toegestaan (zie paragraaf 9.2).
In COBOL-85 is de beperking vervallen dat de opdracht exit program de enige opdracht in een paragraaf moet zijn. In COBOL-74 is dat een verplichting.
Bij de inspect-opdracht is het in COBOL-85 mogelijk om zowel de after-optie als de before-optie te gebruiken (zie paragraaf 7.16). Daardoor is het mogelijk om een middendeel van het onderzoeksveld te bekijken. In COBOL-74 mag slechts een van beide opties voorkomen.
De invoer- en de uitvoerprocedures bij de sort-opdracht (zie deel 2, paragraaf 16.2 en 16.3) mogen in COBOL-85 sections of paragrafen zijn, terwijl in COBOL-74 alleen sections zijn toegestaan. De bestanden achter using en giving mogen in COBOL-74 alleen sequentiële bestanden zijn, maar in COBOL-85 zijn ook relative of indexed bestanden toegestaan.
In COBOL-85 is het toegestaan een veld dat numeriek is opgemaakt over te brengen naar een gewoon numeriek veld. De opmaaktekens (zoals voorloopspaties en tussenvoegetekens) worden daarbij verwijderd (zie paragraaf 3.4). In COBOL-74 is deze zogenaamde de-editing niet mogelijk.
Open extend is in COBOL-74 alleen toegestaan bij een sequentieel bestand. In COBOL-85 kunnen we ook aan een relative of een indexed bestand aan het eind records toevoegen.
De perform-opdracht heeft grote wijzigingen ondergaan. Door de introductie van scope-terminators is de in-line perform mogelijk geworden (zie deel 1, paragraaf 3.12). In COBOL-74 volgde na het woord perform altijd een paragraaf of een section. In COBOL-85 bestaat de keus tussen with test before en with test after. In COBOL-74 bestaat alleen de test vooraf en omdat er geen keus is, hoeft (en mag) dat er niet bij staan.
De set-opdracht kan in COBOL-74 alleen gebruikt worden in verband met indexen (zie paragraaf 11.2). In COBOL-85 is de set-opdracht tevens bruikbaar bij schakelaars (zie paragraaf 13.7) en bij het 88-niveau (zie paragraaf 4.6).
De usage-clausule kent in COBOL-85 twee termen die in COBOL-74 niet aanwezig zijn: usage is binary en usage is packed-decimal (zie paragraaf 15.6). Veel COBOL-74-compilers kennen uitbreidingen op de norm en bieden deze opslagvormen onder de namen computational-2, computational-3 enzovoort. Ze bestaan dus veelal wel, maar niet onder de huidige naam.
De onderdelen not at end, not invalid key, not on exception, not on size error en not at end-of-page bestaan niet in COBOL-74. In COBOL-85 gelukkig wel. Als oplossing voor dit gemis gebruikt men in COBOL-74 meestal een wissel (zie paragraaf 4.6) die vooraf in een bepaalde stand werd gezet. Als at end, invalid key, on exception, on size error en at end-of-page optreedt dan zet men de wissel in de andere stand. Via een if-opdracht die de stand van de wissel bekijkt, kan men dan de ene of de andere reeks opdrachten uitvoeren.
In COBOL-74 zijn kleine letters in de opdrachten officieel niet toegestaan. Uitsluitend in commentaarregels en in alfanumerieke constanten.