COBOL -COBOL

COBOL
Zpráva COBOL Apr60.djvu
Zpráva COBOL 60 pro CODASYL (duben 1960)
Paradigma Procedurální , imperativní , objektově orientovaný , generický
Navrhl Howard Bromberg , Norman Discount , Vernon Reeves , Jean E. Sammet , William Selden , Gertrude Tierney , s nepřímým vlivem Grace Hopper
Vývojáři CODASYL , ANSI , ISO / IEC
Poprvé se objevil 1959 ; před 64 lety ( 1959 )
Stabilní uvolnění
ISO/IEC 1989:2023/2023
Disciplína psaní Slabé , statické
Přípony názvů souborů .cbl, .cob,.cpy
Hlavní implementace
GnuCOBOL , IBM COBOL , Micro Focus Visual COBOL
Dialekty
COBOL/2, DEC COBOL-10, DEC PDP-11 COBOL, DEC PDP-11 COBOL-85, DEC VAX COBOL, DOSVS COBOL, Envyr ICOBOL, Fujitsu COBOL, Hitachi COBOL2002, HP3000 COBOL/II, IBM COBOL /400, IBM COBOL/II, IBM Enterprise COBOL, IBM ILE COBOL, IBM OS/VS COBOL, ICL COBOL (VME), Micro Focus ACUCOBOL-GT, Micro Focus COBOL-IT, Micro Focus RM/COBOL, Micro Focus Visual COBOL , Microsoft COBOL, Raincode COBOL, Realia COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, Tandem (NonStop) COBOL, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys, Unisys MCP COBOL85 /Otevřít, Veryant isCOBOL, Wang VS COBOL
Ovlivněno
Původní: AIMACO , COMTRAN , FACT , FLOW-MATIC
COBOL 2002: C++ , Eiffel , Smalltalk
Ovlivnil
CobolScript , EGL , PL/I , PL/B

COBOL ( / ˈ k b ɒ l , - b ɔː l / ; zkratka pro „common business-oriented language“) je kompilovaný počítačový programovací jazyk podobný angličtině určený pro obchodní použití. Je to imperativní , procedurální a od roku 2002 objektově orientovaný jazyk. COBOL se primárně používá v obchodních, finančních a administrativních systémech pro společnosti a vlády. COBOL je stále široce používán v aplikacích nasazených na sálových počítačích , jako jsou rozsáhlé dávkové a transakční úlohy. Kvůli jeho klesající oblibě a odchodu zkušených programátorů COBOL do důchodu jsou však programy migrovány na nové platformy, přepisovány do moderních jazyků nebo nahrazovány softwarovými balíčky. Většina programování v COBOL je nyní čistě pro údržbu existujících aplikací; nicméně, mnoho velkých finančních institucí stále vyvíjelo nové systémy v COBOL až do roku 2006.

COBOL byl navržen v roce 1959 společností CODASYL a byl částečně založen na programovacím jazyce FLOW-MATIC navrženém Grace Hopper . Byl vytvořen jako součást úsilí ministerstva obrany USA vytvořit přenosný programovací jazyk pro zpracování dat. Původně byl považován za provizorní, ale ministerstvo obrany okamžitě přinutilo výrobce počítačů, aby jej poskytli, což vedlo k jeho širokému přijetí. Byl standardizován v roce 1968 a od té doby byl čtyřikrát revidován. Rozšíření zahrnují podporu pro strukturované a objektově orientované programování . Současný standard je ISO / IEC 1989:2014 .

Příkazy COBOL mají syntaxi podobnou angličtině, která byla navržena tak, aby byla samodokumentující a vysoce čitelná. Je však podrobný a používá více než 300 vyhrazených slov . Na rozdíl od moderní, stručné syntaxe jako , COBOL má syntaxi více podobnou angličtině (v tomto případě ). y = x;MOVE x TO y

Kód COBOL je rozdělen do čtyř divizí (identifikace, prostředí, data a procedura), které obsahují pevnou hierarchii oddílů, odstavců a vět. Protože chybí velká standardní knihovna , standard specifikuje 43 příkazů, 87 funkcí a pouze jednu třídu.

Akademičtí informatici se obecně nezajímali o obchodní aplikace, když byl COBOL vytvořen, a nepodíleli se na jeho návrhu; byl (efektivně) od základu navržen jako počítačový jazyk pro podnikání s důrazem na vstupy a výstupy, jejichž jedinými datovými typy byly čísla a řetězce textu.

COBOL byl po celou dobu své existence kritizován za svou výřečnost, proces návrhu a špatnou podporu pro strukturované programování . Tyto slabiny vedou k monolitickým, podrobným (zamýšleným jako v angličtině) programům, které nejsou snadno srozumitelné.

Po léta byl COBOL považován za programovací jazyk pro obchodní operace na sálových počítačích, i když v posledních letech vzrostl zájem o migraci operací COBOL na cloud computing .

Historie a specifikace

Pozadí

Koncem 50. let se uživatelé a výrobci počítačů začali obávat rostoucích nákladů na programování. Průzkum z roku 1959 zjistil, že v jakékoli instalaci zpracování dat stálo programování v průměru 800 000 USD a že překlad programů pro běh na novém hardwaru by stál 600 000 USD. V době, kdy se nové programovací jazyky množily stále větším tempem, stejný průzkum naznačil, že pokud by byl použit běžný obchodně orientovaný jazyk, konverze by byla mnohem levnější a rychlejší.

8. dubna 1959 Mary K. Hawesová , počítačová vědkyně z Burroughs Corporation , svolala setkání zástupců akademické obce, uživatelů počítačů a výrobců na University of Pennsylvania , aby zorganizovali formální setkání o společných obchodních jazycích. Mezi zástupci patřili Grace Hopper (vynálezce anglického jazyka pro zpracování dat FLOW-MATIC ), Jean Sammet a Saul Gorn .

Na dubnovém setkání skupina požádala ministerstvo obrany (DoD), aby podpořilo snahu o vytvoření společného obchodního jazyka. Delegace zapůsobila na Charlese A. Phillipse, ředitele výzkumného týmu datových systémů na ministerstvu obrany, který si myslel, že „důkladně rozumí“ problémům ministerstva obrany. Ministerstvo obrany provozovalo 225 počítačů, objednalo dalších 175 a utratilo přes 200 milionů dolarů na implementaci programů, které na nich běžely. Přenosné programy by ušetřily čas, snížily náklady a usnadnily modernizaci.

Charles Phillips souhlasil, že bude schůzku sponzorovat, a pověřil delegaci vypracováním agendy.

COBOL 60

Ve dnech 28. a 29. května 1959 (přesně rok po schůzce ALGOL 58 v Curychu ) se v Pentagonu konalo jednání o vytvoření společného programovacího jazyka pro podnikání. Zúčastnilo se ho 41 lidí a předsedal mu Phillips. Ministerstvo obrany se obávalo, zda může provozovat stejné programy pro zpracování dat na různých počítačích. FORTRAN , jediný mainstreamový jazyk v té době, postrádal funkce potřebné k psaní takových programů.

Zástupci nadšeně popisovali jazyk, který by mohl fungovat v nejrůznějších prostředích, od bankovnictví a pojišťovnictví až po veřejné služby a řízení zásob. Jednomyslně se shodli, že více lidí by mělo umět programovat a že nový jazyk by neměl být omezován omezeními současné technologie. Většina se shodla na tom, že jazyk by měl maximálně využívat angličtinu, měl by být schopen změn, být nezávislý na stroji a měl by být snadno použitelný, a to i na úkor síly.

Výsledkem jednání bylo vytvoření řídícího výboru a výborů krátkého, středního a dlouhého dosahu. Krátkodobý výbor dostal do září (tři měsíce), aby vypracoval specifikace pro prozatímní jazyk, který by pak ostatní výbory vylepšily. Jejich oficiálním posláním však bylo identifikovat silné a slabé stránky existujících programovacích jazyků a výslovně je nenasměrovalo k vytvoření nového jazyka.

Výbor krátkého dosahu termín dodržel s nedůvěrou. Jedna členka, Betty Holberton , popsala tříměsíční lhůtu jako „hrubý optimismus“ a pochybovala, že by tento jazyk byl skutečně brzdou.

Řídící výbor se sešel 4. června a dohodl se na pojmenování celé činnosti jako Výbor pro jazyky datových systémů neboli CODASYL a na vytvoření výkonného výboru.

Členové výboru pro krátké dosahy zastupovali šest výrobců počítačů a tři vládní agentury. Výrobci počítačů byli Burroughs Corporation , IBM , Minneapolis-Honeywell (Honeywell Labs), RCA , Sperry Rand a Sylvania Electric Products . Vládními agenturami byly americké letectvo , námořnictvo David Taylor Model Basin a National Bureau of Standards (nyní National Institute of Standards and Technology). Výboru předsedal Joseph Wegstein z amerického Národního úřadu pro standardy. Práce začala zkoumáním popisu dat, prohlášení, existujících aplikací a uživatelských zkušeností.

Komise zkoumala především programovací jazyky FLOW-MATIC , AIMACO a COMTRAN . Jazyk FLOW-MATIC byl zvláště vlivný, protože byl implementován a protože AIMACO bylo jeho derivátem s pouze malými změnami. Vynálezkyně společnosti FLOW-MATIC, Grace Hopperová, také sloužila jako technický poradce výboru. Hlavním přínosem FLOW-MATIC pro COBOL byly dlouhé názvy proměnných, anglická slova pro příkazy a oddělení popisů dat a instrukcí.

Hopper je někdy označován jako „matka COBOL“ nebo „babička COBOL“, ačkoli Jean Sammet , hlavní návrhář COBOL, uvedl, že Hopper „nebyl matkou, tvůrcem nebo vývojář Cobol“.

