Les résultats présentés dans ce mémoire portent
sur plusieurs aspects d'un langage de programmation,
Prolog,
qui a été défini vers 1986 par
Dale Miller* à l'université de Pennsylvanie
(UPenn).
Ils ont été obtenus au cours d'environ huit années, deux thèses, quelques stages
(
, Magistère, ingéniorat),
l'implémentation d'un système
Prolog complet
et plusieurs applications des recherches d'autres auteurs.
Nous les présentons ici plutôt informellement,
en les faisant précéder d'une discussion
sur la recherche en langage de programmation et d'une présentation de
Prolog.
Nous éludons le plus possible les travaux précédant cette période
(gestion de mémoire,
*),
même s'ils ont servi de «marche d'approche» aux travaux présentés ici.
Ces travaux ont donc porté sur un langage de programmation
(implémentation, application, extension),
et les utilisateurs de notre système ont trouvé des réponses à certains de
leurs problèmes dans ce langage de programmation
ou dans d'autres langages qu'il était aisé de mettre en
uvre en
Prolog.
Cette manière de proposer (ou trouver) des réponses linguistiques aux
questions posées par l'exploration des applications de l'informatique
s'oppose à un point de vue plus dénotationnel qui montre que la plupart des
langages de programmation peuvent exprimer les mêmes fonctions.
Nous défendrons le point de vue linguistique dans un essai
sur la recherche en programmation.
Le point de vue linguistique conduit à trouver des réponses dans un langage
existant ou à en inventer un sur mesure.
Dans le dernier cas,
on ne souhaite pas toujours le mettre en
uvre de la manière lourde
et analytique des compilateurs et interpréteurs traditionnels.
Dans bien des cas,
le langage inventé est une variante d'un langage existant et le passage
du nouveau à l'ancien se conçoit à peu de frais,
au moins conceptuellement.
On préférera donc une mise en
uvre légère qui ne s'occupe que des
différences avec le langage d'origine.
La technique de la métaprogrammation permet cette approche,
mais exige des capacités particulières du langage de métaprogrammation.
Nous montrons dans un autre essai comment
Prolog peut être considéré comme
un langage de métaprogrammation.
Le langage
Prolog consiste en une combinaison originale de traits déja
présents dans des langages de programmation
appartenant à des familles distinctes
et de traits complètement nouveaux.
La question de son implémentation se pose donc immédiatement.
Nous y avons répondu en proposant une architecture de système
Prolog,
en exhibant certains aspects qui sont cruciaux pour l'efficacité de l'exécution
et en proposant des stratégies pour les implémenter.
Nous présentons une sélection de ces aspects dans un essai sur l'implémentation.
Nous avons eu un retour de l'utilisation de notre système
par nous-même et par des utilisateurs plus ou moins distants.
En effet,
nous sommes les utilisateurs de notre propre système d'abord parce qu'il
s'agit d'un autocompilateur
(un compilateur de
Prolog écrit en
Prolog),
et aussi parce nous avons exploré les relations entre
Prolog et les grammaires
formelles.
Un essai décrit ce travail sur les grammaires formelles
et un autre décrit les applications entreprises par d'autres utilisateurs.
Ce retour d'expérience
nous a fait essentiellement conclure que la discipline de typage de
Prolog n'était pas satisfaisante.
Nous avons donc proposé une discipline nouvelle en programmation logique
qui s'applique aussi bien à Prolog qu'à
Prolog,
et qui résout les problèmes posés.
Nous décrivons ce travail dans un autre essai qui nous conduit directement
au dernier essai sur les prospectives car cette nouvelle discipline de
typage n'a pas encore été implémentée.
Nous y décrivons aussi d'autres travaux qui nous ont été inspirés par ces années
de recherche,
que nous n'avons jamais entrepris,
mais que nous ne désespérons pas d'entreprendre ou de voir entreprendre.
Nous présentons ces essais dans l'ordre de cette introduction. Il correspond à peu près au déroulement du temps, et va du plus général au plus particulier avec un retour aux idées générales dans la prospective.