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

Un langage de programmation de cinquième génération, abrégé L5G, est un langage de programmation basé sur le concept de résolution de problèmes en utilisant des contraintes données au programme, plutôt que d'utiliser un algorithme écrit par un programmeur (3e génération) ou une spécification formelle de représentation en tables et interrogations SQL (4e génération). La plupart des langages fonctionnant par contraintes ou par programmation logique ainsi que quelques langages déclaratifs sont des langages de cinquième génération.

## L3G, L4G, L5G…

Les langages de programmation de quatrième génération (L4G) transforment, avec plus ou moins d'efficacité selon les fournisseurs, des requêtes SQL normalisées en algorithmes, contrairement à ceux de troisième génération où le programmeur codait dans le détail ses propres algorithmes. Ces L4G mettent l'accent sur l'usage d'une (ou plus) base de données relationnelle, souvent avec interface graphique…. Les langages de cinquième génération prennent le problème encore en amont : idéalement, que l'ordinateur puisse résoudre n'importe quel problème juste formulé par ses contraintes et son objectif. L'utilisateur - il ne s'agit déjà plus d'un programmeur - a juste besoin (idéalement toujours) de recenser ce qui doit être fait, et sous quelles contraintes, sans rentrer dans le détail, et doit obtenir une ou des solutions correspondantes.

Les systèmes de cinquième génération utilisent une approche métier, et leurs internes sont programmés dans des langages comme Prolog, OPS5, Mercury, Haskell, etc.

## Historique

Un précurseur de ces langages et systèmes fonctionnels a été Lisp, et les postes de travail LISP. ICAD est un bon exemple. Puis, il y a beaucoup de Meta langages, comme KL-ONE.

## Cinquième génération japonaise

Le Japon a beaucoup investi (temps et capitaux) dans ces projets de cinquième génération (FGCS pour Fifth generation computer systems), le MITI affichant l'objectif de concevoir un énorme réseau informatique de machines utilisant ces outils. Les résultats ne furent pas à la hauteur des espérances, dériver un algorithme efficace à partir d'un ensemble de contraintes devenant difficile dès qu'on sort des cas très simples (Tours de Hanoï, par exemple). Cette étape est bien plus ardue à programmer que la bonne optimisation d'une simple requête L4G, qui n'a pourtant elle-même cessé de progresser de 1980 à aujourd'hui (2013) avec les versions successives d'Oracle, DB2 et autres.

## Aujourd'hui

Les langages et moteurs d'inférences de cinquième génération restent enseignés en université, et servent aussi à réaliser des applications d'intelligence artificielle modestes : suggestions pour un trajet aérien, un itinéraire routier, un parcours urbain, partie de cartes automatisée. Comme l'avait prévu Philippe Kahn lors de l'annonce de son Turbo Prolog, « ce n'est pas une révolution, mais une évolution; vous réalisiez des applications en C, vous en réaliserez d'autres, autrefois compliquées autrement, en Prolog, voilà tout ». Cela reste évidemment valable pour d'autres langages, comme Haskell.