Jazyk COMTRAN od IBM, vynalezený Bobem Bemerem , byl krátkou komisí složenou z kolegů Grace Hopperové považován za konkurenta FLOW-MATIC. Některé z jeho funkcí nebyly začleněny do COBOL, aby to nevypadalo, že IBM ovládla proces návrhu, a Jean Sammet v roce 1981 řekla, že někteří členové výboru (včetně ní) byli „silně zaujatí proti IBM“. V jednom případě poté, co se Roy Goldfinger, autor příručky COMTRAN a člen výboru pro střední dosah, zúčastnil schůze podvýboru na podporu svého jazyka a povzbuzení k používání algebraických výrazů, Grace Hopperová zaslala výboru krátkého dosahu poznámku, v níž zopakovala Sperryho Randa. úsilí o vytvoření jazyka založeného na angličtině.

V roce 1980 Grace Hopper poznamenala, že „COBOL 60 je z 95 % FLOW-MATIC“ a že COMTRAN měl „extrémně malý“ vliv. Dále řekla, že bude tvrdit, že práce byla ovlivněna jak FLOW-MATIC, tak COMTRAN, jen aby „udrželi ostatní lidi šťastnými [aby] se nás nepokoušeli vyřadit“.

Funkce od COMTRAN začleněné do COBOL zahrnovaly vzorce, PICTUREklauzuli , vylepšené IFprohlášení, které odstranilo potřebu GO TO , a robustnější systém správy souborů.

Užitečnost práce výboru byla předmětem velké diskuse. Zatímco někteří členové si mysleli, že jazyk má příliš mnoho kompromisů a byl výsledkem návrhu komise , jiní se domnívali, že je lepší než tři zkoumané jazyky. Někteří měli pocit, že jazyk je příliš složitý; ostatní příliš jednoduché.

Kontroverzní funkce zahrnovaly ty, které byly pro uživatele zpracování dat považovány za zbytečné nebo příliš pokročilé. Mezi tyto vlastnosti patřily booleovské výrazy , vzorce a indexy tabulek . Dalším bodem sporu bylo, zda klíčová slova dávat do kontextu a jaký vliv by to mělo na čitelnost. Přestože byla kontextově citlivá klíčová slova odmítnuta, tento přístup byl později použit v PL/I a částečně v COBOL od roku 2002. Málo se zohledňovala interaktivita , interakce s operačními systémy (v té době existovalo jen málo) a funkce (myšleno jako čistě matematické a nepoužitelné při zpracování údajů).

Specifikace byly představeny výkonnému výboru dne 4. září. Zaostali za očekáváním: Joseph Wegstein poznamenal, že „obsahuje drsná místa a vyžaduje nějaké doplňky“, a Bob Bemer je později popsal jako „hodgepodge“. Podvýbor dostal do prosince, aby to zlepšil.

Na schůzi v polovině září výbor projednal název nového jazyka. Návrhy zahrnovaly „BUSY“ (Business System), „INFOSYL“ (Jazyk informačního systému) a „COCOSYL“ (Common Computer Systems Language). Není jasné, kdo vymyslel název „COBOL“, ačkoli Bob Bemer později tvrdil, že to byl jeho návrh.

V říjnu obdržela komise střední třídy kopie jazykové specifikace FACT vytvořené Royem Nuttem . Jeho vlastnosti zapůsobily na výbor natolik, že přijali usnesení, že na něm COBOL založí.

To byla rána pro komisi krátkého dosahu, která ve specifikaci značně pokročila. Přestože byl FACT technicky lepší, nebyl vytvořen s ohledem na přenositelnost nebo na základě konsensu výrobců a uživatelů. Chyběla mu také prokazatelná implementace, která umožňovala příznivcům COBOL založeného na FLOW-MATIC zvrátit usnesení. Zástupce RCA Howard Bromberg také zablokoval FACT, aby práce RCA na implementaci COBOL nepřišla vniveč.

Brzy se ukázalo, že výbor je příliš velký na to, aby bylo možné rychle dosáhnout dalšího pokroku. Frustrovaný Howard Bromberg koupil náhrobek za 15 dolarů s vyrytým „COBOL“ a poslal jej Charlesi Phillipsovi, aby dal najevo svou nelibost.

Byl vytvořen podvýbor pro analýzu existujících jazyků a skládal se ze šesti jednotlivců:

  • William Selden a Gertrude Tierney z IBM,
  • Howard Bromberg a Howard Discount of RCA,
  • Vernon Reeves a Jean E. Sammet ze společnosti Sylvania Electric Products.

Podvýbor odvedl většinu práce při vytváření specifikace a ponechal komisi krátkého dosahu, aby přezkoumala a upravila svou práci před vytvořením hotové specifikace.

Specifikace byly schváleny výkonným výborem 8. ledna 1960 a zaslány vládní tiskárně, která je vytiskla jako COBOL 60 . Stanoveným cílem jazyka bylo umožnit snadné psaní efektivních přenosných programů, umožnit uživatelům přejít na nové systémy s minimálním úsilím a náklady a být vhodný pro nezkušené programátory.

Výkonný výbor CODASYL později vytvořil Výbor údržby COBOL, aby odpovídal na otázky uživatelů a prodejců a zlepšoval a rozšiřoval specifikace.

Během roku 1960 se seznam výrobců, kteří plánovali postavit kompilátory COBOL, rozrostl. Do září se k CODASYL připojilo dalších pět výrobců ( Bendix , Control Data Corporation , General Electric (GE), National Cash Register a Philco ) a všichni zastoupení výrobci oznámili kompilátory COBOL. GE a IBM plánovaly integrovat COBOL do svých vlastních jazyků GECOM a COMTRAN. Naproti tomu International Computers and Tabulators plánovaly nahradit svůj jazyk CODEL jazykem COBOL.

Mezitím RCA a Sperry Rand pracovali na vytvoření kompilátorů COBOL. První program COBOL běžel 17. srpna na RCA 501. Ve dnech 6. a 7. prosince běžel stejný program COBOL (i když s menšími změnami) na počítači RCA a počítači Remington-Rand Univac, což prokázalo, že lze dosáhnout kompatibility .

Relativní vliv toho, které jazyky byly použity, pokračuje dodnes v doporučených radách vytištěných ve všech referenčních příručkách COBOL:

COBOL je oborový jazyk a není majetkem žádné společnosti nebo skupiny společností ani žádné organizace nebo skupiny organizací.

Žádný přispěvatel ani výbor CODASYL COBOL neposkytuje žádnou záruku, vyjádřenou ani předpokládanou, na přesnost a fungování programovacího systému a jazyka. Navíc žádný přispěvatel ani výbor v souvislosti s tím nenesou žádnou odpovědnost. Autoři a držitelé autorských práv zde použitého materiálu chráněného autorským právem jsou následující:

FLOW-MATIC (ochranná známka Unisys Corporation ), Programování pro UNIVAC (R) I a II, Data Automation Systems, chráněná autorským právem 1958, 1959, Unisys Corporation; IBM Commercial Translator Form č. F28-8013, chráněný autorským právem IBM z roku 1959; FACT, DSI 27A5260-2760, chráněné autorským právem 1960 společností Minneapolis-Honeywell.

Výslovně povolili použití tohoto materiálu, zcela nebo zčásti, ve specifikacích COBOL. Toto oprávnění se vztahuje na reprodukci a použití specifikací COBOL v programovacích příručkách nebo podobných publikacích.

COBOL-61 až COBOL-65

Je spíše nepravděpodobné, že by se Cobol objevil do konce dekády.

Anonymní, červen 1960

V COBOL 60 bylo nalezeno mnoho logických nedostatků , což vedlo Charlese Katze z General Electric k varování, že jej nelze interpretovat jednoznačně. Neochotný krátkodobý výbor nařídil totální vyčištění a v březnu 1963 bylo oznámeno, že syntaxe COBOLu byla stejně definovatelná jako syntaxe ALGOL , ačkoli sémantické nejasnosti zůstaly.

COBOL je složitý jazyk pro psaní kompilátoru kvůli velké syntaxi a mnoha volitelným prvkům v syntaktických konstrukcích a také kvůli potřebě generovat účinný kód pro jazyk s mnoha možnými reprezentacemi dat, implicitními převody typů a nezbytnými sadami. ups pro I/O operace. Rané kompilátory COBOL byly primitivní a pomalé. Hodnocení amerického námořnictva z roku 1962 zjistilo rychlost kompilace 3–11 příkazů za minutu. Do poloviny roku 1964 se zvýšily na 11–1000 výpisů za minutu. Bylo pozorováno, že zvýšení paměti by drasticky zvýšilo rychlost a že náklady na kompilaci se divoce lišily: náklady na výpis byly mezi 0,23 a 18,91 dolary.

Koncem roku 1962 IBM oznámilo, že COBOL bude jejich primárním vývojovým jazykem a že vývoj COMTRAN bude ukončen.

Specifikace COBOL byla během pěti let po zveřejnění třikrát revidována. COBOL-60 byl nahrazen v roce 1961 COBOL-61. To bylo poté nahrazeno specifikacemi COBOL-61 Extended v roce 1963, které zavedly zařízení pro třídění a zápis zpráv. Přidaná zařízení opravila nedostatky zjištěné společností Honeywell koncem roku 1959 v dopise výboru krátkého dosahu. COBOL Edition 1965 přinesl další objasnění specifikací a zavedl zařízení pro manipulaci se soubory a tabulkami velkokapacitního úložiště .

COBOL-68

