IMPORTANTE v2 ya está aquí. Es un gran cambio. La última versión v1 fue la v1.4.0
DynaMix ( Dynamic Mixins ) es una versión alternativa de la programación orientada a objetos y el polimorfismo dinámico. Permite a los usuarios componer y modificar objetos polimórficos en tiempo de ejecución. El principal idioma de destino es C++, pero también se admite C.
La biblioteca es un medio para crear la arquitectura de un proyecto en lugar de lograr su propósito. Ayuda con la extensibilidad , legibilidad , escalabilidad e interoperabilidad . Se centra en el máximo rendimiento y una mínima sobrecarga de memoria .
DynaMix es aplicable a la arquitectura de software de sistemas con objetos complejos que incluyen, entre otros:
La biblioteca utiliza el tipo dynamix::object
como marcador de posición, cuyas instancias se pueden ampliar con clases existentes (mixins), proporcionando así una instancia particular con las características mixin de todos esos tipos. Probablemente los tipos más importantes de características de mixin sean los mensajes: objetos funcionales que en términos de C++-OOP pueden considerarse métodos. Las funciones de Mixin se pueden anular y utilizan enlace tardío y envío singular. Son posibles unidifusiones y multidifusiones.
Aquí hay un pequeño ejemplo de cómo se vería el código usando la biblioteca:
// 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
Estas son algunas de las características clave de la biblioteca:
std::polymorphic_allocator
para permitir el ajuste de asignaciones y lograr la localidad de caché en partes críticas del código.std::function
Se sabe que los siguientes proyectos utilizan DynaMix como pieza clave de su arquitectura de software:
La documentación es parte del repositorio en el directorio doc/.
Se aceptan contribuciones en forma de issues y pull request.
Este software se distribuye bajo la licencia de software MIT.
Consulte el archivo adjunto LICENCIA o cópielo aquí.
Copyright © 2013-2024 Borislav Stanimirov, Zahary Karadjov
.
El logotipo de DynaMix tiene una licencia internacional Creative Commons Attribution 4.0. Derechos de autor © 2018 area55git
DynaMix v2 es una reescritura completa y, aunque tiene la misma idea que la v1, es incompatible con ella y tiene una interfaz diferente, una implementación diferente para la mayoría de las funciones y una terminología diferente para algunas.
La última versión de DynaMix v1 fue la v1.4.0. La documentación está disponible aquí.
Puede encontrar una lista de las diferencias más notables entre v1 y v2 aquí.
DynaMix se desarrolló inicialmente como Boost.Mixin, pero ahora es una biblioteca separada que no depende de la colección de bibliotecas de Boost.