Mots clés : langage fonctionnel,
langage de programmation logique, correction, efficacité,
évolutivité, maintenance .
Résumé :
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 est 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.