Začalo se úsilí o standardizaci COBOLu, aby se překonaly nekompatibility mezi verzemi. Koncem roku 1962, jak ISO, tak United States of America Standards Institute (nyní ANSI ) vytvořily skupiny pro vytvoření norem. ANSI vyrobila USA Standard COBOL X3.23 v srpnu 1968, který se stal základním kamenem pro pozdější verze. Tato verze byla známá jako American National Standard (ANS) COBOL a byla přijata ISO v roce 1972.

COBOL-74

V roce 1970 se COBOL stal nejrozšířenějším programovacím jazykem na světě.

Nezávisle na výboru ANSI pracoval výbor pro programovací jazyk CODASYL na vylepšení jazyka. Popsali nové verze v letech 1968, 1969, 1970 a 1973, včetně změn, jako je nová meziprogramová komunikace, ladění a slučování souborů, jakož i vylepšené zpracování řetězců a funkce začlenění do knihovny .

Přestože byl CODASYL nezávislý na výboru ANSI, ANSI používal časopis CODASYL Journal of Development k identifikaci funkcí, které byly dostatečně populární, aby zaručovaly implementaci. Výbor pro programovací jazyk také spolupracoval s ECMA a japonským výborem COBOL Standard.

Výbor pro programovací jazyk však nebyl příliš známý. Viceprezident William Rinehuls si stěžoval, že dvě třetiny komunity COBOL nevěděly o existenci výboru. Chyběly jí také finanční prostředky na to, aby byly volně dostupné veřejné dokumenty, jako jsou zápisy z jednání a návrhy změn.

V roce 1974 ANSI zveřejnila revidovanou verzi (ANS) COBOL, která obsahuje nové funkce, jako jsou organizace souborů , DELETEpříkazy a segmentační modul. Odstraněné funkce zahrnovaly NOTEpříkaz, EXAMINEpříkaz (který byl nahrazen INSPECT) a implementátorem definovaný modul náhodného přístupu (který byl nahrazen novými sekvenční a relativní I/O moduly). Ty tvořily 44 změn, které učinily stávající prohlášení nekompatibilní s novým standardem. Zapisovatel zpráv měl být odstraněn z COBOL, ale byl obnoven před publikováním standardu. ISO později přijala aktualizovaný standard v roce 1978.

COBOL-85

V červnu 1978 byly zahájeny práce na revizi COBOL-74. Navrhovaný standard (běžně nazývaný COBOL-80) se výrazně lišil od předchozího, což vyvolalo obavy z nekompatibility a nákladů na konverzi. V lednu 1981 Joseph T. Brophy, Senior Vice-President Travelers Insurance, pohrozil žalobou na standardní komisi, protože nebyla směrem nahoru kompatibilní s COBOL-74. Pan Brophy popsal předchozí konverze jejich 40milionové kódové základny jako „neproduktivní“ a „naprosté plýtvání zdroji našich programátorů“. Později téhož roku Asociace pro zpracování dat (DPMA) uvedla, že je „důrazně proti“ novému standardu, přičemž uvedla „zakázané“ náklady na konverzi a vylepšení, která byla „vynucena uživateli“.

Během prvního období veřejné kontroly obdržela komise 2 200 odpovědí, z toho 1 700 negativních formulářů. Dalšími odpověďmi byly podrobné analýzy vlivu COBOL-80 na jejich systémy; náklady na konverzi byly předpovězeny na minimálně 50 centů na řádek kódu. Méně než tucet odpovědí bylo ve prospěch navrhované normy.

ISO TC97-SC5 instalovala v roce 1979 mezinárodní skupina COBOL Experts Group z iniciativy Wima Ebbinkhuijsena . Skupina se skládala z odborníků COBOL z mnoha zemí, včetně Spojených států. Jeho cílem bylo dosáhnout vzájemného porozumění a respektu mezi ANSI a zbytkem světa s ohledem na potřebu nových funkcí COBOL. Po třech letech změnila ISO status skupiny na formální pracovní skupinu: WG 4 COBOL . Skupina převzala primární vlastnictví a vývoj standardu COBOL, kde ANSI učinila většinu návrhů.

V roce 1983 stáhl DPMA svůj nesouhlas s normou s odvoláním na vstřícnost výboru k obavám veřejnosti. Ve stejném roce dospěla studie National Bureau of Standards k závěru, že navrhovaná norma by představovala jen málo problémů. O rok později vydal DEC VAX/VMS COBOL-80 a poznamenal, že konverze programů COBOL-74 představovala jen málo problémů. Nové EVALUATEprohlášení a inline PERFORMbyly obzvláště dobře přijaty a zlepšily produktivitu díky zjednodušenému toku řízení a ladění .

Druhá veřejná kontrola přinesla dalších 1 000 (zejména negativních) odpovědí, zatímco poslední jen 25, a do té doby bylo mnoho obav vyřešeno.

V roce 1985 přijala pracovní skupina ISO 4 tehdejší verzi navrhované normy ANSI, provedla několik změn a stanovila ji jako novou normu ISO COBOL 85. Byla zveřejněna koncem roku 1985.

Šedesát funkcí bylo změněno nebo zastaralé a 115 bylo přidáno, například:

  • Terminátory rozsahu ( END-IF, END-PERFORM, END-READatd.)
  • Vnořené podprogramy
  • CONTINUE, prohlášení o neprovedení operace
  • EVALUATE, příkaz switch
  • INITIALIZE, příkaz, který může nastavit skupiny dat na jejich výchozí hodnoty
  • Inline PERFORMsmyčková těla – dříve musela být těla smyček specifikována v samostatné proceduře
  • Úprava reference, která umožňuje přístup k podřetězcům
  • I/O stavové kódy.

Nová norma byla přijata všemi národními normalizačními orgány, včetně ANSI.

V roce 1989 a 1993 následovaly dva dodatky, z nichž první zaváděl vnitřní funkce a druhý poskytoval opravy.

COBOL 2002 a objektově orientovaný COBOL

V roce 1997 Gartner Group odhadovala, že existuje celkem 200 miliard linek COBOL, které provozovaly 80 % všech obchodních programů.

Počátkem 90. let začaly práce na přidání objektově orientace v další úplné revizi COBOL. Objektově orientované funkce byly převzaty z C++ a Smalltalk .

Původní odhad měl mít tuto revizi dokončenou do roku 1997 a návrh komise ISO (CD) byl k dispozici do roku 1997. Někteří prodejci (včetně Micro Focus , Fujitsu a IBM ) zavedli objektově orientovanou syntaxi založenou na návrhech úplné revize. Konečná schválená norma ISO byla schválena a zveřejněna koncem roku 2002.

Fujitsu/GTSoftware, Micro Focus a RainCode představily objektově orientované kompilátory COBOL zaměřené na .NET Framework .

Objevilo se mnoho dalších nových funkcí, z nichž mnohé byly v CODASYL COBOL Journal of Development od roku 1978 a propásly příležitost být zahrnuty do COBOL-85. Tyto další funkce zahrnovaly:

Pro standard byly zveřejněny tři opravy : dvě v roce 2006 a jedna v roce 2009.

COBOL 2014

V letech 2003 až 2009 byly vytvořeny tři technické zprávy popisující finalizaci objektů , zpracování XML a třídy kolekce pro COBOL.

COBOL 2002 trpěl špatnou podporou: žádný kompilátor zcela nepodporoval standard. Micro Focus zjistil, že to bylo kvůli nedostatečné poptávce uživatelů po nových funkcích a kvůli zrušení testovací sady NIST , která byla použita k testování shody kompilátoru. Rovněž bylo zjištěno, že proces standardizace je pomalý a nemá dostatečné zdroje.

COBOL 2014 obsahuje následující změny:

  • Přenosné aritmetické výsledky byly nahrazeny datovými typy IEEE 754
  • Hlavní funkce byly volitelné, jako je VALIDATEzařízení, zapisovač zpráv a zařízení pro manipulaci s obrazovkou
  • Přetížení metody
  • Tabulky dynamické kapacity (funkce vypuštěná z návrhu COBOL 2002)

Dědictví

Programy COBOL se používají globálně ve vládách a podnicích a běží na různých operačních systémech, jako jsou z/OS , z/VSE , VME , Unix , NonStop OS, OpenVMS a Windows . V roce 1997 skupina Gartner oznámila, že 80 % světového obchodu běží na COBOL s více než 200 miliardami řádků kódu a 5 miliardami dalších řádků, které se ročně napíší.

Blízko konce 20. století byl problém roku 2000 (Y2K) středem zájmu významného programovacího úsilí COBOL, někdy stejnými programátory, kteří navrhovali systémy před desetiletími. Zvláštní úroveň úsilí potřebného k opravě kódu COBOL byla přičítána velkému množství obchodně orientovaného COBOLu, protože obchodní aplikace intenzivně využívají data, a datovým polím s pevnou délkou. Některé studie připisují až „24 % nákladů na opravy softwaru Y2K společnosti Cobol“. Po úsilí o vyčištění těchto programů pro Y2K průzkum z roku 2003 zjistil, že mnohé z nich zůstaly v provozu. Autoři uvedli, že údaje z průzkumu naznačují „postupný pokles důležitosti COBOL ve vývoji aplikací během [následujících] 10 let, pokud ... nebude možné přijmout integraci s jinými jazyky a technologiemi“.

V letech 2006 a 2012 průzkumy Computerworld (352 čtenářů) zjistily, že více než 60 % organizací používá COBOL (více než C++ a Visual Basic .NET ) a že polovina z nich používá COBOL pro většinu jejich interního softwaru. 36 % manažerů uvedlo, že plánují migrovat z COBOL, a 25 % uvedlo, že by to chtěli, kdyby to bylo levnější. Místo toho některé podniky migrovaly své systémy z drahých sálových počítačů na levnější a modernější systémy, přičemž si zachovaly své programy COBOL.

