IMPORTANT v2 est ici. C'est un grand changement. La dernière version v1 était la v1.4.0
DynaMix ( Dynamic Mixins ) est une approche alternative de la programmation orientée objet et du polymorphisme dynamique. Il permet aux utilisateurs de composer et de modifier des objets polymorphes au moment de l'exécution. Le langage cible principal est le C++, mais le C est également pris en charge.
La bibliothèque est un moyen de créer l'architecture d'un projet plutôt que d'atteindre son objectif. Il contribue à l'extensibilité , à la lisibilité , à l'évolutivité et à l'interopérabilité . Il se concentre sur des performances maximales et une surcharge de mémoire minimale .
DynaMix s'applique à l'architecture logicielle de systèmes comportant des objets complexes, notamment :
La bibliothèque utilise le type dynamix::object
comme espace réservé, dont les instances peuvent être étendues avec des classes existantes (mixins), fournissant ainsi à une instance particulière les fonctionnalités de mixin de tous ces types. Les types de fonctionnalités mixin les plus importants sont probablement les messages : des objets fonctionnels qui, en termes C++-OOP, peuvent être considérés comme des méthodes. Les fonctionnalités Mixin sont remplaçables et utilisent une liaison tardive et une répartition singulière. Les monodiffusions et les multidiffusions sont possibles.
Voici un petit exemple de ce à quoi peut ressembler le code en utilisant la bibliothèque :
// assuming my_objects.get_ally(0); is a way to get an ally to the
// main character in a game
dynamix::object& obj = my_objects.get_ally( 0 );
// now let's make the object think some positive thoughts about the
// main character
think (obj); // C++ doesn't allow us to have obj.think().
// DynaMix's messages are like standalone functions
// composition
mutate (obj, dynamix::add<flying_creature>());
// object can now respond to fly()
fly (obj); // ...instead of obj.fly()
// mutation
mutate (obj
, dynamix::remove<ally>()
, dynamix::add<enemy>()
);
think (obj); // the same object now thinks negative thoughts about the main
// character, since it's no longer an ally, but an enemy
Voici quelques-unes des principales fonctionnalités de la bibliothèque :
std::polymorphic_allocator
pour permettre d'affiner les allocations et d'obtenir la localité du cache dans les parties critiques du codestd::function
Les projets suivants sont connus pour utiliser DynaMix comme élément clé de leur architecture logicielle :
La documentation fait partie du dépôt dans le répertoire doc/.
Les contributions sous forme de problèmes et de demandes de tirage sont les bienvenues.
Ce logiciel est distribué sous la licence logicielle MIT.
Voir le fichier d'accompagnement LICENCE ou copie ici.
Copyright © 2013-2024 Borislav Stanimirov, Zahary Karadjov
.
Le logo DynaMix est sous licence internationale Creative Commons Attribution 4.0. Droits d'auteur © 2018 zone55git
DynaMix v2 est une réécriture complète et bien qu'il ait la même idée que la v1, il est incompatible avec celle-ci et a une interface différente, une implémentation différente pour la plupart des fonctionnalités et une terminologie différente pour certaines.
La dernière version de DynaMix v1 était la v1.4.0. La documentation est disponible ici
Une liste des différences les plus notables entre la v1 et la v2 peut être trouvée ici.
DynaMix a été initialement développé sous le nom de Boost.Mixin mais est désormais une bibliothèque distincte qui ne dépend pas de la collection de bibliothèques Boost.