Concevoir des patrons d'expressions
avec les concepts
 
 
Bruno Bachelet, Loïc Yon
(LIMOS, Clermont-Ferrand, France)
 
Rapport de recherche LIMOS/RR15-02
Laboratoire d'Informatique, de Modélisation et d'Optimisation des Systèmes
Université Blaise Pascal
Clermont-Ferrand, France
3 décembre 2015
 

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.

Ce rapport aborde la conception de patrons d'expressions (template expressions, i.e. des patrons qui représentent des expressions et sont généralement construits par le biais de la surcharge d'opérateurs) qui sont utiles pour développer un langage dédié embarqué (Embedded Domain Specific Language - 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.

Nous proposons d'utiliser la spécialisation de patron orientée concept pour parcourir les patrons d'expressions afin de faciliter la conception d'un EDSL. Cette approche est 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.

La , "Expression Templates with Concepts in C++", implémente la solution présentée dans ce rapport.