Svědectví před Sněmovnou reprezentantů v roce 2016 naznačilo, že COBOL stále používá mnoho federálních agentur. Agentura Reuters v roce 2017 uvedla, že 43 % bankovních systémů stále používá COBOL s více než 220 miliardami řádků kódu COBOL.

Do roku 2019 se počet programátorů COBOL rychle zmenšoval kvůli odchodům do důchodu, což vedlo k hrozícímu nedostatku dovedností v obchodních a vládních organizacích, které stále používají systémy sálových počítačů pro zpracování velkých objemů transakcí. Snahy o přepisování systémů v novějších jazycích se ukázaly jako drahé a problematické, stejně jako outsourcing údržby kódu, a proto jsou obhajovány návrhy na zaškolení více lidí v COBOL.

Během pandemie COVID-19 a následného nárůstu nezaměstnanosti několik amerických států hlásilo nedostatek kvalifikovaných programátorů COBOL na podporu starších systémů používaných pro správu dávek v nezaměstnanosti. Mnoho z těchto systémů bylo před pandemií v procesu převodu na modernější programovací jazyky, ale tento proces byl pozastaven. Podobně i americká Internal Revenue Service přispěchala s opravou svého individuálního hlavního souboru založeného na COBOL, aby mohla vyplatit desítky milionů plateb nařízených zákonem o pomoci, pomoci a ekonomické bezpečnosti Coronavirus .

Funkce

Syntax

COBOL má syntaxi podobnou angličtině, která se používá k popisu téměř všeho v programu. Například podmínka může být vyjádřena jako   nebo výstižněji jako     nebo   . Složitější podmínky lze „zkrátit“ odstraněním opakovaných podmínek a proměnných. Například     lze zkrátit na . Pro podporu této anglické syntaxe má COBOL více než 300 klíčových slov . Některá ta klíčová slova jsou jednoduché alternativní nebo množné hláskování stejného slova, což zajišťuje více anglických prohlášení a klauzulí; např. klíčová slova a lze používat zaměnitelně, jako mohou a , a a . x IS GREATER THAN yx GREATER yx > ya > b AND a > c OR a = da > b AND c OR = dINOFTIMETIMESVALUEVALUES

Každý program COBOL se skládá ze čtyř základních lexikálních položek : slova, literály, obrázkové řetězce znaků (viz § klauzule PICTURE ) a oddělovače. Slova zahrnují vyhrazená slova a uživatelem definované identifikátory. Jsou dlouhé až 31 znaků a mohou obsahovat písmena, číslice, pomlčky a podtržítka. Literály zahrnují číslice (např. 12) a řetězce (např. 'Hello!'). Mezi oddělovače patří znak mezery a čárky a středníky, za nimiž následuje mezera.

Program COBOL je rozdělen do čtyř divizí: divize identifikace, divize prostředí, divize dat a divize procedur. Identifikační divize určuje název a typ zdrojového prvku a je místem, kde jsou specifikovány třídy a rozhraní. Divize prostředí specifikuje všechny funkce programu, které závisí na systému, na kterém běží, jako jsou soubory a znakové sady . Datové dělení se používá k deklaraci proměnných a parametrů . Rozdělení procedur obsahuje příkazy programu . Každý oddíl je dále rozdělen do oddílů, které se skládají z odstavců.

Metajazyk

Syntaxe COBOLu je obvykle popsána jedinečným metajazykem pomocí složených závorek, závorek, pruhů a podtržení. Metajazyk byl vyvinut pro původní specifikace COBOL. Ačkoli forma Backus-Naur v té době existovala, komise o ní neslyšela.

Prvky metajazyka COBOL
Živel Vzhled Funkce
Všechna hlavní města PŘÍKLAD Vyhrazené slovo
Podtržení PŘÍKLAD Vyhrazené slovo je povinné
Rovnátka { } Lze vybrat pouze jednu možnost
Závorky [] Může být vybrána nula nebo jedna možnost
Elipsa ... Předchozí prvek se může opakovat
Bary {| |} Lze vybrat jednu nebo více možností. Jakákoli možnost může být vybrána pouze jednou.
[| |] Lze vybrat nula nebo více možností. Jakákoli možnost může být vybrána pouze jednou.

Jako příklad zvažte následující popis příkazu ADD:

Tento popis umožňuje následující varianty:

ADD 1 TO x
ADD 1, a, b TO x ROUNDED, y, z ROUNDED

ADD a, b TO c
    ON SIZE ERROR
        DISPLAY "Error"
END-ADD

ADD a TO b
    NOT SIZE ERROR
        DISPLAY "No error"
    ON SIZE ERROR
        DISPLAY "Error"

Formát kódu

Program COBOL balíček děrných štítků, ze 70. let

Vrchol popularity COBOL se shodoval s érou děrovacích strojů a děrných štítků . Samotný program byl zapsán na děrné štítky, poté načten a zkompilován a data vložená do programu byla někdy také na kartách.

COBOL lze psát ve dvou formátech: pevný (výchozí) nebo bezplatný. V pevném formátu musí být kód zarovnán tak, aby se vešel do určitých oblastí (zdržení z používání děrných štítků). Do COBOL 2002 to byly:

název sloupec(y) Používání
Oblast pořadového čísla 1–6 Tato oblast, původně používaná pro čísla štítků/řádků (usnadňující mechanické třídění děrných štítků, aby byla zajištěna zamýšlená sekvence programového kódu po ruční úpravě/manipulaci), je kompilátorem ignorována
Oblast indikátoru 7 Zde jsou povoleny následující znaky:
  • *– řádek komentáře
  • /– Řádek komentáře, který bude vytištěn na nové stránce zdrojového výpisu
  • -– Pokračovací řádek, kde slova nebo literály z předchozího řádku pokračují
  • D– Linka povolena v režimu ladění, který je jinak ignorován
Oblast A 8–11 Obsahuje: DIVISIONa SECTIONzáhlaví procedur; Čísla úrovní 01 a 77 a deskriptory souborů/zpráv
Oblast B 12–72 Jakýkoli jiný kód není v oblasti A povolen
Oblast názvu programu 73– Historicky až do sloupce 80 u děrných štítků se používá k identifikaci programu nebo sekvence, do které štítek patří

V COBOL 2002 byly oblasti A a B sloučeny a vytvořily oblast program-text, která nyní končí ve sloupci definovaném implementátorem.

COBOL 2002 také zavedl kód volného formátu. Volně formátovaný kód lze umístit do libovolného sloupce souboru, jako v novějších programovacích jazycích. Komentáře jsou specifikovány pomocí *>, které lze umístit kamkoli a lze je také použít ve zdrojovém kódu pevného formátu. Pokračovací čáry nejsou přítomny a >>PAGEukazatel nahrazuje směrnice /.

Identifikační oddělení

Identifikační divize identifikuje následující kódovou entitu a obsahuje definici třídy nebo rozhraní.

Objektově orientované programování

Třídy a rozhraní jsou v COBOLu od roku 2002. Třídy mají tovární objekty, které obsahují metody tříd a proměnné, a objekty instance, které obsahují metody a proměnné instance. Dědičnost a rozhraní poskytují polymorfismus . Podpora pro obecné programování je poskytována prostřednictvím parametrizovaných tříd, které mohou být vytvořeny pro použití jakékoli třídy nebo rozhraní. Objekty jsou uloženy jako reference, které mohou být omezeny na určitý typ. Existují dva způsoby volání metody: INVOKEpříkaz, který funguje podobně jako CALL, nebo prostřednictvím inline vyvolání metody, což je analogie použití funkcí.

*> These are equivalent.
INVOKE my-class "foo" RETURNING var
MOVE my-class::"foo" TO var *> Inline method invocation

COBOL neposkytuje způsob, jak skrýt metody. Data třídy však lze skrýt tak, že je deklarujete bez klauzule PROPERTY, takže uživatel k nim nemá žádný přístup. V COBOL 2014 bylo přidáno přetížení metody .

Divize životního prostředí

Divize prostředí obsahuje konfigurační sekci a vstupně-výstupní sekci. Sekce konfigurace se používá ke specifikaci proměnných funkcí, jako jsou znaky měn, národní prostředí a znakové sady. Vstupně-výstupní sekce obsahuje informace týkající se souboru.

Soubory

COBOL podporuje tři formáty souborů neboli organizace : sekvenční, indexovaný a relativní. V sekvenčních souborech jsou záznamy souvislé a musí se procházet postupně , podobně jako propojený seznam . Indexované soubory mají jeden nebo více indexů, které umožňují náhodný přístup k záznamům a které lze podle nich třídit. Každý záznam musí mít jedinečný klíč , ale jiné, alternativní klíče záznamu nemusí být jedinečné. Implementace indexovaných souborů se mezi jednotlivými prodejci liší, ačkoli běžné implementace, jako je C-ISAM a VSAM , jsou založeny na ISAM společnosti IBM . další implementace jsou Record Management Services na OpenVMS a Enscribe na HPE NonStop (Tandem). Relativní soubory, stejně jako indexované soubory, mají jedinečný klíč záznamu, ale nemají alternativní klíče. Klíčem relativního záznamu je jeho pořadová pozice; například 10. záznam má klíč 10. To znamená, že vytvoření záznamu s klíčem 5 může vyžadovat vytvoření (prázdných) předchozích záznamů. Relativní soubory také umožňují sekvenční i náhodný přístup.

Běžným nestandardním rozšířením je řádková sekvenční organizace, používaná pro zpracování textových souborů. Záznamy v souboru jsou ukončeny novým řádkem a mohou mít různou délku.

