четверг, 10 декабря 2015 г.

[prog.c++11] SObjectizer обновился до версии 5.5.13

Состоялся релиз версии 5.5.13. Это первая версия в линейке 5.5.*, в которой была нарушена совместимость с предыдущими версиями.

Пространство имен so_5::rt объявлено устаревшим, оно будет удалено из SO-5 в версии 5.6.0. Все содержимое so_5::rt перенесено в пространство имен so_5. Это означает, что so_5::rt::agent_t теперь представляется как so_5::agent_t, so_5::rt::mbox_t -- как so_5::mbox_t и т.д.

Подавляющее большинство старых имен сохранено в so_5::rt в виде typedef-ов и/или простых функций-оберток. Поэтому практически все старые имена из so_5::rt остаются доступными и будут удалены окончательно только в v.5.6.0. Поэтому переход на версию 5.5.13 может оказаться безболезненным, за исключением случаев, когда в коде присутствуют инструкции вида:

using namespace so_5;
using namespace so_5::rt;

В этом случае будут возникать ошибки неоднозначности идентификаторов, т.к. одни и те же имена оказываются определенными как в so_5, так и в so_5::rt. Устраняется эта проблема удалением строки с using namespace so_5::rt.

Не все имена были перенесены из so_5::rt в so_5 без изменений. Так, so_5::rt::agent_coop_t -- это so_5::coop_t, а so_5::rt::so_layer_t -- это so_5::layer_t (соответственно поменялись и имена других типов, которые имели префиксы agent_coop_ и so_layer_ в пространстве имен so_5::rt).

Функции для отсылки сообщений конкретному агенту (send_to_agent, send_delayed_to_agent, send_periodic_to_agent) объявлены устаревшими. Вместо них рекомендуется использовать обычные send-функции (т.е. send, send_delayed и send_periodic). Теперь обычные send-функции сами определяют, кто именно является получателем: mbox, агент (обычный или ad-hoc) или mchain. Что, кстати говоря, существенно упрощает использование send-функций в шаблонах.

В общем, произведена серьезная подготовка к грядущей в 2016-ом году версии 5.6.0, в которой груз совместимости с предыдущими версиями будет несколько уменьшен.

Из новых возможностей в 5.5.13 реализована большая фича: mchain-ы, которые, во-первых, значительно упрощают общение агентов с внешним миром и, во-вторых, mchain-ы могут использоваться для асинхронного взаимодействия в многопоточных приложениях даже без применения агентов. Подробнее о mchain-ах на русском языке можно прочитать здесь.

Полный список изменений можно увидеть здесь.

Отдельно нужно сказать о документации. Далеко не вся документация обновлена до соответствия реалиям версии 5.5.13. Работа это большая, она идет полным ходом, в течении недели, надеюсь, приведу документацию в актуальное состояние. Так же, как оказалось, у людей есть проблемы с изучением SO-5 из-за того, что документация сразу сильно погружает читателя в технические подробности. Постарался исправить секцию Basics упростив примеры и выбросив из них лишнее. Кроме того, картинка выглядит так, что сейчас есть две разные стратегии по изучению SO-5.

Во-первых, можно идти по списку описаний примеров, начиная с "so-5.5 By Example Minimal Ping-Pong" и далее. Там как раз примеры и их описания подобраны так, чтобы вести читателя от самых базовых и простых вещей ко все более и более сложным. По мере необходимости можно обращаться к разделу "so-5.5 Basics" просто как к справочнику.

Во-вторых, можно начать с "so-5.5 Basics" и затем изучать секции "so-5.5 In-depth" (например, "so-5.5 In-depth - Exceptions", "so-5.5 In-depth - Timers", "so-5.5 In-depth - Synchronous Interaction" и т.д.), заглядывая в примеры лишь по необходимости.

Какая из стратегий более удобная -- не знаю, сам не стесняюсь заглядывать и туда, и туда :) А вообще, написание хорошей документации намного более сложная задача, чем написание хорошего кода. И, кроме того, хорошую документацию нельзя написать сразу, тут обязательно нужно провести несколько итераций. Так что любые замечания и предложения по совершенствованию документации будут с благодарностью восприняты. А если еще кто-нибудь помог бы с вычиткой и исправлением ошибок (т.е. с приведением текста к более-менее нормальному английскому, было бы вообще хорошо).

Первоначально планировалось, что в v.5.5.13 можно будет отказаться от использования суффикса _t в именах типов. Но этого не произошло. Слишком дорого это обойдется и, по моим представлением, это не окупится. Так что, вероятнее всего, SO-5 так и будет жить с суффиксами _t дальше.

Взять версию 5.5.13 можно с SourceForge, либо в виде архивов в секции Files, либо из Subversion-репозитория, или из зеркала на GitHub.

Прошу учесть, что на SF.net теперь выкладывается всего три zip-овских архива: с исходниками и с бинарниками (x86, x64) скомпилированными посредством VC++ 14.0 update1. Если кому-то нужны другие архивы (например, бинарники собранные VC++12.0), дайте знать -- сделаем и выложим.

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