# 4GL

4GL est un langage de programmation.

## Historique : Informix

Dans les années 1980, peu de composants des systèmes d'informatique étaient standardisés. Chaque constructeur avait son propre système d'exploitation, son propre langage de programmation, son propre système de gestion de base de données (SGBD), etc. De fait, pour avoir des programmes capables de tourner sur la plupart des machines, il fallait reconstruire chaque programme pour chaque version. Le langage associé au SGBD Informix (concurrent d'Oracle) était le 4GL.

## Les versions actuelles

En 2001, IBM racheta la société Informix, et a décidé de passer le développement du 4GL à une très basse priorité. Les versions de maintenance se limitent au strict minimum c'est-à-dire bug fixes(7.31 en 2002, 7.32 en 2004 avec enfin les arrays dynamiques), puis 7.50 en 2008, incluant un générateur de WebServices à partir du source 4GL. Le produit reste disponible sous Unix (Linux 32 ou 64 bit, Aix, hp-ux, solaris) car il est toujours utilisé par des millions de clients dans le monde. Son handicap :
    - Il ne gère qu'une interface 'caractères' (anciens terminaux écrans ASCII type VT220 etc.)
    - Il est 'base de données dépendant', ne fonctionnant qu'avec la base de données Informix
Plusieurs sociétés proposent maintenant des produits alternatifs, compatibles avec le 4GL original, mais sans ses inconvénients : interface graphique, multibase. Ces produits offrent ainsi à la base installée une possibilité d'évolution et de modernisation des applications, tout en conservant l'acquis du langage, et les compétences. Ces sociétés sont principalement :
* Aubit4GL. Projet Open Source de 4GL.
* Four J's Development Tools (4js). La syntaxe et les instructions ont été conservées, mais le compilateur a été renommé BDS. Le précédent compilateur était en mode caractères (avec des rectangles dessinés en guise de fenêtre), en revanche le compilateur 4JS, émulait le graphisme Windows. Désormais, la dernière version de 4JS, nommée Genero, est réellement graphique avec tous les composants de type Windows. Aux clients graphiques Windows, Linux et Mac OS X, Four J's ajoute également une version web sous forme de cgi ou filtre ISAPI, permettant de générer dynamiquement du HTML, à partir du 4GL original. La plupart des bases de données du marché sont à présent supportées. Des extensions Web-services permettent d'ouvrir le 4GL au monde extérieur. Four J's propose en outre un Atelier de Génie Logiciel dédié au 4GL (Genero Studio), et une base de données compatible Informix (Genero DB).
* Querix Lycia. Querix propose un environnement de développement complet autour du 4GL avec des solutions graphiques basées sur Windows et Java. De plus les produits Querix permettent d'attaquer plusieurs bases de données et non plus uniquement Informix. Querix a lancé Lycia, avec environnement basé sur Eclipse, à la fin de 2010.
    La release II de Lycia, prévue pour Septembre 2012, apporte un nouveau générateur d'états basé sur Jasper et BIRT, l'intégration du langage java dans les applications 4GL, ainsi que les nouveaux clients .NET et Web/mobile, de technologie HTML5 et Ajax

## Particularités de ce langage

Le 4GL est un langage conçu pour le développement d'applications. C'est un langage de quatrième génération (d'où son nom, 4GL : 4th Generation Langage), ce qui signifie que, contrairement au C, au Pascal et les autres langages de troisième génération qui ne sont pas spécialisés, il est conçu pour communiquer avec plusieurs types de bases de données avec les mêmes sources (O.D.I). Il est basé sur le RDSQL, une extension du SQL. Par exemple, il est possible de définir le type d'une variable en fonction d'un champ d'une table (voir exemple en bas).
Il est insensible à la casse.
Il utilise des instructions purement procédurales (IF, FOR, WHILE, etc.) mais également des instructions non procédurales. Par exemple MENU permet de créer des menus (voir exemple en bas). Dans le cas de MENU, le programme reste entre les instructions MENU et END MENU. Dès que l'utilisateur effectue une action, le programme vérifie s'il doit réagir. Si non il ne fait rien, si oui il fait ce qu'il a à faire puis revient dans le menu et y reste à nouveau. Cela durera jusqu'à ce que l'utilisateur demande à quitter le programme ou à fermer le menu.
Ce genre d'instructions rend le développement plus rapide par rapport aux langages procéduraux habituels (d'après le support de cours édité par Iscariote à la fin des années 1980, le rapport est d'environ 1 à 10).
Le 4GL permet aux programmes d'être divisés sur plusieurs fichiers source (nommés modules), chacun contenant une partie des fonctions. Ceci permet de rendre communs les modules contenant des fonctions utilisées par plusieurs programmes et donc d'éviter de les réécrire. Un fichier spécial indique au compilateur quels modules compiler pour constituer un programme fonctionnel.
L'affichage à l'écran est géré par un fichier spécial. Autant les modules sont au format *.4gl, autant les fichiers d'affichage (nommés formes) sont des fichiers en *.per. Les formes contiennent la disposition des textes et des champs de saisie (et pour les formes compatibles avec les versions récentes du compilateur : des cases à cocher, des boîtes combinées, etc.) ainsi que des variables associées.
Les programmes 4gl communiquent avec les formes via des instructions spéciales qui associent des groupes de variables du programme à un groupe de variables de la forme. Enfin la sortie (vers une imprimante, vers un fichier informatique, etc.) est gérée par un type spécial de fonctions, les fonctions reports.
IIUG (International Informix Users Group) dispose de nombreux forums et outils complémentaires au 4GL.

## Exemples

Le premier montre comment définir une valeur par rapport à une table d'une base de données à laquelle le programme est lié. Ainsi ces variables auront le même type que le champ auquel elles ont été associées.
Le second montre un exemple de la commande MENU
Le dernier exemple montre la spécialisation du 4GL dans les applications de gestion. En quelques lignes de code, il est possible d'afficher un formulaire, de l'interroger, et d'ajouter les valeurs saisies dans la base de données.

### Exemple 4

Fonction montrant l'intérêt du PREPARE EXECUTE

### Exemple 5

Petit exemple sur le FOREACH

### Exemple 6

Petit exemple sur la manipulation et l'affichage des tableaux