Datové dělení

Datové členění je rozděleno do šesti sekcí, které deklarují různé položky: spisová sekce pro spisové záznamy; pracovní a paměťová sekce pro statické proměnné ; sekce lokálního úložiště pro automatické proměnné ; sekce propojení, pro parametry a návratovou hodnotu; část sestav a část obrazovky pro textová uživatelská rozhraní .

Agregovaná data

Datové položky v COBOL jsou deklarovány hierarchicky pomocí čísel úrovní, která indikují, zda je datová položka součástí jiné. Položka s vyšším číslem úrovně je podřízena položce s nižším číslem. Datové položky nejvyšší úrovně s číslem úrovně 1 se nazývají záznamy . Položky, které mají podřízená agregovaná data, se nazývají skupinové položky ; ty, které ne, se nazývají elementární položky . Čísla úrovní použitá k popisu standardních datových položek jsou mezi 1 a 49.

       01  some-record.                   *> Aggregate group record item
           05  num            PIC 9(10).  *> Elementary item
           05  the-date.                  *> Aggregate (sub)group record item
               10  the-year   PIC 9(4).   *> Elementary item
               10  the-month  PIC 99.     *> Elementary item
               10  the-day    PIC 99.     *> Elementary item

Ve výše uvedeném příkladu jsou elementární položka numa položka skupiny the-datepodřízené záznamu some-record, zatímco elementární položky the-year, the-month, a the-dayjsou součástí položky skupiny the-date.

Podřízené položky lze odlišit klíčovým slovem IN(nebo OF). Zvažte například výše uvedený příklad kódu spolu s následujícím příkladem:

       01  sale-date.
           05  the-year       PIC 9(4).
           05  the-month      PIC 99.
           05  the-day        PIC 99.

Názvy the-year, the-month, a the-dayjsou nejednoznačné samy o sobě, protože s těmito názvy je definována více než jedna datová položka. Pro specifikaci konkrétní datové položky, například jedné z položek obsažených ve sale-dateskupině, by programátor použil the-year IN sale-date(nebo ekvivalentní the-year OF sale-date). Tato syntaxe je podobná „tečkové notaci“, kterou podporuje většina současných jazyků.

Další datové úrovně

Číslo úrovně 66 se používá k deklaraci přeskupení dříve definovaných položek bez ohledu na to, jak jsou tyto položky strukturovány. Tato datová úroveň, na kterou se také odkazuje přidruženou RENAMESklauzulí , se používá zřídka a kolem roku 1988 se obvykle nacházela ve starých programech. Jeho schopnost ignorovat data hierarchické a logické struktury znamenala, že jeho použití nebylo doporučeno a mnoho instalací jeho použití zakazovalo.

       01  customer-record.
           05  cust-key            PIC X(10).
           05  cust-name.
               10  cust-first-name PIC X(30).
               10  cust-last-name  PIC X(30).
           05  cust-dob            PIC 9(8).
           05  cust-balance        PIC 9(7)V99.
           
       66  cust-personal-details   RENAMES cust-name THRU cust-dob.
       66  cust-all-details        RENAMES cust-name THRU cust-balance.

Číslo úrovně 77 označuje, že položka je samostatná a v takových situacích je ekvivalentní číslu úrovně 01. Například následující kód deklaruje dvě datové položky úrovně 77 a , což jsou neskupinové datové položky property-name, sales-regionkteré jsou nezávislé (nejsou jim podřízeny) na jakýchkoli jiných datových položkách:

       77  property-name      PIC X(80).
       77  sales-region       PIC 9(5).

Číslo úrovně 88 deklaruje název podmínky (tzv. úroveň 88), který je pravdivý, když jeho nadřazená datová položka obsahuje jednu z hodnot uvedených v jeho VALUEklauzuli. Například následující kód definuje dvě 88úrovňové položky podmínky název, které jsou pravdivé nebo nepravdivé v závislosti na aktuální hodnotě znakových dat datové wage-typepoložky. Když datová položka obsahuje hodnotu 'H', má název podmínky wage-is-hourlyhodnotu true, zatímco když obsahuje hodnotu 'S'nebo 'Y', má název podmínky hodnotu wage-is-yearlytrue. Pokud datová položka obsahuje nějakou jinou hodnotu, oba názvy podmínek jsou nepravdivé.

       01  wage-type          PIC X.
           88  wage-is-hourly VALUE "H".
           88  wage-is-yearly VALUE "S", "Y".

Typy dat

Standardní COBOL poskytuje následující datové typy:

Datový typ Vzor prohlášení Poznámky
Abecední PIC A(30) Může obsahovat pouze písmena nebo mezery.
Alfanumerický PIC X(30) Může obsahovat libovolné znaky.
Boolean PIC 1 USAGE BIT Data uložená ve tvaru 0s a 1s jako binární číslo.
Index USAGE INDEX Používá se k odkazování na prvky tabulky.
Národní PIC N(30) Podobné jako alfanumerické, ale používající rozšířenou znakovou sadu, např. UTF-8 .
Numerický PIC 9(5)V9(2) Obsahuje přesně 7 číslic (7=5+2). 'V' najde implicitní desetinné místo v čísle s pevnou čárkou.
Objekt USAGE OBJECT REFERENCE Může odkazovat buď na objekt nebo NULL.
Ukazatel USAGE POINTER

Typová bezpečnost je v COBOL variabilní. Číselná data se tiše převádějí mezi různými reprezentacemi a velikostmi a alfanumerická data lze umístit do libovolné datové položky, kterou lze uložit jako řetězec, včetně číselných a skupinových dat. Naproti tomu odkazy na objekty a ukazatele mohou být přiřazeny pouze z položek stejného typu a jejich hodnoty mohou být omezeny na určitý typ.

klauzule PICTURE

Klauzule PICTURE(nebo PIC) je řetězec znaků, z nichž každý představuje část datové položky a toho, co může obsahovat. Některé obrázkové znaky určují typ položky a kolik znaků nebo číslic zabírá v paměti. Například a 9označuje desetinnou číslici a a Soznačuje, že položka je podepsána . Další obrázkové znaky (nazývané znaky pro vkládání a úpravy ) určují, jak má být položka formátována. Série +znaků například definuje pozice znaků a také to, jak má být znak vedoucího znaku umístěn v datech konečného znaku; nečíselný znak zcela vpravo bude obsahovat znak položky, zatímco ostatní pozice znaků odpovídající a +nalevo od této pozice budou obsahovat mezeru. Opakované znaky lze přesněji specifikovat zadáním čísla v závorce za znakem obrázku; například 9(7)je ekvivalentní 9999999. Specifikace obrázků obsahující pouze číslice ( 9) a znaky ( S) definují čistě číselné datové položky, zatímco specifikace obrázků obsahující alfabetické ( A) nebo alfanumerické ( X) znaky definují alfanumerické datové položky. Přítomnost dalších formátovacích znaků definuje editované číselné nebo editované alfanumerické datové položky.

Příklady
PICTUREdoložka Hodnota v Hodnota ven
PIC 9(5) 100 00100
"Hello" "Hello"(toto je legální, ale vede to k nedefinovanému chování )
PIC +++++ -10 "  -10"(všimněte si úvodních mezer)
PIC 99/99/9(4) 30042003 "30/04/2003"
PIC *(4)9.99 100.50 "**100.50"
0 "****0.00"
PIC X(3)BX(3)BX(3) "ABCDEFGHI" "ABC DEF GHI"
klauzule USAGE

Klauzule USAGEdeklaruje formát, ve kterém jsou data uložena. V závislosti na typu dat může být buď doplněn, nebo může být použit místo klauzule PICTURE. I když jej lze použít k deklaraci ukazatelů a odkazů na objekty, je většinou zaměřen na specifikaci číselných typů. Tyto číselné formáty jsou:

  • Binární, kde minimální velikost je určena buď klauzulí PICTUREnebo klauzulí, USAGEjako je napřBINARY-LONG
  • USAGE COMPUTATIONAL, kde mohou být data uložena v jakémkoli formátu, který implementace poskytuje; často ekvivalentní  USAGE BINARY
  • USAGE DISPLAY, výchozí formát, kde jsou data uložena jako řetězec
  • Plovoucí desetinná čárka, buď ve formátu závislém na implementaci, nebo podle IEEE 754
  • USAGE NATIONAL, kde jsou data uložena jako řetězec pomocí rozšířené znakové sady
  • USAGE PACKED-DECIMAL, kde jsou data uložena v nejmenším možném desítkovém formátu (typicky sbalené binárně kódované desítkové )

Autor zprávy

Report Writer je deklarativní nástroj pro vytváření reportů. Programátor potřebuje pouze specifikovat rozvržení sestavy a data potřebná k jejímu vytvoření, čímž je osvobodí od nutnosti psát kód, aby zvládl věci, jako jsou konce stránek, formátování dat a nadpisy a základy.

Sestavy jsou spojeny se soubory sestav, což jsou soubory, do kterých lze zapisovat pouze pomocí příkazů zapisovače sestav.

       FD  report-out REPORT sales-report.

