Si vous souhaitez explorer la conception moderne en C++ avec un bagage en programmation orientée objet (POO), commencez votre voyage avec la bibliothèque Loki.
Loki est une bibliothèque logicielle C++ créée par Andrei Alexandrescu et développée en parallèle de son livre «Modern C++ Design».
La communauté C++ a tout à gagner d'une bibliothèque offrant un cadre robuste pour implémenter les design patterns. Loki se distingue comme un candidat de choix pour ce rôle. C'est pourquoi moderniser Loki et y intégrer le plus grand nombre possible de design patterns largement utilisés profiterait grandement aux développeurs C++.
La bibliothèque utilise abondamment la métaprogrammation par templates C++ pour implémenter plusieurs constructions largement répandues, notamment les listes de types (typelists), les foncteurs, les singletons, les pointeurs intelligents, les fabriques d'objets, les visiteurs et les multiméthodes.
Voici la motivation derrière la conception de la bibliothèque, telle qu'expliquée par l'auteur :
- Loki permet aux utilisateurs de n'utiliser que les fonctionnalités dont ils ont besoin, chaque composant fonctionnant indépendamment des autres.
- Fidèle au principe « small is beautiful » (la petitesse est une qualité), Loki réduit ses dépendances internes au minimum.
- La bibliothèque privilégie « l'excellence multiplicative », en visant des conceptions nuancées et spécialisées obtenues par la combinaison de modules de comportement concis et abstraits (les politiques).
- Loki met l'accent sur les approches stratégiques plutôt que tactiques, en privilégiant les composants de conception et d'architecture plutôt que les détails de bas niveau.
- Étant une collection de design patterns plutôt qu'une conception monolithique, Loki minimise les hypothèses sur son environnement d'exécution et offre de la flexibilité grâce à des points d'extension bien définis pour intégrer des décisions par défaut.
- Loki est conçu pour les compilateurs modernes, recherchant la clarté du code dans le respect des normes du C++ sans faire de compromis pour les compilateurs moins capables.
- Ses composants sont conçus pour être compacts, faciles à comprendre et à implémenter, efficaces individuellement comme en combinaison, et très utiles dans des projets réels.
Loki intègre plusieurs design patterns précieux, dont :
- Factory
- Abstract Factory
- Visitor
- Singleton
Elle utilise également plusieurs idiomes utiles :
- conception basée sur les politiques (policy based design)
- répartiteur multiple (multiple dispatcher)
- Pimpl
- Printf (un remplacement de printf à typage sûr)
- création ordonnée d'objets statiques
- pointeur de garde de portée (scope guard pointer)
- allocateur de petits objets (small object allocator)
- pointeur intelligent
- vérification à la compilation
Une explication détaillée des idiomes mentionnés se trouve dans cette ressource.
instructive. CoderGears a lancé un concours pour mettre à jour cette remarquable bibliothèque. L'objectif principal est d'apprendre les design patterns à travers une bibliothèque bien conçue, tout en tirant le meilleur parti des fonctionnalités introduites dans les normes C++ récentes.
Pour les développeurs désireux d'entreprendre sa modernisation, la première question à traiter est la suivante : Quelle est la première étape de ce processus de refactorisation ?
Loki a été créée avant l'introduction des normes C++ récentes, ce qui signifie que certaines des classes initialement conçues et développées par l'auteur ont désormais des équivalents dans ces normes récentes. Il s'agit notamment de :
- SmartPointer
- Tuple
- NullType
- Typelist
- static_check
La première étape consiste donc à supprimer ces classes et à remplacer leurs utilisations dans le reste du code source.
Prochainement, nous prévoyons de publier une série de billets sur cette incroyable bibliothèque pour aider les développeurs à la moderniser.
