пятница, 2 ноября 2018 г.

[prog.memories] Беглый взгляд на эволюцию SObjectizer-5.5 за прошедшие четыре года

Первый релиз SObjectizer-а в рамках ветки 5.5 состоялся чуть больше 4-х лет назад, в начале октября 2014-го. На следующей неделе планируется релиз версии 5.5.23, которая может стать финальной в рамках ветки 5.5.

Поэтому поводу есть желание написать статью для Хабра, в которой будет сделан обзор того, что появилось в SO-5.5 за это время и как это все повлияло на сам SObjectizer, и на разработку с его использованием. По ходу подготовки этой статьи сделал небольшой конспектик изменений. И сам слегка прифигел. Привожу его в текущем, еще не обработанном виде.

Хрен знает, зачем я это делаю. Может чтобы похвастаться. Может для того, чтобы те горячие головы, которые думают, что они быстренько слепят на коленке свой акторный фреймворк вместо того, чтобы взять что-то из существующего, посмотрели и задумались: а оно того стоит?

Не стоит. Берите лучше то, что есть. Не нравится вам SObjectizer -- возьмите что-нибудь другое. Тот же CAF или QP/C++. Выбор есть. Полагаю, этот выбор будет всяко лучше повторения хотя бы части пути, который мы уже прошли. И, прошу не забывать, что речь идет не только о том, чтобы придумать и запрограммировать. Но и о том, чтобы отладить, задокументировать и донести ваше творение до других людей. Которые, возможно, думают, что лучше они сами что-нибудь на коленке слепят.

Итак, вот список с ссылками на соответствующие разделы документации. Список не полный, включал в него только самые знаковые изменения/нововведения. Этот список еще предстоит переосмыслить, отранжировать и преобразовать в статью. Но, надеюсь, общее впечатление можно составить.

Да, и в этом списке нет того, что вошло в состав so_5_extra.


После отказа от ACE произошел переход на timertt и появилась возможность выбирать таймерные механизмы:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.0%20Specifying%20timer%20mechanism/

Добавилась возможность автоматического именования коопераций:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.1%20The%20autoname%20feature%20for%20cooperations/

Добавилось семейство функций send, которое сейчас является основным механизмом отсылки сообщений:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.1%20New%20family%20of%20send%20functions/
Это семейство затем было упрощено и унифицировано:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.9%20New%20format%20of%20send%20function/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.19%20New%20Format%20of%20Send%20Functions%20to%20Simplify%20Message%20Redirection/
https://sourceforge.net/p/sobjectizer/wiki/5.5.20%20New%20overloads%20for%20send_delayed%20and%20send_periodics/

Вспомогательные функции request_value и request_future:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.9%20New%20helper%20functions%20request_future%20and%20request_value/

Добавлен метод so_subscribe_self(), который сейчас активно используется:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.1%20Method%20so_subscribe_self%28%29%20for%20agent_t/

Добавлена возможность создания подписок через состояния:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.1%20Subscribing%20agent%20events%20via%20state%20objects/

Добавлена возможность настраивать некоторые свойства агентов.
Хранение подписок:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.3%20Agent%20tuning%20options%20-%20subscription%20storage%20type%20selection/

У кооперации появились методы make_agent и make_agent_with_binder, которые сейчас повсеместно используются для наполнения коопераций:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.4%20make_agent%20and%20make_agent_with_binding%20methods/

Добавлено такое понятие, как приватные диспетчеры:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.4%20Private%20dispatchers/

Появились средства защиты агентов от перегрузки в виде message limits:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.4%20Message%20limits/

Появились средства для run-time мониторинга:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.4%20Run-time%20monitoring/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.18%20New%20messages%20distribution_started%20and%20distribution_finished/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.18%20Work%20thread%20activity%20tracking/

Появились фильтры доставки сообщений:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.5%20Message%20delivery%20filters/

Появились функции introduce_coop и introduce_child_coop, которые сейчас являются основными средства создания коопераций:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.5%20introduce_coop%20and%20introduce_child_coop%20helpers/

Появилась поддержка приоритетов для агентов:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5%20In-depth%20-%20Priorities%20of%20Agents/
А также ряд новых диспетчеров, которые учитывают приоритеты агентов.

Класс wrapped_env_t:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.9%20New%20wrapped_env%20class/

Поддержка отсылки сообщений пользовательских типов:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5%20In-depth%20-%20Messages%20of%20Arbitrary%20Types/

Механизм Message Delivery Tracing:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5%20In-depth%20-%20Message%20Delivery%20Tracing/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.22%20Message%20Delivery%20Tracer%20Filters/

Возможность иметь разные реализации lock-объектов и фабрики для их создания:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.10%20Factories%20for%20MPSC%20event%20queue%20locks/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.11%20Factories%20for%20event%20queue%20locks/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.18%20Global%20lock_factories/

Задеприкейтили пространство имен so_5::rt. Его содержимое перенесено просто в so_5, старые имена оставлены для совместимости.

Добавлены mchain-ы, по сути появилась поддержка модели CSP:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.13%20Message%20chains/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.14%20method%20no_wait_on_empty%20for%20mchain_receive_params_t/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.16%20mchain%20uses%20MPMC%20queue%20inside/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.17%20on_close%20handlers%20for%20advanced%20receive%20and%20select%20functions/
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.17%20prepare_receive%20and%20prepare_select%20functions/

Агенты теперь могут быть иерархическими конечными автоматами:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5%20In-depth%20-%20Agent%20States/

Возможность сборки SObjectizer в виде статической библиотеки:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.17%20SObjectizer%20as%20a%20static%20library/

Добавлена поддержка мутабельных сообщений для взаимодействия в режиме 1-to-1:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.19%20Mutable%20Messages/

Введено понятие env_infrastructure. Появилась возможность делать свои инфраструктуры, например, запускать весь SObjectizer строго на одной рабочей нити:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.19%20Environment%20Infrastructure/

Добавлено понятия stop_guard-а:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.19%20Stop%20guards/

Добавлено понятие deadletter_handler-а. Появилась возможность перехватывать сообщения, на которые агент в своем текущем состоянии не среагировал:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.21%20Deadletter%20Handlers

Добавлено понятие enveloped_msg:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5%20In-depth%20-%20Enveloped%20Messages

Добавлена поддержка CMake:
https://sourceforge.net/p/sobjectizer/wiki/so-5.5.2%20An%20Experimental%20CMake%20Support/
https://sourceforge.net/p/sobjectizer/wiki/5.5.20%20Enhanced%20support%20for%20CMake/

Добавлена возможность сборки под Android. Сперва с помощью CrystaX NDK, теперь и с помощью последних версий Android NDK.

Комментариев нет: