Précédent : Principes, techniques et outils de
Remonter : Résultats nouveaux Suivant :
Spécialisation
de systèmes d'exploitation
Participants : Charles Consel, Scott Thibault, Renaud
Marlet, Gilles Muller.
Mots clés : génie logiciel, langage dédié, interprète, machine abstraite .
Glossaire :
Langage dédié langage qui permet d'exprimer des variations à l'intérieur d'un domaine ou d'une famille d'applications.
Les générateurs d'applications sont une approche très prometteuse pour la réutilisation logicielle. En particulier, ils apportent des gains de productivité supérieurs aux méthodes basées sur la réutilisation de composants logiciels et permettent d'appliquer des méthodes formelles. Cependant, malgré ses avantages, l'industrie du logiciel hésite à adopter cette approche du fait de l'absence d'outils d'aide à la construction de générateurs d'applications. Nous avons proposé un cadre général pour le développement de tels générateurs [[21]] reposant sur une approche à deux niveaux. Le premier niveau consiste à identifier les objets et opérations fondamentales du domaine d'applications, de manière à former une machine abstraite. Le second niveau consiste en la conception d'un langage dédié, qui permet d'exprimer des variations à l'intérieur d'une famille d'applications. Un programme dans ce langage dédié est implémenté via un interpréteur à l'aide des opérations de la machine abstraite définie au premier niveau. Cette structure en couche est très flexible, mais pose a priori des problèmes de performance. Grâce à l'utilisation systématique de l'évaluation partielle, il est possible de supprimer le surcoût de l'interprétation [[28]].
Ce schéma général de conception et d'implémentation d'environnements pour les langages dédiés a été validé sur GAL, un langage dédié pour l'écriture de pilotes de cartes graphiques (voir module 5.4), et PLAN-P, un langage dédié pour l'écriture de protocoles dans les réseaux actifs (voir module 5.5). Ces deux langages nous ont permis de mettre en évidence les avantages que l'on attribue généralement aux langages dédiés : productivité accrue, programmation de haut niveau grâce à une plus grande abstraction, vérifications formelles facilitées. À titre d'exemple, le facteur de réduction en taille par rapport à un programme équivalent écrit en C est de 10 pour GAL et de 3 pour PLAN-P. GAL permet la vérification de propriétés sur les drivers comme le non-recouvrement de registres d'entrées/sorties. PLAN-P permet la vérification de propriétés telles que la terminaison des protocoles, la livraison et la non-duplication exponentielle des packets.
Pour de nombreuses approches de génie logiciel, comme celle
des langages dédiés, l'évaluation partielle s'avère être un outil
tout à fait général pour traiter le compromis
flexibilité/efficacité qui existe dans ce domaine [[13],[21]]. Après
recherche de la source de l'inefficacité au sein de plusieurs
architectures logicielles, nous avons observé que celle-ci était
en partie due à l'intégration des données et du contrôle lors de
l'assemblage des divers composants d'un système. La raison tient
à ce que la flexibilité n'apparaît pas uniquement au stade de la
conception, mais se matérialise également dans l'implémentation.
Nous proposons d'utiliser la spécialisation comme moyen
systématique pour améliorer la performance et, dans certains cas,
réduire la taille des programmes. Nous avons étudié pour cela
plusieurs implémentations représentatives de mécanismes flexibles
employés dans diverses architectures logicielles : diffusion
sélective, recherche de motifs, interpréteurs, couches
logicielles, bibliothèques génériques. Nous avons montré comment
une application systématique de l'évaluation partielle conduisait
à l'optimisation de ces mécanismes [[16]].