IMPORTANTE v2 está aqui. É uma grande mudança. A última versão v1 foi v1.4.0
DynaMix ( Dynamic Mixins ) é uma abordagem alternativa à programação orientada a objetos e ao polimorfismo dinâmico. Ele permite que os usuários componham e modifiquem objetos polimórficos em tempo de execução. A principal linguagem de destino é C++, mas C também é compatível.
A biblioteca é um meio de criar a arquitetura de um projeto, em vez de atingir seu propósito. Ajuda com extensibilidade , legibilidade , escalabilidade e interoperabilidade . Ele se concentra no desempenho máximo e no mínimo de sobrecarga de memória .
DynaMix é aplicável à arquitetura de software de sistemas com objetos complexos, incluindo, mas não limitado a:
A biblioteca usa o tipo dynamix::object
como espaço reservado, cujas instâncias podem ser estendidas com classes existentes (mixins), fornecendo assim uma instância particular com os recursos de mixin de todos esses tipos. Provavelmente os tipos mais importantes de recursos mixin são mensagens: objetos funcionais que em termos C++-OOP podem ser considerados métodos. Os recursos do Mixin são substituíveis e usam ligação tardia e envio singular. Unicasts e multicasts são possíveis.
Aqui está um pequeno exemplo de como o código pode parecer usando a 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
Aqui estão alguns dos principais recursos da biblioteca:
std::polymorphic_allocator
para permitir o ajuste fino das alocações e alcançar a localidade do cache em partes críticas do códigostd::function
Os seguintes projetos são conhecidos por usar DynaMix como peça-chave de sua arquitetura de software:
A documentação faz parte do repositório no diretório doc/.
Contribuições na forma de problemas e solicitações pull são bem-vindas.
Este software é distribuído sob a licença de software do MIT.
Consulte o arquivo LICENÇA que acompanha ou copie aqui.
Direitos autorais © 2013-2024 Borislav Stanimirov, Zahary Karadjov
.
O logotipo DynaMix está licenciado sob uma Licença Creative Commons Atribuição 4.0 Internacional. Direitos autorais © 2018 area55git
DynaMix v2 é uma reescrita completa e embora tenha a mesma ideia da v1, é incompatível com ela e possui uma interface diferente e implementação diferente para a maioria dos recursos e terminologia diferente para alguns.
A última versão do DynaMix v1 foi a v1.4.0. A documentação está disponível aqui
Uma lista das diferenças mais notáveis entre v1 e v2 pode ser encontrada aqui.
DynaMix foi inicialmente desenvolvido como Boost.Mixin, mas agora é uma biblioteca separada que não depende da coleção de bibliotecas Boost.