Версия 5.2.0 фреймворка SObjectizer зафиксирована в svn-репозитории на SourceForge в виде тега. В этой версии устранен ряд некрасивостей и шероховатостей, которые были обнаружены в версиях 5.0 и 5.1.
В виде дистрибутива версия 5.2.0 пока выкладываться на SourceForge не будет. Сейчас мы займемся выпуском адаптированных под 5.2 подпроектов so_5_transport, so_log_2, so_sysconf_4 и mbapi_4. А вот уже после этого будет собран один архив с согласованными между собой версиями подпроектов, который и будет помещен в раздел Files на SourceForge. В будущем мы планируем поступать именно так: раз в два-три месяца выкладывать архив с последними актуальными версиями всех подпроектов. Отдельные версии отдельных подпроектов будут доступны в виде тегов в репозитории.
На ближайшее будущее для SObjectizer запланированы следующие шаги:
- дальнейшее вылизывание кода ядра SObjectizer;
- профилирование и оптимизация SObjectizer с целью повышения производительности его работы;
- размещение на SourceForge актуальных обучающих материалов/документации по SObjectizer на английском языке.
Тут я хочу спросить совета у своих читателей. Очень бы хотелось сделать на SObjectizer демонстрационную реализацию какой-то не очень объемной задачи. Как раз в качестве иллюстрации возможностей SO. Ну типа того, что "на Erlang-е это выглядит вот так, на Java вот так, а на SO -- вот так". Надеюсь, что кто-нибудь из читателей предложит пример такой задачи. Чтобы демонстрация была не на том, что интересно персонально мне. А на том, что интересно потенциальным пользователям SObjectizer.
Какого плана может быть эта задача? Разного, наверное :)
- SObjectizer упрощает реализацию concurrency (нет хорошего русского термина, к сожалению): т.е. когда приложению нужно параллельно обрабатывать разные сигналы от разных источников, возможно, используя разные алгоритмы для разных сигналов.
- Objectizer может использоваться для распараллеливания операций/действий: агенты распределяются по разным нитям, агент-координатор озадачивает каждого из них, а так же собирает результаты их работы;
- распределенные приложения можно делать с использованием SObjectizer, когда компоненты обмениваются между собой сообщениями (этот слой реализует подпроект mbapi_4).
Так что если кто-то из читателей предложит интересную демонстрационную задачу, то мы попробуем ее реализовать на SO и затем опубликовать описание решения с пояснениями.
Ну а сейчас немного подробностей о том, что же было сделано в SObjectizer 5.2:
- изменен подход к обеспечению null-safety для пересылаемых между агентами сообщений. Введено строгое деление на сообщения и сигналы, для первых отсылка происходит через deliver_message, для вторых -- deliver_signal. Подробнее об этом я рассказывал пару недель назад;
- полностью изменен подход к информированию об ошибках. Раньше пользователь мог выбирать, сообщит ли ему SObjectizer об ошибке исключением или же вернет код ошибки. При этом, однако, вместо кода ошибки вполне можно было получить и исключение. Сейчас старого понятия throwing_strategy_t нет вообще, а обо всех ошибках сообщается посредством исключений;
- изменен формат методов add_agent у agent_coop_t. Раньше пользователю нужно было сконструировать умную ссылку на агента (agent_ref_t) и ее передать ее в add_agent. Что во многих случаях было неудобно. Поэтому сейчас add_agent принимает либо голый указатель на агента, либо же std::unique_ptr
, где T -- это любой наследник agent_t; - произведена небольшая оптимизация механизма диспетчирования сообщений, на одну операцию атомарного инкремента/декремента стало меньше;
- изменен формат конструктора so_environment_t, теперь во многих случаях параметры в него нужно будет передавать с использованием функции std::move;
- ну и еще ряд мелких изменений и улучшений в коде.
Так что SObjectizer 5.2 нарушил 100% совместимость с предыдущими версиями, но зато избавился от нескольких косяков. Так что использовать 5.2 будет проще, чем 5.1.
В заключение хочу сказать большое спасибо всем участникам The SObjectizer Project за огромную помощь в подготовке этой версии!
Комментариев нет:
Отправить комментарий