# Langage de programmation de quatrième génération

Les langages de programmation de quatrième génération (L4G) (4GL en anglais) sont un type de langage de programmation apparu en 1980, proche des langues naturelles, qui permet d'écrire plus de choses avec moins de lignes de programmes et moins d'erreurs.
Ces langages permettent de décrire certaines opérations de manière non procédurale et permettent d'obtenir rapidement des résultats à partir de courts programmes$^,$.
Il n'existe pas de distinction formelle entre les 3e et 4e générations de langages de programmation. Le mot L4G est utilisé comme buzzword pour vendre des langages de programmation, et selon Holger Herbst en 1997, la plupart des L4G sont en fait des langages de 3e génération auxquels a été ajoutée une syntaxe déclarative basée sur SQL. De nombreux logiciels de base de données tels que dBase, Oracle ou Informix incluent un langage de programmation de 4e génération. Celui-ci est similaire à un langage généraliste tel que Pascal et comporte des constructions additionnelles qui permettent un lien étroit avec le moteur de base de données telles que des commandes permettant de manipuler les bases de données.
Selon un sondage réalisé à Hong-Kong en 1994, les caractéristiques essentielles d'un L4G sont la facilité d'apprentissage, l'accélération du travail de programmation, la présence d'un ensemble d'outils permettant de construire rapidement des menus ainsi que des formulaires électroniques et des rapports. La majorité des sondés ont trouvé difficile de répondre à la question : « Quelle est la définition d'un L4G ? ».

## Générations de langages

Les langages de programmation sont souvent catégorisés en quatre ou cinq générations.
Les première et deuxième générations de langage de programmation sont dits de bas niveau. Dans ce type de langage le programmeur doit écrire les instructions d'une manière facile à comprendre pour le matériel informatique. Chaque ligne de code correspond à une seule opération effectuée par le système informatique. De tels langages sont également dépendants de la machine : un programme écrit pour un ordinateur donné ne pourra pas être utilisé sur un autre type d'ordinateur.
La première génération — le langage machine — sont les instructions sous forme de mots binaires telles qu'elles vont être exécutées par un processeur. chaque instruction à la forme d'un code opératoire (opcode) suivi des paramètres nécessaires en fonction de l'opcode. Chaque type de processeur a une palette d'instructions qui lui est propre mais qui peut éventuellement dépendre du mode d'exécution de celui-ci. Le langage machine est la seule forme compréhensible directement par l'ordinateur et à l'époque où les ordinateurs n'avaient pas encore de terminaux avec des écrans, se codait directement au moyen d'interrupteurs sur un panneau de contrôle, et ensuite, au moyen de cartes perforées à la main. Plus tard, il est devenu possible de programmer en langage machine au moyen d'un éditeur hexadécimal, mais en dehors de toutes petites modifications sur du code existant, il est plus avantageux d'utiliser un assembleur. Aujourd'hui, plus personne n'écrit en langage machine.
La deuxième génération, celle du langage assembleur, existe depuis 1955. Dans ce type de langage les opcodes sont écrits sous la forme d'instructions symboliques, en anglais mnemonics, plus faciles à retenir. Par exemple l'instruction dont la suite de bits est 01101001 sur le processeur 6502, s'écrit LDA en langage d'assemblage et correspond à une opération load accumulator. Les programmes écrits dans ce langage doivent être traduits en langage machine en vue d'être exécutés. Tout comme dans la première génération, il existe différentes palettes d'instructions en fonction du type de processeur. Par rapport aux programmes écrits dans des langages de 3e génération, l'exécution des programmes écrits dans le langage assembleur est généralement plus rapide. L'écriture et la maintenance de tels programmes demande cependant plus de temps. Le langage assembleur est utilisé dans des situations où le temps de réponse du processeur est d'importance critique. Bien que cette génération soit un progrès significatif par rapport à la génération précédente, elle reste très primitive par rapport aux possibilités offertes par les langages de 3e et de 4e génération.
Les langages de 3e et 4e génération sont dits de haut niveau : les langages sont plus proches des langues naturelles, ce qui rend les programmes plus faciles à écrire. Ils sont généralement indépendants de la machine : le même programme pourra être utilisé sur plusieurs types d'ordinateurs sans avoir été altéré — toutefois, un programme écrit en langage de haut niveau est souvent conçu pour utiliser un système d'exploitation en particulier.
Les langages de 3e génération sont apparus au début des années 1960. Ils ont permis d'écrire des programmes d'une manière plus familière, proche de l'anglais, et qui ne dépendent pas du processeur qui sera utilisé. Ce qui a apporté un progrès significatif par rapport aux deux générations précédentes. Les premiers langages de ce type ont été A-0 et FLOW-MATIC dans les années 50. Les programmes écrits dans ces langages nécessitent un compilateur ou un interpréteur pour être exécutés.

### 4e génération

Le terme de « langage de 4e génération » a été pour la première fois formalisé par James Martin en 1982 dans son livre Applications Development Without Programmers (« développement d'applications sans programmeurs ») pour désigner des langages de programmation de haut niveau. Comme le titre de l'ouvrage l'indique, le but de ce type de langage était de permettre à des développeurs non professionnels (par exemple des ingénieurs non informaticiens) de développer leurs propres applications.
Les langages de 4e génération sont apparus dans les années 1970. Contrairement aux langages polyvalents de troisième génération, les langages de 4e génération sont conçus pour résoudre des problèmes spécifiques. Il n'existe pas de définition formelle des langages de 4e génération. Les programmeurs reconnaissent qu'ils ne sont pas procéduraux, qu'ils sont plus proches des langues naturelles que les langages de 3e génération, et plus faciles à utiliser.
De tels langages permettent aux programmeurs d'écrire des programmes avec peu de code, ce qui augmente leur productivité. Les programmes écrits dans ces langages s'exécutent plus lentement et sont plus gourmands en ressources, et les programmeurs préféreront dans certains cas utiliser un langage de 3e ou de 2e génération. Les langages de 4e génération sont souvent utilisés pour accéder aux bases de données. Les catégories principales sont les langages de reporting, les langages de requête (SQL, Prolog…) et les générateurs de programmes. SQL est un langage utilisé pour écrire des demandes de recherche d'informations dans une base de données.
Le fait que le langage soit dédié implique que les opérations spécifiques au domaine traité sont incluses dans le lexique du langage là où des langages généralistes (tels que le langage C) demandent l'emploi de bibliothèques logicielles complémentaires ou des développements spécifiques. Le haut niveau d'abstraction implique des programmes plus brefs et plus lisibles dans le champ dédié du langage. En contrepartie ces programmes sont moins polyvalents et permettent moins d'optimisation que des langages de bas niveau et/ou généralistes.
Le but recherché de tels langages est de diminuer le coût de développement de logiciels et ils sont souvent utilisés comme outils CASE (sigle de computer-aided software engineering — génie logiciel assisté par ordinateur)$^,$.

## Exemples

* Genexus

### Base de données

* SQL
* PL/SQL (Oracle Database)
* PL/pgSQL (PostgreSQL)

### Mathématiques

* Scilab
* Mathematica
* MATLAB
* Maple

### Statistiques

* SAS
* R

### Gestion d'entreprise

* ABAP (SAP ERP)