- COBOL
-
COBOL est un langage de programmation de troisième génération créé en 1959 (officiellement le 18 septembre 1959)[1]. Son nom est l'acronyme de COmmon Business Oriented Language qui révèle sa vocation originelle : être un langage commun pour la programmation d'applications de gestion.
Le langage COBOL était de loin le langage le plus employé des années 1960 à 1980, et reste très utilisé dans des grandes entreprises, notamment dans les institutions financières qui disposent (et développent encore) de nombreux logiciels et applications en COBOL.
Sommaire
Histoire et spécifications
Le COBOL a initialement été créé en 1959 par le Short Range Committee, un des trois comités proposés à une rencontre au Pentagone en 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'ordinateurs et trois agences gouvernementales. Les six constructeurs informatiques étaient Burroughs Corporation, IBM, Minneapolis-Honeywell, RCA, Sperry Rand, et Sylvania Electric Products. Les trois agences du gouvernement étaient le US Air Force, le David Taylor Model Basin, et l'Institut national des standards. Ce comité était présidé par un membre du NBS. 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é du Short Range Committee a été formé avec six membres :
- William Selden et Gertrude Tierney de IBM ;
- Howard Bromberg et Howard Discount de RCA ;
- Vernon Reeves et Jean E. Sammet de Sylvania Electric Products.
Ce sous-comité a terminé les spécifications de COBOL fin 1959. Elles étaient largement inspirées par le langage FLOW-MATIC inventé par Grace Hopper, surnommée « la mère du langage COBOL », et par le langage COMTRAN d'IBM, inventé par Bob 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 : Complies Only Because Of Luck (fonctionne uniquement par chance) et Completly Obsolete Business Oriented Language (Langage orienté gestion complètement obsolète)[2].
Histoire des standards COBOL
Ces spécifications furent approuvées par le comité complet, puis par le comité exécutif (CODASYL) en janvier 1960 et 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'ANSI (American National Standards Institute), dont
- COBOL-68 (1968) : gestion des tables, accès séquentiel, accès aléatoire, random processing, tri, report writer, segmentation et librairie
- COBOL-74 (1974)
- COBOL-85 (1985) qui témoigne d'un grand pas vers l'adoption de la programmation structurée par l'industrie informatique
- En 1989, les fonctions intrinsèques sont ajoutées au langage ; elles permettent des opérations mathématiques (ACOS, pour calculer l'arc cosinus par exemple), logiques (MAX, MIN) ou sur des chaînes de caractères (UPPER-CASE).
- COBOL 2002 introduit la programmation objet, le support de l'Unicode, du XML, etc.
Traits principaux
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 où il y a 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 :
01 NomPrenom. 05 Prenom PIC X(20). 05 Nom PIC X(20).
qui définit une structure NomPrenom contenant les champs Prenom et Nom sur 20 caractères.
Autre exemple :
01 CodePostal. 02 Depart PIC 99. 02 Commune PIC 999.
qui définit un code postal, et qui permet d'utiliser le département sans aucun MOVE.
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 clause PICTURE. Comme la plupart des autres langages de l'époque, il ne permet pas de définir de variables locales, de fonctions récursives et d'allouer de la mémoire dynamiquement.
La gestion des décimales en COBOL (nombres en virgule 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 flottante pour les calculs financiers.
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 de tri, de fusion et de communication. Un module optionnel permettait également une forme de communication inter-processus par file 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 programmes COBOL 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
ADD montant TO total-jour total-mois total-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 exemple Fortran 2), COBOL offrait la possibilité de modifier du code pendant l'exécution à l'aide de la fameuse instruction ALTER X TO PROCEED TO Y (altérer X pour aller vers Y). Cette possibilité dangereuse, qui transposait une technique courante de la programmation en langage 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 ordres GO TO, complexifiant ainsi la maintenance.
Les versions successives du standard ont modernisé le langage, par exemple en ajoutant des structures de contrôle améliorées et le support de la programmation 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 poids de l'héritage
Le langage COBOL était de loin le langage le plus employé des années 1960 à 80, et reste toujours en utilisation dans des grandes entreprises (en 2010), notamment dans les institutions financières qui disposent d'une vaste bibliothèque d'applications COBOL. Écrites à une époque où les octets coûtaient cher, et où l'an 2000 était encore fort loin, ces applications ont fait craindre le fameux bogue 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 2 chiffres plutôt que sur 4. De sorte que la préparation du passage à l'an 2000 coûta au final d'énormes moyens humains, matériels et financiers. Bien que, cependant, les banques, assurances et autres institutions financières géraient depuis très longtemps des dossiers sur 10, 20 voire 30 ans (prêts par exemples), mais sans systématiquement, toutefois, prendre en compte dans les tests de date la notion de siècle.
En 2005, le Gartner Group estimait 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 seront dans ce langage.
COBOL permet d'effectuer des traitements comptables du fait de ses capacités arithmétiques en virgule fixe, notamment pour les traitements par lot où il présente d'excellentes performances, à condition que les calculs soient très basiques (ce qui est le cas des traitements comptables). Mais, même si les évolutions de COBOL l'ont aujourd'hui doté de certains des outils fournis par les langages modernes (récursivité, allocation dynamique, objets, etc.), son usage reste confiné aux applications de gestion.
Structure d'un programme en COBOL
Un programme comporte quatre divisions. La norme COBOL-85 ne rend obligatoire que la première.
-
IDENTIFICATION DIVISION.
-
ENVIRONMENT DIVISION.
-
DATA DIVISION.
-
PROCEDURE DIVISION.
Chaque division est composée de 'sections', formées de 'paragraphes' composés de 'phrases' qui peuvent être des phrases impératives ou des clauses. Chaque phrase doit être terminée par un point.
Les six premières colonnes de chaque ligne de programme sont considérées comme une zone de commentaire, 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 les commentaires, tiret comme caractère de continuation.
La huitième colonne est le début des titres de paragraphes.
La douzième colonne est le début des instructions.
Les compilateurs COBOL modernes permettent l'emploi d'un format libre qui n'impose plus le colonnage.
Exemple de programme (Bonjour !)
Écrit dans le style typique des programmes sur cartes perforées (années 1960-70), avec lignes numérotées
000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. SALUTTOUS. 000300 DATE-WRITTEN. 21/05/05 19:04. 000400 AUTHOR UNKNOWN. 000500 ENVIRONMENT DIVISION. 000600 CONFIGURATION SECTION. 000700 SOURCE-COMPUTER. RM-COBOL. 000800 OBJECT-COMPUTER. RM-COBOL. 000900 001000 DATA DIVISION. 001100 FILE SECTION. 001200 100000 PROCEDURE DIVISION. 100100 100200 DEBUT. 100300 DISPLAY " " LINE 1 POSITION 1 ERASE EOS. 100400 DISPLAY "BONJOUR !" LINE 15 POSITION 10. 100500 STOP RUN.
Note : ERASE EOS signifie "Erase End Of Screen". La commande ligne 100300 a donc pour effet d'effacer l'écran.
Exemple en format libre
Autre version du même exemple en COBOL-85 format libre :
Identification division. Program-id. Hello. Procedure division. Display "Hello world!" line 15 position 10. Stop run.
Notes et références
- (en) www.microfocus.com
- Basé sur : J.E. Sammet. "The Early History of Cobol.", dans ACM SIGPLAN Notices, Volume 13, Issue 8 (août 1978) Numéro spécial : History of programming languages conference, pp.121-161, 1978. Également publié dans History of Programming Languages,rk: ACM Monograph Series, 1981.
Voir aussi
Liens externes
- (fr) Cours Un petit cours de COBOL 85.
- (fr) Forum COBOL Le forum d'entraide des utilisateurs Francophones de COBOL.
- (en) COBOLUnit Framework opensource de tests unitaires en COBOL pour COBOL
- (en) Open Cobol compilateur libre pour Windows, Linux et MacOS X.
- (fr/en) COBOL-IT Un compilateur open sources pour Windows, Linux, AIX, HP Ux, Sun Solaris, zLinux. Offrant aussi un support commerciale.
- (en) Cobos Project Environnement de développement Open Source Cobol / Mainframe / CICS / DB2 sur Eclipse
- (en) COBOL User Groups (COBUG)
Wikimedia Foundation. 2010.