ВАЖНО v2 здесь. Это большое изменение. Последней версией v1 была версия 1.4.0.
DynaMix ( Dynamic Mixins ) — это альтернативный подход к объектно-ориентированному программированию и динамическому полиморфизму. Он позволяет пользователям создавать и изменять полиморфные объекты во время выполнения. Основным целевым языком является C++, но поддерживается также C.
Библиотека — это средство создания архитектуры проекта, а не достижения его цели. Это способствует расширяемости , читаемости , масштабируемости и совместимости . Он ориентирован на максимальную производительность и минимальные затраты памяти .
DynaMix применим для программной архитектуры систем со сложными объектами, включая, помимо прочего:
Библиотека использует тип dynamix::object
в качестве заполнителя, экземпляры которого могут быть расширены с помощью существующих классов (миксинов), обеспечивая тем самым конкретный экземпляр функциями примесей всех этих типов. Вероятно, наиболее важными типами функций примеси являются сообщения: функциональные объекты, которые в терминах C++-OOP можно рассматривать как методы. Функции миксина являются переопределяемыми и используют позднее связывание и единственную отправку. Возможны одноадресная и многоадресная рассылка.
Вот небольшой пример того, как может выглядеть код при использовании библиотеки:
// 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
Вот некоторые из ключевых особенностей библиотеки:
std::polymorphic_allocator
, чтобы обеспечить точную настройку распределения и добиться локальности кэша в критических частях кода.std::function
Известно, что следующие проекты используют DynaMix в качестве ключевой части своей программной архитектуры:
Документация является частью репозитория в каталоге doc/.
Приветствуется вклад в виде вопросов и запросов на включение.
Это программное обеспечение распространяется по лицензии MIT Software License.
См. прилагаемый файл ЛИЦЕНЗИЯ или скопируйте его здесь.
Copyright © 2013-2024 Борислав Станимиров, Захарий Караджов
.
Логотип DynaMix доступен по международной лицензии Creative Commons Attribution 4.0. Авторские права © 2018 area55git
DynaMix v2 — это полностью переписанная версия, и хотя она имеет ту же идею, что и v1, она несовместима с ней, имеет другой интерфейс, другую реализацию большинства функций и другую терминологию для некоторых.
Последней версией DynaMix v1 была версия 1.4.0. Документация доступна здесь
Список наиболее заметных различий между v1 и v2 можно найти здесь.
DynaMix изначально разрабатывалась как Boost.Mixin, но теперь представляет собой отдельную библиотеку, не зависящую от коллекции библиотек Boost.