GnuCOBOL

Un article de Wikipédia, l'encyclopédie libre.
GnuCOBOL
Description de l'image Heckert GNU white.svg.

Informations
Créateur Keisuke Nishida (d)Voir et modifier les données sur Wikidata
Développé par Projet GNUVoir et modifier les données sur Wikidata
Première version Voir et modifier les données sur Wikidata
Dernière version 3.2 ()[1]Voir et modifier les données sur Wikidata
Dépôt sourceforge.net/p/gnucobol/code/HEAD/treeVoir et modifier les données sur Wikidata
Écrit en CVoir et modifier les données sur Wikidata
Supporte les langages CobolVoir et modifier les données sur Wikidata
Système d'exploitation GNU/Linux, BSD, Microsoft Windows et macOSVoir et modifier les données sur Wikidata
Type Compilateur
Moteur d'exécution
Paquet GNUVoir et modifier les données sur Wikidata
Licence GPL with runtime libraries under LGPL
Documentation gnucobol.sourceforge.io/guides.htmlVoir et modifier les données sur Wikidata
Site web gnucobol.sourceforge.ioVoir et modifier les données sur Wikidata

GnuCOBOL (anciennement OpenCOBOL, et pendant une courte période connu sous le nom de GNU Cobol ) est une implémentation en logiciel libre du langage de programmation COBOL. GnuCOBOL est un transcompilateur vers C qui utilise ensuite un compilateur C pour générer du code natif[2]. Conçu à l'origine par Keisuke Nishida, son développement avait été repris par Roger While. Les développements les plus récents sont désormais dirigés par Simon Sobisch, Ron Norman, Edward Hart, Sergey Kashyrin et bien d'autres[3]. La société française OCamlPro participe au développement depuis janvier 2022.

Histoire[modifier | modifier le code]

Alors qu'il travaillait avec Rildo Pragana sur TinyCOBOL, Keisuke Nishida décida d'essayer de développer un compilateur COBOL adapté à l'intégration avec GCC. Ce prototype est rapidement devenu le projet OpenCOBOL. Nishida a travaillé en tant que développeur principal jusqu'à la version 0.31 en 2005. Roger While a ensuite pris la direction du projet et a publié OpenCOBOL 1.0 le 27 décembre 2007. Les travaux sur la pré-version d'OpenCOBOL 1.1 se sont poursuivis jusqu'en février 2009. En mai 2012, le projet a été déplacé vers SourceForge et la pré-version de février 2009 a été marquée comme une version[4]. Fin septembre 2013, OpenCOBOL a été accepté en tant que projet GNU, renommé GNU Cobol, puis finalement GnuCOBOL en septembre 2014[5]. Ron Norman a ajouté un module Report Writer en tant que branche de GnuCobol 2.0, et Sergey Kashyrin a développé une version qui utilise des intermédiaires C++ au lieu de C[6].

Le transfert des copyrights à Free Software Foundation sur le code source de GnuCOBOL (incluant les versions nommées GNU Cobol et OpenCOBOL) a été finalisée le 17 juin 2015[7].

La dernière version stable est la v3.2, sortie le 28 juillet 2023, alors qu'une branche 4.0 est déjà en cours de développement.

Utilisation en production[modifier | modifier le code]

Peu d'entreprises communiquent sur leur utilisation du langage COBOL, et il est donc difficile de connaître le nombre d'entreprises utilisant GnuCOBOL en production. En France, la DGFIP est en train de migrer l'un de ses plus gros programmes COBOL des mainframes GCOS de BULL vers des PCs tournant GnuCOBOL.

Le compilateur CobolIT, société française rachetée par OpenText/MicroFocus, est une version de OpenCOBOL modifiée. CobolIT étant utilisé par plusieurs dizaines d'entreprises, cela atteste de la maturité de la solution GnuCOBOL. Contrairement à GnuCOBOL dont les sources sont disponibles en ligne, les sources du compilateur CobolIT ne sont pas publiques, bien que sous la même licence que GnuCOBOL.

La société OCamlPro fournit une offre de support sur GnuCOBOL dans le cadre de son offre de service sur SuperBOL, studio de développement pour GnuCOBOL.

Philosophie[modifier | modifier le code]

Tout en s'efforçant de rester conformes aux normes COBOL jusqu'à la spécification COBOL 2014 , et également d'inclure des fonctionnalités communes aux compilateurs existants, les développeurs ne revendiquent aucun niveau de conformité aux normes[8]. Malgré cela, la version finale 2.2 réussit plus de 9 688 (99,79 %) des tests inclus dans la suite de tests NIST COBOL 85, sur 9 708 (20 tests ayant été supprimés)[9].

GnuCOBOL traduit un programme COBOL (code source) en programme C. Le programme C peut ensuite être compilé en code natif utilisé par l'ordinateur (code objet) vers un programme ou vers une bibliothèque dynamique, que d'autres programmes peuvent appeler. Sous UNIX et les systèmes d'exploitation similaires (tels que Linux ), le compilateur GNU C est utilisé. Pour Windows, le package Visual Studio Express de Microsoft fournit le compilateur C. La compilation en deux étapes est généralement effectuée par une seule commande, mais il existe des options pour contrôler à quelle étape le compilateur s'arrête.

Documentation[modifier | modifier le code]

Le site opencobol.org a été le site officiel de l'équipe de développement de 2002 à 2012 et la meilleure source d'informations sur le développement en amont[10].

La plupart des développements ont désormais lieu dans un projet SourceForge nommé GnuCOBOL.