Každá sestava je definována v sekci sestav datové divize. Zpráva je rozdělena do skupin zpráv, které definují záhlaví, základy a podrobnosti zprávy. Sestavy obcházejí hierarchické přerušení řízení . K přerušení řízení dochází, když klíčová proměnná změní svou hodnotu; například při vytváření sestavy s podrobnostmi o zákaznických objednávkách může dojít k přerušení kontroly, když program dosáhne objednávky jiného zákazníka. Zde je příklad popisu sestavy pro sestavu, která uvádí tržby prodejce a která varuje před neplatnými záznamy:

       RD  sales-report
           PAGE LIMITS 60 LINES
           FIRST DETAIL 3
           CONTROLS seller-name.

       01  TYPE PAGE HEADING.
           03  COL 1                    VALUE "Sales Report".
           03  COL 74                   VALUE "Page".
           03  COL 79                   PIC Z9 SOURCE PAGE-COUNTER.

       01  sales-on-day TYPE DETAIL, LINE + 1.
           03  COL 3                    VALUE "Sales on".
           03  COL 12                   PIC 99/99/9999 SOURCE sales-date.
           03  COL 21                   VALUE "were".
           03  COL 26                   PIC $$$$9.99 SOURCE sales-amount.

       01  invalid-sales TYPE DETAIL, LINE + 1.
           03  COL 3                    VALUE "INVALID RECORD:".
           03  COL 19                   PIC X(34) SOURCE sales-record.

       01  TYPE CONTROL HEADING seller-name, LINE + 2.
           03  COL 1                    VALUE "Seller:".
           03  COL 9                    PIC X(30) SOURCE seller-name.

Výše uvedený popis sestavy popisuje následující rozvržení:

Sales Report                                                             Page  1

Seller: Howard Bromberg
  Sales on 10/12/2008 were $1000.00
  Sales on 12/12/2008 were    $0.00
  Sales on 13/12/2008 were   $31.47
  INVALID RECORD: Howard Bromberg             XXXXYY

Seller: Howard Discount
...
Sales Report                                                            Page 12

  Sales on 08/05/2014 were  $543.98
  INVALID RECORD: William Selden      12O52014FOOFOO
  Sales on 30/05/2014 were    $0.00

Zapisovač sestav řídí čtyři příkazy: INITIATE, který připravuje zapisovač sestav k tisku; GENERATE, který vytiskne skupinu sestav; SUPPRESS, která potlačí tisk skupiny sestav; a TERMINATE, která ukončí zpracování zprávy. Ve výše uvedeném příkladu zprávy o prodeji může rozdělení procedur vypadat takto:

           OPEN INPUT sales, OUTPUT report-out
           INITIATE sales-report
 
           PERFORM UNTIL 1 <> 1
               READ sales
                   AT END
                       EXIT PERFORM
               END-READ
 
               VALIDATE sales-record
               IF valid-record
                   GENERATE sales-on-day
               ELSE
                   GENERATE invalid-sales
               END-IF
           END-PERFORM
 
           TERMINATE sales-report
           CLOSE sales, report-out
           .

Použití nástroje Report Writer má tendenci se značně lišit; některé organizace jej využívají ve velké míře a některé vůbec. Implementace Report Writer se navíc lišily v kvalitě, přičemž ty na nižším konci někdy za běhu využívaly nadměrné množství paměti.

Dělení procedur

Postupy

Oddíly a odstavce v dělení procedur (souhrnně nazývané procedury) lze použít jako štítky a jako jednoduché podprogramy . Na rozdíl od jiných oddílů nemusí být odstavce v oddílech.

Spouštění probíhá procedurami programu, dokud není ukončeno. Pro použití procedur jako podprogramů PERFORMse používá sloveso.

Příkaz PERFORMponěkud připomíná volání procedury v novějších jazycích v tom smyslu, že provádění se vrací do kódu následujícího za příkazem PERFORMna konci volaného kódu; neposkytuje však mechanismus pro předávání parametrů nebo pro vracení výsledné hodnoty. Pokud je podprogram vyvolán pomocí jednoduchého příkazu, jako je , pak se řízení vrátí na konci volané procedury. Je však neobvyklý v tom, že jej lze použít k volání rozsahu zahrnujícího sekvenci několika sousedních procedur. To se provádí pomocí konstrukce: PERFORM subroutinePERFORMPERFORM sub-1 THRU sub-n

PROCEDURE so-and-so.
    PERFORM ALPHA
    PERFORM ALPHA THRU GAMMA
    STOP RUN.
ALPHA.
    DISPLAY 'A'.
BETA.
    DISPLAY 'B'.
GAMMA.
    DISPLAY 'C'.

Výstupem tohoto programu bude: "AAB C".

PERFORMse také liší od konvenčních volání procedur v tom, že zde není, alespoň tradičně, žádná představa o zásobníku volání. V důsledku toho jsou možná vnořená vyvolání (sekvence edovaného kódu PERFORMmůže provést PERFORMpříkaz sám), ale vyžaduje zvláštní péči, pokud jsou části stejného kódu prováděny oběma voláními. Problém nastává, když kód ve vnitřním vyvolání dosáhne výstupního bodu vnějšího vyvolání. Formálněji, pokud řízení prochází výstupním bodem vyvolání, PERFORMkteré bylo voláno dříve, ale ještě nebylo dokončeno, standard COBOL 2002 stanoví, že chování není definováno .

Důvodem je, že COBOL, spíše než "zpáteční adresa", pracuje s tím, co lze nazvat pokračovací adresou. Když řídicí tok dosáhne konce jakékoli procedury, vyhledá se adresa pokračování a řízení se přenese na tuto adresu. Před spuštěním programu je adresa pokračování pro každou proceduru inicializována na počáteční adresu procedury, která následuje v textu programu, takže pokud nedojde k žádným PERFORMpříkazům, řízení probíhá programem shora dolů. Ale když se PERFORMpříkaz provede, upraví adresu pokračování volané procedury (nebo poslední procedury volaného rozsahu, pokud PERFORM THRUbyla použita), takže se ovládací prvek na konci vrátí na místo volání. Původní hodnota se uloží a poté se obnoví, ale existuje pouze jedna paměťová pozice. Pokud dvě vnořená vyvolání fungují na překrývajícím se kódu, mohou si vzájemně zasahovat do správy pokračovací adresy několika způsoby.

Následující příklad (převzatý z Veerman & Verhoeven 2006 ) ilustruje problém:

LABEL1.
    DISPLAY '1'
    PERFORM LABEL2 THRU LABEL3
    STOP RUN.
LABEL2.
    DISPLAY '2'
    PERFORM LABEL3 THRU LABEL4.
LABEL3.
    DISPLAY '3'.
LABEL4.
    DISPLAY '4'.

Dalo by se očekávat, že výstup tohoto programu bude "1 2 3 4 3": Po zobrazení "2" druhý PERFORMzpůsobí, že se zobrazí "3" a "4" a pak první vyvolání pokračuje s "3" . V tradičních implementacích COBOL tomu tak není. První PERFORMpříkaz spíše nastavuje adresu pokračování na konec, LABEL3takže skočí zpět na stránku volání uvnitř LABEL1. Druhý PERFORMpříkaz nastavuje návrat na konec, LABEL4ale nemění adresu pokračování LABEL3, přičemž očekává, že to bude výchozí pokračování. Když tedy vnitřní vyvolání dorazí na konec LABEL3, skočí zpět na vnější PERFORMpříkaz a program přestane tisknout pouze "1 2 3". Na druhou stranu v některých implementacích COBOL, jako je open-source kompilátor TinyCOBOL, se tyto dva PERFORMpříkazy navzájem neovlivňují a výstup je skutečně „1 2 3 4 3“. Proto je chování v takových případech nejen (možná) překvapivé, ale také není přenosné.

Zvláštním důsledkem tohoto omezení je, že jej PERFORMnelze použít k zápisu rekurzivního kódu. Další jednoduchý příklad pro ilustraci (mírně zjednodušený z Veerman & Verhoeven 2006 ):

    MOVE 1 TO A
    PERFORM LABEL
    STOP RUN.
LABEL.
    DISPLAY A
    IF A < 3
        ADD 1 TO A
        PERFORM LABEL
    END-IF
    DISPLAY 'END'.

Dalo by se očekávat, že výstup je "1 2 3 END END END" a ve skutečnosti to některé kompilátory COBOL vytvoří. Ale jiné kompilátory, jako je IBM COBOL, vytvoří kód, který vytiskne "1 2 3 END END END END ..." a tak dále, přičemž tiskne "END" znovu a znovu v nekonečné smyčce. Protože je k dispozici omezený prostor pro uložení adres pokračování zálohování, zálohy se v průběhu rekurzivních vyvolání přepisují a vše, co lze obnovit, je skok zpět na DISPLAY 'END'.

Výpisy

COBOL 2014 má 47 příkazů (nazývaných také slovesa ), které lze seskupit do následujících širokých kategorií: tok řízení, I/O, manipulace s daty a zapisovač sestav. Příkazy pro vytváření zpráv jsou uvedeny v části pro vytváření zpráv .

Řídit tok

Podmíněné příkazy COBOL jsou IFa EVALUATE. EVALUATEje příkaz podobný přepínači s přidanou schopností vyhodnocení více hodnot a podmínek. To lze použít k implementaci rozhodovacích tabulek . K ovládání CNC soustruhu lze například použít následující :

EVALUATE TRUE ALSO desired-speed ALSO current-speed
    WHEN lid-closed ALSO min-speed THRU max-speed ALSO LESS THAN desired-speed
        PERFORM speed-up-machine
    WHEN lid-closed ALSO min-speed THRU max-speed ALSO GREATER THAN desired-speed
        PERFORM slow-down-machine
    WHEN lid-open ALSO ANY ALSO NOT ZERO
        PERFORM emergency-stop
    WHEN OTHER
        CONTINUE
END-EVALUATE

