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

[prog.thoughts] Продолжение темы будущих версий SObjectizer-а. Обозримое будущее (на 2018/10)

Продолжение темы, затронутой несколько дней назад. Тогда речь шла об очень туманных на данный момент перспективах SObjectizer-6, в котором возможны весьма кардинальные переработки SObjectizer-а (вплоть до его реализации совсем на другом языке). Сейчас же я хочу обозначить ближайшее будущее SObjectizer-а. По крайней мере то, каким оно видится на сегодняшний день.

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

SObjectizer-5.5

Итак, в данный момент ведется работа над SO-5.5.23 и, параллельно, над so_5_extra-1.2.0. В SO-5.5.23 добавляется возможность отослать сообщение, обернутое в специальную "обертку" (другая терминология: сообщение, которое вложено в специальный "конверт"). За счет таких "оберток" можно делать различные штуки. Например, отзывные сообщения, включая гарантированный отзыв таймерных сообщений (о чем речь шла в посвященной этой теме статье на Хабре). Или возможность автоматически запрашивать и отсылать агенту следующее сообщение из mchain-а сразу после того, как агент обработал ранее отосланное ему сообщение (какая функциональность упростит интеграцию агентов и mchain-ов, в каких-то случаях для балансировки нагрузки на агентов-воркеров можно будет обойтись только mchain-ами, без написания дополнительного кода). Все эти дополнительные "обертки"/"конверты" планируется реализовать как часть so_5_extra-1.2.0.

Что в 5.5.23 не попадет, так это поддержка unit-тестирования для агентов.

Работы над unit-тестированием начнутся уже после релиза SO-5.5.23 и so_5_extra-1.2.0. И, вероятно, поддержка unit-тестов станет частью so_5_extra-1.3.0. Если для этого потребуется доработать SO-5.5, то тогда вместе с so_5_extra-1.3.0 будет выпущена и версия 5.5.24.

Далее, вероятнее всего, версия 5.5.23 (или 5.5.24) станет последней мажорной версией в рамках ветки 5.5. После чего ветка 5.5 будет переведена в режим поддержки. Обнаруженные баги будут фиксится, по крайней мере, в течении 2019-го года. Но не более того. Если кому-то нужны будут доработки именно в ветке 5.5, то это сюда.

SObjectizer-5.6

В ветке 5.5 уже набралось достаточно вещей, помеченных как deprecated или нуждающихся в переделке при переходе с C++11 на C++14/17. Плюс уже очень достал груз совместимости со старыми компиляторами. Поэтому после выпуска so_5_extra-1.3.0 c поддержкой unit-тестирования, начнутся работы над SO-5.6.

В ветке 5.6 будут удалены все deprecated-элементы. Так же будут переделаны все костыли и воркараунды вокруг недостаточной поддержки C++11 в компиляторах. И, вероятно, будут устранены косяки и некрасивости, которые образовались за время эволюции ветки 5.5. Что, например, может сказаться на каких-то интерфейсах (скажем, будет переработан интерфейс abstract_message_box_t, в котором часть методов до сих пор помечены как const, хотя таковыми давно уже не являются).

Версия 5.6 будет требовать уже C++14. Вероятно, на уровне поддержки gcc-5.5 и clang-3.8 (емнип, оба идут "из коробки" в Ubuntu 16.04 LTS). Для VC++ останется поддержка только VC++ 15 (это который из Visual Studio 2017).

Итак, смысл версии 5.6 -- очистка кода от устаревшего хлама, костылей и подпорок, переход на более-менее адекватный C++. Принципиально в 5.6 мало что поменяется, поэтому переход с 5.5 на 5.6 не должен вызвать больших затруднений. Если только вы не сделали кучу собственных реализаций mbox-ов, mchain-ов и диспетчеров. Что вряд ли.

Так же под 5.6 будет выпущен so_5_extra-2.0.

При этом у нас пока нет планов делать ветку 5.6 столь же "долгоиграющей", как и 5.5. Пока 5.6 рассматривается как обновленная 5.5 для тех, кто не привязан к старым компиляторам. Сколько реально 5.6 будет эволюционировать зависит от того, как быстро будут накапливаться и формироваться идеи для ветки 5.7.

Вероятен такой сценарий развития событий: ветка 5.6 является стабильной и вбирает в себя мелкие фичи и доработки по пожеланиям пользователей пока идет работа над экспериментальной веткой 5.7. После стабилизации и релиза 5.7 ветка 5.6 уйдет в режим только баг-фиксинга.

SObjectizer-5.7

Ветка 5.7 пока рассматривается как некая гипотетическая линия развития SObjectizer-5, в которой возможен отказ от тех или иных принципиальных фич или способов работы нынешнего SObjectizer-а. Но при сохранении общей концепции пятого SObjectizer-а (т.е. кооперации, например, никуда не денутся, как и механизм диспетчеров).

Например, что может поменяться:

