Aller au contenu

Cobol

Un article de Wikipédia, l'encyclopédie libre.

Cobol
Image illustrative de l’article Cobol

Date de première version 1959
Paradigme Impératif,procédural,structuré
Auteur Grace Hopper
Développeurs Short Range Committee
Dernière version (2023-01)
Normes ISO/IEC 1989:2023
Influencé par FLOW-MATIC,COMTRAN(en)
Extension de fichier cbl, cob et cpyVoir et modifier les données sur Wikidata

Cobolest unlangage de programmationcréé en1959.Son nom est l’acronyme deCOmmon Business Oriented Languagequi révèle sa vocation originelle: être un langage commun pour la programmation d'applications de gestion. Aujourd'hui, il est surtout utilisé dans les secteurs de la banque, des assurances, des grandes administrations[2].

Histoire et spécifications

[modifier|modifier le code]

Le Cobol a initialement été créé en1959(officiellement le 18 septembre 1959)[3]par leShort Range Committee,un des trois comités proposés à une rencontre auPentagoneen mai 1959 organisée par Charles Phillips du département de la défense desÉtats-Unis.Le comité a été formé pour recommander une approche à court terme pour un langage commun, indépendant des constructeurs, pour les applications de gestion de l'administration américaine. Il était constitué de membres représentant six constructeurs d'ordinateurset trois agences gouvernementales. Les six constructeurs informatiques étaientBurroughs Corporation,IBM,Minneapolis-Honeywell,RCA,Sperry Rand,etSylvania Electric Products.Les trois agences du gouvernement étaient leUS Air Force,leDavid Taylor Model Basin,et l’Institut national des standards.Ce comité était présidé par un membre duNBS.Des comités à moyen et long terme ont également été proposés au Pentagone. En revanche, même si le premier a été fondé, il n'a jamais été opérationnel, et le dernier n'a jamais été fondé. En fin de compte, un sous-comité duShort Range Committeea été formé avec six membres:

Ce sous-comité a terminé les spécifications de Cobol fin 1959. Elles étaient largement inspirées par le langageFLOW-MATICinventé parGrace Hopper,surnommée « la mère du langage Cobol », et par le langage COMTRAN d'IBM, inventé parBob Bemer.

Ce langage ayant été conçu aux débuts de l'informatique, sa relative complexité rebute nombre de programmeurs de notre époque, ce qui lui a valu deux interprétations ironiques de son acronyme:Compiles Only Because Of Luck(fonctionne uniquement par chance) etCompletely Obsolete Business Oriented Language(Langage orienté gestion complètement obsolète)[4].

Histoire des standards Cobol

[modifier|modifier le code]

Ces spécifications furent approuvées par le comité complet, puis par le comité exécutif (CODASYL) en janvier1960et envoyées au bureau d'impression du gouvernement qui les édita et imprima en les nommant Cobol 60. Le langage fut développé en moins de six mois de travail, et il est toujours utilisé aujourd'hui, après plusieurs révisions standardisées par l'ANSIet l'ISO,dont

Traits principaux

[modifier|modifier le code]

La totalité des variables et des structures de données utilisées sont définies au début du programme, avant la division procédurale contenant les instructions. La manière dont sont définies les variables, c'est-à-dire les espaces de stockage temporaire, est très particulière. C'est une structure arborescente définie par une suite de lignes de code. Chaque ligne commence par un nombre qui définit le niveau d'imbrication du champ ou du groupe de variables.

Par exemple:

01NomPrenom.
05PrenomPIC X(20).
05NomPIC X(20).

qui définit une structureNomPrenomcontenant les champsPrenometNomsur 20 caractères.

Autre exemple:

01CodePostal.
02DepartPIC 99.
02CommunePIC 999.

qui définit un code postal de France. Lorsqu'une valeur est assignée àCodePostal,cette définition permet l'assignation automatique du code de département à la variableDepartsans aucune autre opération de l'utilisateur.

Comme défini dans la spécification originale, Cobol possédait déjà les nombreuses fonctionnalités qui ont fait son succès: d'excellentes capacités d'auto-documentation, des méthodes pratiques de gestion des fichiers et des types de données variés, dont le format est précisé par la clausePICTURE.

La gestion des décimales en Cobol (nombres envirgule fixe), et la maîtrise des arrondis et des dépassements, permettent d'éviter les nombreux problèmes qui arriveraient en utilisant des nombres àvirgule flottantepour les calculs financiers. Ce sont ses capacités arithmétiques envirgule fixe,notamment pour lestraitements par lotsoù il présente d'excellentes performances, qui ont rendu le Cobol particulièrement populaire pour les traitements comptables.