Příkaz PERFORMse používá k definování smyček, které se provádějí, dokud není podmínka pravdivá (ne když je pravdivá, což je běžnější v jiných jazycích). Používá se také k volání procedur nebo rozsahů procedur ( další podrobnosti viz sekce procedury ). CALLa INVOKEvolání podprogramů a metod. Název podprogramu/metody je obsažen v řetězci, který může být literál nebo datová položka. Parametry lze předávat odkazem , obsahem (kde se kopie předává odkazem) nebo hodnotou (ale pouze v případě, že je k dispozici prototyp ). CANCELuvolní podprogramy z paměti. GO TOzpůsobí, že program skočí na zadanou proceduru.

Příkaz GOBACKje příkaz return a STOPpříkaz zastaví program. Příkaz EXITmá šest různých formátů: lze jej použít jako příkaz return, příkaz break , příkaz continue , značku konce nebo pro opuštění procedury.

Výjimky jsou vyvolány příkazem RAISEa zachyceny pomocí handleru nebo deklarativního , definovaného v DECLARATIVESčásti dělení procedury. Deklarace jsou sekce začínající příkazem USE, který specifikuje chyby, které je třeba zpracovat. Výjimkou mohou být jména nebo objekty. RESUMEse používá v deklarativu ke skoku na příkaz za příkazem, který vyvolal výjimku, nebo na proceduru mimo DECLARATIVES. Na rozdíl od jiných jazyků nemusí nezachycené výjimky program ukončit a program může pokračovat bez ovlivnění.

I/O

Soubor I/O je obsluhován samopopisujícími příkazy OPEN, CLOSE, READ, a WRITEspolu s dalšími třemi: REWRITE, který aktualizuje záznam; START, který vybírá následné záznamy k přístupu nalezením záznamu s určitým klíčem; a UNLOCK, které uvolní zámek na posledním záznamu.

Uživatelská interakce se provádí pomocí ACCEPTa DISPLAY.

Manipulace s daty

Následující slovesa manipulují s daty:

  • INITIALIZE, který nastaví datové položky na jejich výchozí hodnoty.
  • MOVE, který přiřazuje hodnoty datovým položkám ; MOVE CORRESPONDING přiřadí odpovídající pole se stejným názvem .
  • SET, který má 15 formátů: mimo jiné může upravovat indexy, přiřazovat odkazy na objekty a měnit kapacity tabulek.
  • ADD, SUBTRACT, MULTIPLY, DIVIDE, a COMPUTE, které zpracovávají aritmetiku (s COMPUTEpřiřazením výsledku vzorce k proměnné).
  • ALLOCATEa FREE, které zpracovávají dynamickou paměť .
  • VALIDATE, která ověřuje a distribuuje data, jak je uvedeno v popisu položky v datové divizi.
  • STRINGa UNSTRING, které spojují a rozdělují řetězce .
  • INSPECT, který sčítá nebo nahrazuje instance zadaných podřetězců v řetězci.
  • SEARCH, který v tabulce hledá první položku splňující podmínku.

Soubory a tabulky se třídí pomocí SORTa MERGEsloveso slučuje a třídí soubory. Sloveso RELEASEposkytuje záznamy k řazení a RETURNzískává setříděné záznamy v pořadí.

Ukončení rozsahu

Některé příkazy, například IFa READ, mohou samy obsahovat příkazy. Takové příkazy mohou být ukončeny dvěma způsoby: tečkou ( implicitní ukončení ), která ukončí všechny obsažené neukončené příkazy, nebo terminátorem rozsahu, který ukončí nejbližší odpovídající otevřený příkaz.

*> Terminator period ("implicit termination")
IF invalid-record
    IF no-more-records
        NEXT SENTENCE
    ELSE
        READ record-file
            AT END SET no-more-records TO TRUE.

*> Scope terminators ("explicit termination")
IF invalid-record
    IF no-more-records
        CONTINUE
    ELSE
        READ record-file
            AT END SET no-more-records TO TRUE
        END-READ
    END-IF
END-IF

Vnořené příkazy ukončené tečkou jsou častým zdrojem chyb. Prozkoumejte například následující kód:

IF x
    DISPLAY y.
    DISPLAY z.

Zde je záměrem zobrazit ya zzda je podmínka xpravdivá. Zobrazí se však zbez ohledu na hodnotu, xprotože IFpříkaz je ukončen chybnou tečkou za . DISPLAY y

Další chyba je výsledkem problému s visícím else , kdy se dva IFpříkazy mohou spojit s ELSE.

IF x
    IF y
        DISPLAY a
ELSE
    DISPLAY b.

Ve výše uvedeném fragmentu se ELSEasociuje s     příkazem namísto příkazu     , což způsobuje chybu. Před zavedením explicitních terminátorů rozsahu by jeho zamezení vyžadovalo     umístění za vnitřní . IF yIF xELSE NEXT SENTENCEIF

Samomodifikační kód

Původní (1959) specifikace COBOL podporovala nechvalně známý     výrok, pro který mnoho kompilátorů vygenerovalo samomodifikující kód . a jsou označení procedur a místo toho znamená   jediný     příkaz v proceduře provedený po takovém příkazu   . Mnoho kompilátorů jej stále podporuje, ale ve standardu COBOL 1985 byl považován za zastaralý a v roce 2002 odstraněn.ALTER X TO PROCEED TO YXYGO TOXALTERGO TO Y

Toto ALTERprohlášení bylo špatně hodnoceno, protože podkopalo „místnost kontextu“ a znesnadnilo pochopení celkové logiky programu. Jak napsal autor učebnice Daniel D. McCracken v roce 1976, kdy „někdo, kdo nikdy předtím program neviděl, se s ním musí co nejrychleji seznámit, někdy pod kritickým časovým tlakem, protože program selhal... pohled na GO TO prohlášení v odstavci samo o sobě, které signalizuje existenci neznámého počtu příkazů ALTER na neznámých místech v programu, vyvolává strach v srdci nejstatečnějšího programátora."

Ahoj světe

Program " Ahoj, světe " v COBOL:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. hello-world.
       PROCEDURE DIVISION.
           DISPLAY "Hello, world!"
           .

Když zaznělo – dnes už slavné – "Ahoj, světe!" příklad programu v The C Programming Language byl poprvé publikován v roce 1978, podobný ukázkový program COBOL pro sálový počítač by byl předložen prostřednictvím JCL , velmi pravděpodobně pomocí čtečky děrných štítků a 80 sloupcových děrných štítků. Níže uvedený výpis s prázdnou DATA DIVISION byl testován pomocí Linuxu a emulátoru System/370 Hercules se systémem MVS 3.8J. JCL, napsaný v červenci 2015, je odvozen z výukových programů a ukázek Hercules, které hostil Jay Moseley. V souladu s programováním COBOL té doby se HELLO, WORLD zobrazuje velkými písmeny.

//COBUCLG  JOB (001),'COBOL BASE TEST',                                 00010000
//             CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1)                        00020000
//BASETEST EXEC COBUCLG                                                 00030000
//COB.SYSIN DD *                                                        00040000
 00000* VALIDATION OF BASE COBOL INSTALL                                00050000
 01000 IDENTIFICATION DIVISION.                                         00060000
 01100 PROGRAM-ID. 'HELLO'.                                             00070000
 02000 ENVIRONMENT DIVISION.                                            00080000
 02100 CONFIGURATION SECTION.                                           00090000
 02110 SOURCE-COMPUTER.  GNULINUX.                                      00100000
 02120 OBJECT-COMPUTER.  HERCULES.                                      00110000
 02200 SPECIAL-NAMES.                                                   00120000
 02210     CONSOLE IS CONSL.                                            00130000
 03000 DATA DIVISION.                                                   00140000
 04000 PROCEDURE DIVISION.                                              00150000
 04100 00-MAIN.                                                         00160000
 04110     DISPLAY 'HELLO, WORLD' UPON CONSL.                           00170000
 04900     STOP RUN.                                                    00180000
//LKED.SYSLIB DD DSNAME=SYS1.COBLIB,DISP=SHR                            00190000
//            DD DSNAME=SYS1.LINKLIB,DISP=SHR                           00200000
//GO.SYSPRINT DD SYSOUT=A                                               00210000
//                                                                      00220000

Po odeslání JCL se na konzole MVS zobrazilo:

    19.52.48 JOB    3  $HASP100 COBUCLG  ON READER1     COBOL BASE TEST
    19.52.48 JOB    3  IEF677I WARNING MESSAGE(S) FOR JOB COBUCLG  ISSUED
    19.52.48 JOB    3  $HASP373 COBUCLG  STARTED - INIT 1 - CLASS A - SYS BSP1
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSLIB   DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEFACTRT - Stepname  Procstep  Program   Retcode
    19.52.48 JOB    3  COBUCLG    BASETEST  COB       IKFCBL00  RC= 0000
    19.52.48 JOB    3  COBUCLG    BASETEST  LKED      IEWL      RC= 0000
    19.52.48 JOB    3  +HELLO, WORLD
    19.52.48 JOB    3  COBUCLG    BASETEST  GO        PGM=*.DD  RC= 0000
    19.52.48 JOB    3  $HASP395 COBUCLG  ENDED

Řádek 10 výše uvedeného výpisu konzole je pro efekt zvýrazněn, zvýraznění není součástí skutečného výstupu konzole .

Přidružený výpis kompilátoru vygeneroval přes čtyři stránky technických podrobností a informací o běhu úlohy pro jeden řádek výstupu ze 14 řádků COBOL.

Recepce

Nedostatek struktury

V 70. letech 20. století bylo přijetí paradigmatu strukturovaného programování stále více rozšířené. Edsger Dijkstra , přední počítačový vědec, napsal dopis editorovi Communications of the ACM , publikovaném v roce 1975, nazvaný „Jak říkáme pravdy, které by mohly bolet?“, ve kterém kritizoval COBOL a několik dalších současných jazyků; s poznámkou, že „použití COBOL ochromuje mysl“.

