среда, 9 октября 2013 г.

[prog.c++] Зафиксирована версия SObjectizer-5.2.0

Версия 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 за огромную помощь в подготовке этой версии!

Отправить комментарий