WICHTIG v2 ist da. Es ist eine große Veränderung. Die letzte Version 1 war Version 1.4.0
DynaMix ( Dynamic Mixins ) ist eine alternative Variante der objektorientierten Programmierung und des dynamischen Polymorphismus. Damit können Benutzer polymorphe Objekte zur Laufzeit erstellen und ändern. Die Hauptzielsprache ist C++, es wird jedoch auch C unterstützt.
Die Bibliothek ist eher ein Mittel, um die Architektur eines Projekts zu erstellen, als seinen Zweck zu erreichen. Es trägt zur Erweiterbarkeit , Lesbarkeit , Skalierbarkeit und Interoperabilität bei. Der Schwerpunkt liegt auf maximaler Leistung und minimalem Speicheraufwand .
DynaMix ist für die Softwarearchitektur von Systemen mit komplexen Objekten anwendbar, einschließlich, aber nicht beschränkt auf:
Die Bibliothek verwendet den Typ dynamix::object
als Platzhalter, dessen Instanzen mit vorhandenen Klassen (Mixins) erweitert werden können und so einer bestimmten Instanz die Mixin-Funktionen aller dieser Typen zur Verfügung stellen. Die wahrscheinlich wichtigsten Arten von Mixin-Features sind Nachrichten: funktionale Objekte, die in C++-OOP-Begriffen als Methoden betrachtet werden können. Mixin-Funktionen sind überschreibbar und verwenden Late Binding und Singular Dispatch. Unicasts und Multicasts sind möglich.
Hier ist ein kleines Beispiel dafür, wie Code mit der Bibliothek aussehen könnte:
// 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
Hier sind einige der wichtigsten Funktionen der Bibliothek:
std::polymorphic_allocator
um eine Feinabstimmung der Zuordnungen zu ermöglichen und die Cache-Lokalität in kritischen Teilen des Codes zu erreichenstd::function
Es ist bekannt, dass die folgenden Projekte DynaMix als Schlüsselelement ihrer Softwarearchitektur verwenden:
Die Dokumentation ist Teil des Repos im Verzeichnis doc/.
Beiträge in Form von Issues und Pull Requests sind willkommen.
Diese Software wird unter der MIT-Softwarelizenz vertrieben.
Sehen Sie sich die beiliegende Datei LIZENZ an oder kopieren Sie sie hier.
Copyright © 2013-2024 Borislav Stanimirov, Zahary Karadjov
.
Das DynaMix-Logo ist unter einer Creative Commons Attribution 4.0 International License lizenziert. Copyright © 2018 area55git
DynaMix v2 ist eine komplette Neufassung und obwohl es die gleiche Idee wie v1 hat, ist es mit dieser inkompatibel und verfügt über eine andere Schnittstelle und eine andere Implementierung für die meisten Funktionen und eine andere Terminologie für einige.
Die letzte Version von DynaMix v1 war v1.4.0. Die Dokumentation finden Sie hier
Eine Liste der bemerkenswertesten Unterschiede zwischen v1 und v2 finden Sie hier.
DynaMix wurde ursprünglich als Boost.Mixin entwickelt, ist aber jetzt eine separate Bibliothek, die nicht von der Boost-Bibliothekssammlung abhängig ist.