Ve zveřejněném nesouhlasu s Dijkstrovými poznámkami počítačový vědec Howard E. Tompkins tvrdil, že nestrukturovaný COBOL byl „napsán programátory, kteří nikdy neměli výhodu strukturovaného COBOLu, dobře se učili“, a tvrdil, že jde především o školení.

Jednou z příčin špagetového kódu bylo GO TOprohlášení. Pokusy odstranit GO TOs z kódu COBOL však vedly ke spletitým programům a snížené kvalitě kódu. GO TOs byly z velké části nahrazeny prohlášením PERFORMa procedurami, které podporovaly modulární programování a umožňovaly snadný přístup k výkonným zařízením pro vytváření smyček. Dalo by se však PERFORMpoužít pouze s procedurami, takže těla smyček nebyla umístěna tam, kde byla použita, což ztěžovalo pochopení programů.

Programy COBOL byly nechvalně známé tím, že byly monolitické a postrádaly modularizaci. Kód COBOL mohl být modularizován pouze pomocí procedur, které byly shledány jako nedostatečné pro velké systémy. Nebylo možné omezit přístup k datům, což znamená, že procedura mohla přistupovat a upravovat jakoukoli datovou položku. Navíc neexistoval způsob, jak předat parametry postupu, což Jean Sammet považoval za největší chybu výboru.

Další komplikace pramenila ze schopnosti PERFORM THRUzadané sekvence postupů. To znamenalo, že řízení mohlo přeskakovat a vracet se z jakékoli procedury, což vytvořilo spletitý tok řízení a umožnilo programátorovi porušit pravidlo jediného vstupu s jedním výstupem .

Tato situace se zlepšila, protože COBOL přijal více funkcí. COBOL-74 přidal podprogramy, které daly programátorům možnost ovládat data, ke kterým měla každá část programu přístup. COBOL-85 pak přidal vnořené podprogramy, což umožnilo programátorům skrýt podprogramy. Další kontrola nad daty a kódem přišla v roce 2002, kdy bylo zahrnuto objektově orientované programování, uživatelsky definované funkce a uživatelsky definované datové typy.

Nicméně mnoho důležitého staršího softwaru COBOL používá nestrukturovaný kód, který se stal prakticky neudržitelným. Může být příliš riskantní a nákladné upravovat i jednoduchou část kódu, protože může být použit z neznámých míst neznámým způsobem.

Problémy s kompatibilitou

COBOL byl zamýšlen jako vysoce přenosný, „běžný“ jazyk. Do roku 2001 však bylo vytvořeno kolem 300 dialektů. Jedním ze zdrojů dialektů byl samotný standard: standard z roku 1974 se skládal z jednoho povinného jádra a jedenácti funkčních modulů, z nichž každý obsahoval dvě nebo tři úrovně podpory. To umožnilo 104 976 možných variant.

COBOL-85 nebyl plně kompatibilní s dřívějšími verzemi a jeho vývoj byl kontroverzní. Joseph T. Brophy, CIO Travelers Insurance , stál v čele snahy informovat uživatele COBOL o velkých nákladech na přeprogramování implementace nového standardu. V důsledku toho výbor ANSI COBOL obdržel více než 2 200 dopisů od veřejnosti, většinou negativních, požadujících, aby výbor provedl změny. Na druhou stranu se předpokládalo, že konverze na COBOL-85 zvýší produktivitu v budoucích letech, a tím ospravedlní náklady na konverzi.

Podrobná syntaxe

COBOL: /koh′bol/, n.

Slabý, upovídaný a ochablý jazyk, který používají brusiči kódu k nudným bezduchým věcem na dinosauřích sálových počítačích. [...] Jeho samotné jméno je zřídkakdy vysloveno bez rituálních projevů znechucení nebo hrůzy.

Soubor žargonu 4.4.8.

Syntaxe COBOLu byla často kritizována za svou upovídanost. Zastánci říkají, že toto bylo zamýšleno k tomu, aby se kód sám dokumentoval , což usnadnilo údržbu programu. COBOL byl také zamýšlen tak, aby se dal programátorům snadno naučit a používat, a přitom byl stále čitelný pro netechnické pracovníky, jako jsou manažeři.

Touha po čitelnosti vedla k použití syntaxe a strukturních prvků podobných angličtině, jako jsou podstatná jména, slovesa, věty, věty, oddíly a dělení. Přesto se v roce 1984 správci programů COBOL snažili vypořádat s „nesrozumitelným“ kódem a hlavní změny v COBOL-85 měly pomoci usnadnit údržbu.

Jean Sammet, členka komise krátkého dosahu, poznamenala, že „byli učiněni jen malé pokusy vyjít vstříc profesionálním programátorům, ve skutečnosti lidé, jejichž hlavním zájmem je programování, bývají s COBOLem velmi nespokojeni“, což přičítala podrobné syntaxi COBOLu.

Izolace od komunity informatiky

Komunita COBOL byla vždy izolována od komunity počítačových věd. Na návrhu COBOL se nepodíleli žádní akademičtí informatici: všichni členové výboru pocházeli z obchodu nebo vlády. Počítačoví vědci se v té době více zajímali o obory jako numerická analýza, fyzika a systémové programování než o komerční problémy se zpracováním souborů, které vývoj COBOL řešil. Jean Sammet připisoval neoblíbenost COBOLu počáteční „snobské reakci“ kvůli jeho neeleganci, nedostatku vlivných počítačových vědců účastnících se procesu návrhu a pohrdání zpracováním obchodních dat. Specifikace COBOL používala k definování své syntaxe jedinečnou „notaci“ nebo metajazyk , spíše než novou formu Backus–Naur , o které výbor nevěděl. To vedlo k „tvrdé“ kritice.

Akademický svět má tendenci považovat COBOL za upovídaný, neohrabaný a nevkusný a snaží se ho ignorovat, ačkoliv na světě je pravděpodobně více COBOL programů a programátorů než pro FORTRAN, ALGOL a PL/I dohromady. Výuku COBOL většinou poskytují pouze školy s bezprostředním odborným zaměřením.

Richard Conway a David Gries , 1973

Později COBOL trpěl nedostatkem materiálu, který jej pokrýval; trvalo to až do roku 1963, než se objevily úvodní knihy (s Richardem D. Irwinem, který v roce 1966 vydal vysokoškolskou učebnici COBOL). V roce 1985 bylo v Kongresové knihovně dvakrát tolik knih na FORTRAN a čtyřikrát tolik na BASIC než na COBOL . Univerzitní profesoři vyučovali modernější, nejmodernější jazyky a techniky místo COBOL, o kterém se říkalo, že má „obchodní“ povahu. Donald Nelson, předseda výboru CODASYL COBOL, v roce 1984 řekl, že „akademici... nenávidí COBOL“ a že absolventi počítačových věd „do nich vrazili ‚nenávist COBOL‘.

V polovině 80. let 20. století také došlo k výraznému ústupku vůči COBOLu v obchodní komunitě ze strany uživatelů jiných jazyků, například FORTRAN nebo assembleru , z čehož vyplývá, že COBOL lze používat pouze pro nenáročné problémy.

V roce 2003 se COBOL objevil v 80 % osnov informačních systémů ve Spojených státech, stejný podíl jako C++ a Java . O deset let později průzkum společnosti Micro Focus zjistil, že 20 % univerzitních akademiků si myslí, že COBOL je zastaralý nebo mrtvý, a že 55 % věří, že jejich studenti si myslí, že COBOL je zastaralý nebo mrtvý. Stejný průzkum také zjistil, že pouze 25 % akademiků mělo ve svých osnovách programování COBOL, i když 60 % si myslelo, že by ho měli učit.

Obavy z procesu návrhu

O kompetenci normalizačního výboru se objevily pochybnosti. Krátkodobý člen výboru Howard Bromberg řekl, že nad vývojovým procesem je „malá kontrola“ a že je „sužován diskontinuitou personálu a... nedostatkem talentů“. Jean Sammet a Jerome Garfunkel také poznamenali, že změny zavedené v jedné revizi standardu budou vráceny v další, a to jak kvůli změnám v tom, kdo byl ve standardním výboru, tak kvůli objektivním důkazům.

Standardy COBOL opakovaně trpěly zpožděním: COBOL-85 dorazil o pět let později, než se očekávalo, COBOL 2002 se opozdil o pět let a COBOL 2014 o šest let. Aby se zabránilo zpožděním, standardní výbor povolil vytvoření volitelných dodatků, které by přidaly funkce rychleji než čekáním na další standardní revizi. Někteří členové komise však vyjádřili obavy z nekompatibility mezi implementacemi a častými úpravami normy.

Vlivy na jiné jazyky

Datové struktury COBOL ovlivnily následující programovací jazyky. Jeho záznam a struktura souborů ovlivnily PL/I a Pascal a REDEFINESklauzule byla předchůdcem Pascalových variant záznamů. Explicitní definice struktury souborů předcházely vývoji systémů správy databází a agregovaná data byla významným pokrokem oproti polím Fortran.

PICTUREdeklarace údajů byly začleněny do PL/I s drobnými změnami.

Zařízení COBOL COPY, ačkoli je považováno za „primitivní“, ovlivnilo vývoj směrnic pro začlenění .

Zaměření na přenositelnost a standardizaci znamenalo, že programy napsané v COBOL mohly být přenosné a usnadnily rozšíření jazyka na širokou škálu hardwarových platforem a operačních systémů. Dobře definovaná struktura divizí navíc omezuje definici externích odkazů na divizi Environment, což zjednodušuje zejména změny platformy.

Viz také

Poznámky

Reference

Citace

Prameny

externí odkazy