Outil : C4TS++

Bibliothèque C++ pour la spécialisation de patrons orientée concept

La bibliothèque C4TS++, qui signifie "Concepts for Template Specialization in C++", fournit une implémentation pour le langage C++ permettant de définir des concepts et des raffinements de concepts, et de les utiliser pour spécifier des spécialisations sans ambiguïtés de composants génériques.

En programmation générique, les composants logiciels sont paramétrés sur des types. Quand il est disponible, un mécanisme de spécialisation statique permet de sélectionner, pour un jeu de paramètres donné, une version plus adaptée d'un composant générique que sa version initiale. Le mécanisme normal de spécialisation de patron du C++ repose sur le motif de type des paramètres, ce qui n'est pas toujours la meilleure manière de guider le processus de spécialisation: les motifs de type manquent certaines informations sur les types qui pourraient être pertinentes pour définir des spécialisations.

La notion de "concept", qui représente un ensemble de spécifications (incluant des aspects syntaxiques et sémantiques) pour un type, est reconnue pour être une approche intéressante pour contrôler la spécialisation de patron. Pour diverses raisons, les concepts ont été abandonnés dans le standard C++11, cette bibliothèque repose donc sur des techniques de métaprogrammation par patrons pour déclarer des concepts, des relations de "modélisation" (signifiant qu'un type satisfait les spécifications d'un concept) et des relations de "raffinement" (signifiant qu'un concept raffine les spécifications d'un autre concept).

A partir d'une taxonomie de concepts et de spécialisations de patrons basées sur les concepts, un mécanisme automatique sélectionne la version la plus appropriée d'un composant générique pour une instanciation donnée. Notre solution, qui repose uniquement sur une bibliothèque, permet aussi une extension rétroactive: de nouveaux concepts, relations et spécialisations de patrons peuvent être définis à tout moment; de tels ajouts seront alors pris en compte par le mécanisme de spécialisation.



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

Auteurs : Bruno BACHELET, Antoine MAHUL, Loïc YON