Il intègre également un générateur de rapports, défini de la même manière que les autres structures de données. Sont intégrées des fonctions detri,de fusion et de communication. Un module optionnel permettait également une forme decommunication inter-processusparfile de messages.

Le parti-pris initial de définir un langage de programmation proche du langage naturel (comme pour FLOW-MATIC) devait faciliter, sinon la programmation, du moins l'audit des programmesCobol par des gestionnaires non-informaticiens. Ce choix a eu pour conséquence une syntaxe complexe (le langage naturel n'est pas simple), avec de nombreux mots réservés, et de nombreuses options (les opérations de gestion ne sont pas simples non plus) qui valent à Cobol une réputation de verbosité, qui n'est pas forcément fondée sur des faits.

Par exemple en Cobol l'instruction

ADDmontantTOtotal-jourtotal-moistotal-annee.

s'exprimerait, en C ou autres langages dérivés, par

total_jour+=montant;
total_mois+=montant;
total_annee+=montant;

Comme d'autres langages de l'époque (par exempleFortran II[réf. nécessaire]), Cobol offrait la possibilité de modifier du code pendant l'exécution à l'aide de la fameuse instructionALTER X TO PROCEED TO Y(altérer X pour aller vers Y). Cette possibilité dangereuse, qui transposait une technique courante de la programmation enlangage machine,a été éliminée des spécifications du langage. Rendant possible la modification à la volée de l'exécution d'un programme, cette commande permettait d'outrepasser des ordresGO TO,complexifiant ainsi la maintenance.

Les versions successives du standard ont modernisé le langage, par exemple en ajoutant desstructures de contrôleaméliorées et le support de laprogrammation objet,tout en préservant au maximum la compatibilité avec les versions précédentes, de façon à éviter d'avoir à modifier l'énorme stock de programmes Cobol en service.

Le langage Cobol était de loin le langage le plus employé desannées 1960à1980,et reste très utilisé dans de grandes entreprises, notamment dans les institutions financières qui disposent (et développent encore) de nombreuxlogicielset applications en Cobol[16].

Écrites à une époque où les octets coûtaient cher, et où l'an 2000 était encore fort loin, ces applications ont fait craindre le fameuxbogue de l'an 2000.Souvent, en effet, par mesure d'économie de mémoire, les services informatiques et programmeurs avaient codé les années et les tests d'année sur deux chiffres plutôt que sur quatre. De sorte que la préparation du passage à l'an 2000 coûta finalement d'énormes moyens humains, matériels et financiers. Pourtant, les banques, assurances et autres institutions financières géraient depuis très longtemps des dossiers sur dix, vingt voire trente ans (prêts, par exemple), mais sans systématiquement prendre en compte dans les tests de date la notion de siècle.

En 2001, leGartner Groupestimait que 75 % des données du monde des affaires étaient traitées par des programmes en Cobol et que 15 % des nouveaux programmes développés le seraient dans ce langage en 2005[17].Cependant, en juillet 2017, le Cobol est25edans l'Index TIOBE,qui mesure les langages de programmation selon leur popularité, avec une note de 1,135 %[18].Des enquêtes publiées par Micro Focus permettent d'appréhender l'évolution de l'utilisation du langage dans les milieux d'affaires: en 1999, elles révélaient que 87 % des entreprises de ce milieu faisaient un usage de COBOL; en 2003, le pourcentage est descendu à 56 %; cependant une autre série d'enquêtes aux caractéristiques similaires montrent que cet usage aurait de nouveau augmenté au cours de la décennie suivante (62 % en 2006, 64 % en 2012)[19].

Structure d'un programme en Cobol

[modifier|modifier le code]