Rećemment, une partie du développement sur la branche 3.x a lieu sur un mirroir Github hébergé par OCamlPro.

Le Guide du programmeur GnuCOBOL, de Gary Cutler, a été publié sous la licence de documentation libre GNU. Il a été mis à jour pour inclure GnuCOBOL avec Report Writer et est répertorié dans la page de présentation de la documentation GnuCOBOL avec les dernières versions dans l'arborescence de code. Il est maintenu par Vincent Coen et d'autres à mesure que chaque nouvelle version du compilateur est publiée et est disponible sur le projet GnuCOBOL.

Une version formattée au format Sphinx, plus facile à naviguer, est aussi disponible sur le site GnuCOBOL de SuperBOL.

Exemples de programmes[modifier | modifier le code]

Format historique (syntaxe fixe)[modifier | modifier le code]

000100* HELLO.COB GnuCOBOL example
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. hello.
000400 PROCEDURE DIVISION.
000500     DISPLAY "Hello, world!".
000600     STOP RUN.

Compilation et exécution :

$ cobc -x HELLO.COB
$ ./HELLO
Hello, world!

Format moderne (syntaxe libre)[modifier | modifier le code]

*> GnuCOBOL Hello World example
id division.
program-id. hello.
procedure division.
display "Hello, world!" end-display
goback.

Compilation et exécution :

$ cobc -x -free hello.cob
$ ./hello
Hello, world!

Programme le plus court[modifier | modifier le code]

Le programme COBOL valide le plus court, avec l'option de syntaxe libre dans GnuCOBOL 2.0, est un fichier vide. Compilation et exécution :

$ cobc -x -frelax-syntax ./empty.cob
./empty.cob: 1: Warning: PROGRAM-ID header missing - assumed
$ ./empty
$

Pour les versions antérieures et avec une syntaxe libre :

display"Hello, world!".

Compilation et exécution :

$ cobc -x -frelax-syntax -free hello.cob
hello.cob: 1: Warning: PROGRAM-ID header missing - assumed
hello.cob: 1: Warning: PROCEDURE DIVISION header missing - assumed
$ ./hello
Hello, world!

Sans syntaxe libre et avec n'importe quelle version de GnuCOBOL, GNU Cobol ou OpenCOBOL (remarque, il y a 7 espaces de début pour se conformer à la source COBOL de disposition FIXED) :

    program-id.h.procedure division.display "Hello, world!".

La compilation s'effectue sans erreur :

$ cobc -x smallest.cob
$ ./smallest
Hello, world!

Veuillez noter que ces exemples triviaux ne doivent pas être considérées comme de bonnes pratiques de programmes COBOL ; COBOL a été conçu pour être un langage de programmation en anglais lisible.

Mise en œuvre[modifier | modifier le code]

L'analyse de syntaxe utilise Bison et Flex. Le préprocessing de GnuCOBOL est plus simple que celui du standard COBOL, qui exige quatre passes, mais les programmes exigeant ces quatre passes sont très rares.

Le compilateur sous licence GPL et les bibliothèques d'exécution sous licence LGPL sont écrits en C et utilisent C ABI pour la liaison de programmes externes.

Le système de compilation est basé sur les outils du GNU Build System. Les tests standard avec make check utilisent Autoconf, la suite de tests ANSI85 exécutée par make test utilise des scripts Perl. Pour faciliter ses contributions, OCamlPro a développé l'outil Autofonce, permettant en particulier la promotion automatique des tests modifiés.

Le script de configuration de la compilation de GnuCOBOL comporte des options qui incluent :

  • le choix du compilateur C et de ses options de compilation post-traduction
  • le système de gestion de base de données pour le support ISAM
  • l'inclusion d'iconv

Disponibilité[modifier | modifier le code]

  • Version 1.0 sur SourceForge[11].
  • Version 1.1 sur SourceForge [12]
  • Version de développement 2.0 sur SourceForge [13]
  • Paquet Debian open-cobol[14].
  • Version 2.2, publiée le 7 septembre 2017 sur SourceForge [15]
  • Version 3.1 publiée en juillet 2020 sur SourceForge
  • Version 3.2 publiée en juillet 2023 sur SourceForge.

Notes et références[modifier | modifier le code]

  1. (en) Simon Sobisch, « Release of GnuCOBOL 3.2 », (consulté le )
  2. « README », ftp.gnu.org
  3. Tiffin, « OpenCOBOL FAQ », (consulté le )
  4. Tiffin, « OpenCOBOL FAQ », (consulté le )
  5. Tiffin, « GNU Cobol is now a real thing » [archive du ] (consulté le )
  6. Sobisch, « Work in Progress » [archive du ], (consulté le )
  7. Tiffin, « State of the Project » [archive du ] (consulté le )
  8. « OpenCOBOL FAQ », (consulté le ) : « While OpenCOBOL can be held to a high standard of quality and robustness, the authors DO NOT claim it to be a “Standard Conforming” implementation of COBOL. »
  9. « OpenCOBOL FAQ » (consulté le )
  10. « An open-source COBOL compiler », OpenCOBOL (consulté le )
  11. « GnuCOBOL - Browse Files at », Sourceforge.net, (consulté le )
  12. GnuCOBOL downloads at SourceForge
  13. GnuCOBOL downloads at SourceForge
  14. « Debian -- Details of package open-cobol in buster », packages.debian.org
  15. GnuCOBOL downloads at SourceForge

External links[modifier | modifier le code]