Outil : ETC++

Bibliothèque C++ orientée concept pour les patrons d'expressions

La bibliothèque ETC++, "Expression Templates with Concepts in C++", fournit une implémentation des patrons d'expressions reposant sur les concepts pour concevoir rapidement et de manière fiable un langage dédié embarqué (Embedded Domain Specific Language - EDSL).

Les concepts seront probablement introduits dans une future norme du C++. Ils servent notamment à contraindre les paramètres d'un patron, ce qui permet de vérifier des exigences sur des paramètres du patron plus tôt dans le processus de compilation, et de fournir ainsi des messages d'erreur plus compréhensibles pour l'utilisateur.

Ils peuvent servir aussi dans la spécialisation des patrons, conduisant alors à un meilleur contrôle de la sélection de la version la plus appropriée d'un patron pour une instanciation donnée. Ce dernier aspect offre de nouvelles possibilités pour la conception de bibliothèques génériques, car il améliore le mécanisme de spécialisation des patrons et le positionne comme une solide alternative à l'héritage quand la liaison statique peut remplacer la liaison dynamique.

Les patrons d'expressions (expression templates, i.e. des patrons qui représentent des expressions et sont généralement construits par le biais de la surcharge d'opérateurs) sont utiles pour développer un EDSL, et peuvent accélérer l'évaluation d'une expression en retardant l'évaluation d'opérations intermédiaires afin d'éviter des objets temporaires inutiles.

Cette bibliothèque utilise la spécialisation de patron orientée concept pour parcourir les patrons d'expressions afin de faciliter la conception d'un EDSL. Elle s'appuie sur une variante statique du célèbre patron de conception visiteur qui remplace les redéfinitions de méthodes du double dispatch du patron de conception original par des spécialisations de patron reposant sur les concepts. Un exemple d'EDSL pour la programmation linéaire développé avec notre solution démontre que la conception orientée concept aide à produire un code concis et fiable.



https://forge.uca.fr/projects/et-concepts

Auteurs : Bruno BACHELET, Loïc YON