Un programme comporte quatre divisions[19].La norme Cobol-85 ne rend obligatoire que la première.

  • IDENTIFICATIONDIVISION.
    
    Contient des informations générales sur le programme (dont le nom).
  • ENVIRONMENTDIVISION.
    
    Contient des informations sur l'environnement (matériel et logiciel) dans lequel le programme s'exécute.
  • DATADIVISION.
    
    Contient les descriptions (définitions) de données (variables, fichiers, paramètres et parfois description d'écran).
  • PROCEDUREDIVISION.
    
    Contient lesinstructionsdu programme.

Chaque division est composée desections,formées deparagraphescomposés dephrasesqui peuvent être des phrases impératives ou des clauses (chacune étant formée d'unverbesuivi d'une ou plusieurs opérandes)[20].Chaque phrase doit être terminée par un point[21].

Les six premières colonnes de chaque ligne de programme sont considérées comme une zone decommentaire,servant autrefois à numéroter les cartes perforées (en cas de chute du paquet, il suffisait de les passer sur une trieuse pour reconstituer la version correcte du programme).

La septième colonne contient un caractère de contrôle: espace pour les lignes actives, étoile pour lescommentaires,tiret comme caractère de continuation, la lettre D[22]qui, utilisée avec [WITHDEBUGGINGMODE], ajoute la ligne lors de l'exécution.

La huitième colonne est le début des titres de paragraphes.

La douzième colonne est le début des instructions.

Certains compilateurs Cobol modernes permettent l'emploi d'un format libre qui n'impose plus le colonnage.

Exemple de programme (Hello world!)

[modifier|modifier le code]

Écrit dans le style typique des programmes surcartes perforées(années 1960-70), avec lignes numérotées

000100IDENTIFICATIONDIVISION.
000200PROGRAM-ID.HELLO_WORLD.
000300DATE-WRITTEN.21/05/05 19:04.
000400AUTHORUNKNOWN.
000500ENVIRONMENTDIVISION.
000600CONFIGURATIONSECTION.
000700SOURCE-COMPUTER.RM-COBOL.
000800OBJECT-COMPUTER.RM-COBOL.
000900
001000DATADIVISION.
001100FILESECTION.
001200
100000PROCEDUREDIVISION.
100100
100200DEBUT.
100300DISPLAY""LINE1POSITION1ERASEEOS.
100400DISPLAY"Hello world!"LINE15POSITION10.
100500STOPRUN.

Note: ERASE EOS signifie « 'Erase End Of Screen' » La commande ligne 100300 a donc pour effet d'effacer l'écran.

Exemple en format libre

[modifier|modifier le code]

Autre version du même exemple en Cobol-85 format libre:

Identificationdivision.
Program-id.Hello.
Proceduredivision.
Display"Hello world!"line15position10.
Stoprun.

Return codes à l'exécution

[modifier|modifier le code]

Return code 203: vérifier l'emplacement de l'ordre d'ouverture du fichier.

Limitations et critiques de Cobol

[modifier|modifier le code]

Cobol a été développé à la marge de la communauté scientifique et informatique, et a fait l'objet de critiques sévères dans les rangs de celle-ci[23],[24],[25].Le célèbre mathématicien et informaticienEdsger Dijkstraa ainsi déclaré en 1975: « L'utilisation de COBOL mutile l'esprit; l'enseigner devrait, par conséquent, être considéré comme un délit pénal » («The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.»)[26],[27],[19].

La présence de très nombreux mot-clés ou mots réservés, entre environ 300 et plus de 1000 selon les implémentations[28],[29](contre une trentaine enlangage C,par exemple), a été critiquée pour son manque de praticité et les difficultés qu'elle pouvait poser à l'apprentissage du langage[19].Un certain nombre sont de simple variantes formelles: abréviations (par exemplepicpourpicture), ou mots visant à rendre plus naturelle la formulation de phrases qui se veulent proches de la langue anglaise (zeroet ses variantes plurielleszeros/zeroes,time/times,etc.). De même, certains mots-clés sont facultatifs et sans valeur dans certains contextes[30].

Cobol fut élaboré avec l'idée d'être un langagecommunet hautementportable.Toutefois, en 2001, on en recensait environ 300 dialectes différents, ce qui est source de problèmes d'intercompatibilité[31].

Cobol a souvent été critiqué pour sa grande verbosité[19].Il fut conçu à l'origine dans l'idée de produire un code auto-documenté (écrit de sorte à limiter la nécessité decommentaires) facile à apprendre, maintenir et utiliser par des non-spécialistes[32],[33],[34],[35],[36],[37],[38].Ceci a en réalité conduit à produire des quantités de code peu compréhensible, et certains changements introduits notamment dans la version Cobol-85 ont visé à limiter ces écueils[36].

Un autre problème est posé par le manque croissant de programmeurs formés en Cobol, avec les départs en retraite, Cobol n'étant pratiquement plus enseigné dans les milieux académiques[19].Pour y faire face, des migrations vers d'autres systèmes, en particulierJava,ont été effectuées ou envisagées, donnant parfois lieu à de grandes difficultés ou à des renoncements[39],[19].

Sur les autres projets Wikimedia:

Bibliographie

[modifier|modifier le code]

Articles connexes

[modifier|modifier le code]
  • Pacbaseet TELON sont desAGLqui génèrent du Cobol.
  • CODASYLConference On DAta SYstems Language

Liens externes

[modifier|modifier le code]
  1. «https://www.iso.org/standard/74527.html»
  2. http://www.evoliris.be/fr/content/lh%C3%A9ritage-cobol-un-d%C3%A9fi-pour-la-formation-continue
  3. (en)www.microfocus.com
  4. Basé sur: J.E. Sammet. «The Early History of Cobol.», dansACM SIGPLAN Notices,volume 13, numéro 8 (août 1978) Numéro spécial:History of programming languages conference,pp. 121-161, 1978. Également publié dansHistory of Programming Languages,rk: ACMMonograph Series,1981.
  5. L'utilisation traditionnelle du point à cet effet, inadaptée et peu lisible, est source de nombreuses erreurs de programmation.
  6. Coughlan 2014,p.74
  7. ISO/IEC JTC 1/SC 22/WG 4 2014,p.899.
  8. McCracken et Golden 1988,§ 8.4.
  9. Coughlan 2014,p.4
  10. EncyclopædiaUniversalisCOBOL», surEncyclopædia Universalis(consulté le)
  11. ISO/IEC JTC 1/SC 22/WG 4 2001,Annexe F.
  12. Klein 2010,p.21.
  13. Coughlan 2014,p.4, 13
  14. Coughlan 2014,p.523-531
  15. (en)Data Types in Managed COBOL,microfocus.com.
  16. « Les banques restent fidèles à Cobol, plus performant que Java »Le Monde Informatique
  17. (en)William M. Ulrich, «Remember Cobol? If You Don't, Get Reacquainted»,Computerworld,vol.35,no21,‎,p.30(ISSN0010-4841,lire en ligne,consulté le)
  18. Juillet 2017,TIOBE Index
  19. abcdefetg(en)Charles Kiefer,«COBOL as a Modern Language»,University of North Georgia.
  20. Coughlan 2014,p.23
  21. Coughlan 2014,p.22
  22. (en-US)«SOURCE-COMPUTER paragraph», surwww.ibm.com,(consulté le)
  23. Sammet 1978b,p.255.
  24. Shneiderman 1985,p.348–349.
  25. Bemer 1971,p.133.
  26. Coughlan 2014,p.1
  27. (en)Edsger Dijkstra,How do we tell truths that might hurt?,Site de l'Université du Texas à Austin(www.cs.utexas.edu), Département de sciences informatiques.
  28. ISO/IEC JTC 1/SC 22/WG 4 2014,§ 8.9.
  29. «Reserved Words Table», surMicro Focus Visual COBOL 2.2 COBOL Language Reference,Micro Focus(consulté le)
  30. C'est par exemple le cas des motsby,of,usage:l'instructionsort list on ascending key elem,qui range dans une liste le champlistpar valeur croissante des élémentselem,peut tout aussi bien s'écriresort list ascending elem.De même01 indx usage index.,pour la déclaration d'une variableindxde typeindexpeut s'écrire simplement01 indx index..timesest facultatif lorsqu'il sert à définir le nombre d'éléments d'un champ d'une table (pic x occurs 100 timesest équivalent àpic x occurs 100), mais obligatoire lorsqu'il est utilisé pour exécuter un certain nombre de fois un paragraphe (perform 100 times).ofest facultatif dans une expression commelength of function trim(s)(qui donne la longueur d'une chaîne de caractères privée des espaces situés aux extrémités. A noter encore que leelemnt of liste(qui désigne l'élémentelemntdu conteneurliste) est équivalent àelemnt,si dans le contexte d'éxécutionelemntne peut faire référence à aucune autre variable
  31. RalfLämmeletChrisVerhoefCracking the 500-language problem»,IEEE Software,vol.18,no6,‎ november–december 2001,p.79(DOI10.1109/52.965809,hdl1871/9853,lire en ligne[archive du])
  32. Brown 1976,p.53.
  33. CODASYL 1969,§ II.1.1.
  34. Shneiderman 1985,p.350.
  35. Sammet 1961,p.381.
  36. aetbConner 1984,p.ID/10.
  37. Marcotty 1978a,p.263.
  38. Coughlan 2014,p.11
  39. Coughlan 2014,p.6-7, 13