![]()
Précédent : Test de logiciels
Remonter : Fondements scientifiques Suivant :
Domaines
d'applications
Mots clés : Langages fonctionnels, Langages de programmation logique, Correction, Efficacité, Évolutivité, Maintenance .
Les langages de programmation déclaratifs sont fondés sur la déclaration du résultat à atteindre plutôt que du moyen de l'atteindre. Leur mise en oeuvre exige un effort spécifique pour passer automatiquement d'une définition de nature déclarative à une version opérationnelle efficace. En contrepartie, ces langages sont adaptés à l'usage de méthodes formelles (analyse de programmes, vérification). Les langages déclaratifs étudiés dans le projet LANDE appartiennent soit à la famille de la programmation fonctionnelle, soit à celle de la programmation logique.
Les langages de programmation forment des familles qui incarnent des disciplines de programmation. La famille des langages de programmation déclaratifs comprend les langages qui sont fondés sur la déclaration du résultat à atteindre plutôt que du moyen de l'atteindre. La discipline mise en oeuvre dans ces langages consiste à s'engager le moins possible dans des détails opérationnels afin de diminuer le fossé entre ce que souhaite le programmeur et ce que le langage de programmation permet d'exprimer.
Le projet LANDE s'intéresse à deux espèces de
langages de programmation déclaratifs qui sont les langages
fonctionnels (Lisp, ML, Haskell, etc.) et les langages logiques
(Prolog,
Prolog, Mercury, etc.). Une
remarque importante à faire à leur sujet est que ces langages
utilisent des formalismes qui ont présidé à la formalisation de
la notion de calcul: le
-calcul [Ros84] et le
calcul des prédicats. Dans les deux cas, les programmes sont des
formules mais elles sont interprétées différemment.
L'opération essentielle des langages fonctionnels est la
réduction qui permet de remplacer une formule par une
autre formule équivalente, mais plus «simple», jusqu'à obtenir
une formule qui n'est plus réductible, et que l'on appelle une
forme normale. On convient que cette forme normale est
le résultat du calcul. L'opération essentielle des langages
logiques est la déduction. On l'emploie pour construire
des preuves, et on convient que le résultat du calcul est extrait
de ces preuves. Il s'agit le plus souvent des valeurs données
dans les preuves à certaines variables. Pour autant que la
correspondance de Curry-Howard s'applique (langages fonctionnels
typés), la preuve est l'objet commun à ces deux familles de
langages de programmation; les langages fonctionnels les
normalisent, et les langages logiques les construisent.
L'intérêt premier des langages de programmation déclaratifs et qu'ils se prêtent aux manipulations formelles. La raison majeure est l'absence d'effets de bord dans ces langages: les entités de base (fonctions ou prédicats) peuvent ainsi être manipulées directement comme des objets mathématiques.
Les enjeux des langages fonctionnels et logiques sont assez similaires. D'une part, il faut réussir à mettre en oeuvre efficacement les calculs décrits dans ces langages. D'autre part, il faut concevoir les outils de programmation qui accompagnent ces langages.
Un autre formalisme déclaratif traité dans le projet LANDE est celui des bases de données déductives. Il partage les mêmes fondements que la programmation logique mais à des fins différentes. Ici, l'enjeu est la description de grands volumes de données, des lois qui structurent ces données et des requêtes des utilisateurs. La complétude calculatoire n'est plus recherchée. Au contraire, on veut que le problème de répondre à une requête soit décidable.