Скажем, основным способом отсылки сообщений станут шаблонные функции send/send_periodic/send_delayed. А методы deliver_message(), с которых все начиналось, будут упрятаны под капот и не будут доступны обычному пользователю. Это должно позволить избавиться от dynamic_cast-ов при вызове обработчиков сообщений.

Так же может поменяться механизм синхронного взаимодействия между агентами. Возможно, подход, который принят в Akka, когда для ответа на синхронный запрос нужно не вернуть значение из метода-обработчика, а отослать ответ как обычное сообщение, является более идеологически правильным.

Есть большое желание отказаться от именования коопераций, т.к. именно за счет этого сейчас в SObjectizer слишком высока цена создания новых агентов. Взаимоотношения родитель-потомок никуда не исчезнут, но должны будут выражаться не через имена родительских коопераций.

В общем, ветка 5.7 будет попыткой переосмыслить SObjectizer-5 с учетом восьми лет его эволюции. Что-то поломав при этом, но оставшись, тем не менее, в рамках генеральной линии партии.

При разработке ветки 5.7 уже будет использоваться C++17.

В какие сроки все это случится (если вообще)?

Работы над SO-5.5.23 сейчас в активной фазе. Очень хочется к ноябрю 2018-го закончить и SO-5.5.23 и so_5_extra-1.2.0

Соответственно, работы над so_5_extra-1.3.0 и, если нужно, SO-5.5.24, -- это уже ноябрь-декабрь. С релизом, если все будет хорошо, к концу 2018-го.

Работы над SO-5.6 начнутся, вероятно, в самом конце 2018-го или начале 2019-го. С предполагаемым релизом в конце февраля 2019-го.

Получается, что эксперименты над SO-5.7 смогут начаться где-то весной 2019-го. С релизом стабильной версии, вероятно, не раньше осени 2019-го. Возможно, с рядом промежуточных релизов альфа- и бета-версий в промежутке.

Есть ли жизнь на SourceForge?

С большой долей вероятности, SO-5 продолжить жить на SourceForge. Просто там слишком много уже всего собрано в Wiki, что перетаскивать это все добро на другой хостинг не хочется. Плюс к тому, по Интернету уже куча ссылок на SourceForge, пусть все остается в одном месте.

А вот система контроля версий может поменяться. Еще не смотрел на то, что на SourceForge можно делать с Mercurial-репозиториями. Если не хуже, чем на BitBucket-е, то SO-5.6 и последующие версии уже будут разрабатываться под Hg. Если хуже, то основные репозитории с исходниками уедут на BitBucket, а на SF.net будут зеркала и дистрибутивы.

Почему не GitHub, GitLab или еще что-то модное-молодежное?

Потому, что лично я не люблю git так же сильно, как многие не любят C++. Посему, пока SObjectizer разрабатывается за наш собственный счет, то будут использоваться те инструменты, которые нравятся нам. Тот же Hg.

Есть еще некоторые соображения на этот счет, но все они второстепенны.

К аргументу о том, что GitHub -- это де-факто стандарт и что присутствие на GitHub-е добавляет 100500 к чему угодно, я отношусь более чем серьезно. Зеркало исходников на GitHub-е будет, но не более того.

Ну и еще один момент: если для кого-то стоп-фактором для использования сложного инструмента, в который вложено масса труда, является хостинг инструмента, то такой "потенциальный пользователь" в качестве именно потенциального мной лично не рассматривается. Практика показывает, что кому нужно, тот берет и пользуется. Кто хочет почесать языком или способен брать зависимости только с GitHub-а (а больше не умеет и не знает), тот пусть походит по рынку, поищет альтернативные предложения, их же полно просто.

За чей счет банкет?

За наш. Развитие SObjectizer-5 в рамках веток 5.5, 5.6 и 5.7 планируется исходя из наших собственных средств. При этом часть новой функциональности будет появляться в рамках so_5_extra, который, напомню, распространяется под двойной лицензией. Собственно, хотелось бы, как и раньше, делать все в рамках абсолютно бесплатного SObjectizer-а. Но не мы такие, жизнь такая. Поэтому so_5_extra будет вбирать в себя все больше и больше функциональности. И, соответственно, будет дорожать время от времени.

Вряд ли существование so_5_extra под двойной лицензией станет для кого-то проблемой. Ее можно бесплатно применять в открытых проектах. А для закрытых, т.е. разрабатываемых на коммерческой основе, стоимость лицензии на so_5_extra не должна "кусаться". Сейчас это всего $80 в год на разработчика. После выхода 1.2.0, она вырастет до $120. И, вероятно, может подрасти еще на $40-$60 в течении 2019-го.

Кроме того, мы же не можем проконтролировать где и как используется so_5_extra ;)

Если кто-то что-то хочет сказать...

...то сейчас самое время. Оставьте свой фидбэк и мы постараемся учесть ваши пожелания при разработке последующих версий SObjectizer-5. А если вы нам ничего не скажете, то можете и не увидеть в SObjectizer-е нужной вам функциональности.

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