# Générateur automatique de programmes

Le générateur automatique de programmes (GAP) est un langage de programmation destiné à la gestion.
Ce langage paraît sous ce nom sur les systèmes 3 d'IBM (ancêtres de l'AS/400) ; existait sous le nom de RPG (Report Program Generator) dans les systèmes plus anciens d'IBM (1130, 360/370, etc.). Conçu à l'origine pour recycler et convertir les comptables en programmeurs sans les obliger à descendre dans le détail fin des traitements.
* L'histoire du GAP commence avec les cartes perforées : il lui est donné pour cette raison une syntaxe en colonnes, comme le Fortran ou l'assembleur.
* Le GAPI puis le GAPII (années 1960 et au-delà) faisaient apparaître l'ordinateur comme une machine pour traitements batchs. Il gérait un système de boucles implicites masqué au sein du langage (comme le fera APL vers la fin de la même décennie).
Quelques évolutions :
* Le GAPIII : évolue sans pour autant abandonner le système de machines à état du GAP2, mais conserve sa rigidité et son colonnage. Une ligne de code est structurée et chaque position ou colonne, a un usage bien précis en fonction de la catégorie de ligne de code, par exemple la position 6 avec une valeur F indique une description de fichier, la valeur C indique une instruction d'opération.
* Le RPG IV ILE : abandonne en partie le colonnage, introduit quelques notions supplémentaires comme les pointeurs, les fonctions intégrées, les groupes d'activation ... pour tenter de dépasser les limitations originelles.
* Le RPG V C'est le RPG IV ILE en format full free (on n'utilise plus aucune carte même pour les déclarations).

## Description

La grammaire originale du langage, assez rudimentaire, comprenait des éléments repris de l'assembleur, du BASIC et du Cobol :
* les mnémoniques classiques de l'assembleur sont là (move, clear, goto, etc.) ;
* il partage avec ce langage et avec le Basic de fonctionner linéairement, et par des boucles cycliques ;
* comme langage orienté sur la gestion il comporte, à l'instar du Cobol, des fonctions d'accès aux bases de données et de constitutions d'états (reports en anglais, d'où son nom) nécessaires à la gestion et à la comptabilité ;
* Comme le Cobol encore, c'est un langage que certains pensent très rigide et très limité mais amplement suffisant pour traiter les travaux administratifs des entreprises de la distribution (il n'est pas un langage scientifique). Son colonnage possède l'énorme avantage de présenter les instructions sous une forme ordonnée et surtout de permettre à un programmeur expérimenté de repérer facilement une erreur de programmation d'un seul coup d'œil. Il possède un atout considérable en intégrant la notion « d'indicateurs » lui permettant simultanément de tester la valeur d'une donnée sans pour autant surcharger le codage, et ce, aussi bien en entrée ou sortie des données, qu'en cours de calcul. Il est un outil puissant facile et rapide à mettre en œuvre qui n'a rien perdu de ses acquis au cours des versions successives. Un programme Gap est très vite écrit et testé lorsque son programmeur maîtrise bien le langage.
Aujourd'hui, le langage possède toutes les fonctionnalités d'un langage procédural moderne.
* instructions en format libre. Le RPG en format libre présente désormais de grandes similitudes avec des langages tels que Java, Python, ou Perl.
* accès aux tables par des ordres séquentiel/indexé (comme en GAP 3) ou par du SQL embarqué.
* manipulations des champs date/heure, des champs VARCHAR, des BLOB, etc.
* utilisations de plus de 120 fonctions intégrées du langage.
* possibilité d'écrire ses propres fonctions, externes avec la technologie ILE, qui peuvent être placées dans un objet OS/400 nommé Programme de Service (une sorte de DLL).
* possibilité d'appeler des services web, et de d'en publier (en SOAP et en REST), ce qui permet au RPGLE de demeurer un acteur tout à fait valable dans le développement d'application sur IBM i.
Afin de tirer pleinement partie du langage vous devrez éditer vos sources depuis un éditeur, fourni par IBM sous le nom de RDI, il comporte plusieurs plugins qui vous permettront d’éditer et de mettre au point vos développements. De puis 2020 des extensions #VSCODE performantes permettent également d'éditer votre code source
Vous pouvez utiliser du SQL directement dans votre code RPGLE pour tous vos accès aux données.
Des instructions continuent à être ajoutées au fur et à mesure des releases de l'IBMi et des technologies refresh.

## Futur

* Il est utilisé en complément de Java qui est un standard ainsi que de PHP, ZEND fournissant une distribution packagée sous forme de produit sous licence IBM i.
* Depuis l'année 2020, vous pouvez utiliser une version open source de PHP, la distribution Zend devenant payante.
* nodes js est aussi beaucoup utilisé, pour réaliser des interfaces graphiques, il est téléchargeable en RPM...
* Vous pouvez désormais coder vos programmes directement dans l'IFS, (système de fichier de l'IBMi), vous pouvez ainsi utiliser des logiciels de gestion de versions comme Git que vous pouvez même installer sur votre #IBMi.