среда, 18 сентября 2013 г.

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

С радостью могу сообщить о том, что версия 5.1.2 ядра SObjectizer зафиксирована в виде тега в SVN-репозитории на SourceForge.

Для тех, кто не знает, что такое SObjectizer и почему я им занимаюсь, ниже есть небольшое пояснение.

Для меня эта новость вдвойне приятнее, поскольку:

  1. Это первый серьезный шаг к продвижению SObjectizer-5 за пределы Интервэйла. До сих пор SObjectizer развивался как русскоязычный проект, главной областью применения которого были разработки внутри компании Интервэйл. Сейчас же мы хотим найти SObjectizer-у новые сферы применения. Для чего нужно перевести документацию по SO на английский язык, что и было проделано с doxygen- и обычными комментариями в версии 5.1.2. Так что в исходниках SO-5.1 русского языка уже не осталось. Другой вопрос, появился ли там английский ;)
  2. Это первый релиз SObjectizer-5, к которому я имею отношение еще и как программист. До этого я направлял его разработку, вкладывал в нее свои идеи, помогал разработчикам какими-то советами. Но написан SObjectizer-5 был моей командой, в основном, Николаем Гродзицким. А вот в 5.1.2 уже оказались и мои правки. Что тем более приятно, т.к. к программированию я вернулся практически через год "простоя". Оказалось, что руки-то помнят :)

Версия 5.1.2, кроме перевода комментариев на английский язык, содержит небольшие правки и улучшения кода. Она рассматривается как отправная точка для разработки версии 5.2.0, в которой ядро SO5 будет переработано чуть сильнее. А так же изменится функциональность по подписке событий агентов на сообщения. Поэтому 5.1.2 зафиксирована только в репозитории, архив с исходниками в дистрибутивы не выкладывался.

На ближайшее будущее для SObjectizer-5 у нас есть следующие планы:

  • выпуск версии 5.2.0 с более серьезным рефакторингом кода, изменение принципов подписки событий агента, возможно, дополнительные оптимизации производительности;
  • продолжение перевода SObjectizer на английский, в частности, формирование краткого описания SObjectizer, принципов его работы, основных приемов его использования, пояснений к примерам. Вероятно, это будет проделано в Wiki проекта на SourceForge или же будет модифицирован сайт SO там же;
  • подготовка SObjectizer и сопутствующих ему проектов в виде "большого" релиза.

Т.е. следующим шагом будет создание из SObjectizer проекта, который любой владеющий английским языком разработчик может взять, посмотреть и попробовать. Ну а там будет видно, что из этого получится и что делать потом.

Если кому-то интересно агентное программирование на C++ (оно же программирование на акторах) и есть желание присоединится к SObjectizer, то милости просим. Особенно тех, кто может помочь в переводе или вычитке написанных нами материалов. Так же приветствуются любые предложения, любая критика, любые указания на наши промахи/неудачные решения или указания на то, где что-то сделано раньше/лучше/быстрее.

Да, чуть не забыл: SObjectizer распространяется под 3-секционной BSD-лицензией. Т.е. бесплатно и без ограничений на коммерческое использование.


Небольшое пояснение про SObjectizer.

SObjectizer -- это фреймворк для программирования на C++ с использованием агентов (акторов). Я занимаюсь этим проектом уже очень давно. Отчасти его история была зафиксирована в большой статье в RSDN Magazine: "SObjectizer: I Love This Game!". Там же хорошо изложены основные понятия и идеи использованного нами агентного подхода. Очень рекомендую эту стать для беглого знакомства с SObjectizer, хоть там и описано предыдущее поколение нашего фреймворка, SObjetizer-4.

SObjectize-4 был разработан в компании Интервэйл в 2002-м году. После чего некоторое время он развивался, пока не достиг версии 4.4. После чего разработка SObjectizer заметно затормозилась. В значительной степени это объясняется смещением акцента от разработки SO на его использование в реальных проектах. Но сюда же добавился длительный период вынашивания идей для SO5 и непростое формирование боеспособной команды, которая смогла бы воплотить SO5 в коде.

Конечно, хотелось сделать SO5 раньше, но получилось так, как получилось. Да и время ни в коем случае не было потрачено зря. Во-первых, была сформирована очень хорошая команда, которая хотела и могла заниматься SO. Во-вторых, был накоплен большой опыт использования SO в важных и нагруженных проектах внутри Интервэйла (с полной ответственностью могу сказать, что с 2002-го и до сих пор изрядную долю прибыли Интервэйлу приносит работа продуктов, разработанный моим подразделением на C++ и SObjectizer).

Мы на собственном опыте смогли убедиться в удобстве, которое дает в некоторых прикладных областях агентный подход. Причем сделали это задолго до массового увлечения тем же Erlang-ом или Akka. Ну, например, мы разрабатывали на C++ приложения, которые содержали в себе тысячи агентов, работающих на сотне нитей. И все это успешно работало, память не текла, приложение не сегфолтилось, без гонок и дедлоков. После чего лично мне очень смешно читать в Интернете C++ненавистников, которые яростно доказывают, что на C++ невозможно написать более-менее сложный многопоточный код. На SObjectizer можно :)

В SObjectizer-5, который разрабатывался в Интервэйле в 2011-2013 годах, мы постарались убрать недостатки SObjectizer-4. Во многом нам это удалось. Так, например, в SO5 уже не нужно делать два описания агента: одно в виде обычного С++ класса, второе в виде последовательности специальных макросов. Теперь просто описывается обычный C++ класс, макросы не нужны. Так же в SObjectizer не используются строковые имена агентов, сообщений, событий. Все это, во-первых, устраняет целый класс потенциальных ошибок. И, во-вторых, увеличивает производительность, т.к. в SO5 не приходится искать сущности в различных словарях по именам. SO5 изначально разрабатывался с прицелом на C++0x. Что уже сейчас делает использование SO5 проще, чем SO4, а дальше будет и еще проще. В отличии от SO4, SO5 стал разрабатываться по принципу минималистического ядра, на которое навешивается дополнительная функциональность. Например, транспортная подсистема, которая ранее была "вшита" в SO4, для SO5 является одной из дополнительных библиотек. Так же мы стараемся, чтобы SO5 был описан не хуже, чем SO4. В частности, по ядру SO5 есть хорошее руководство, описывающее различные аспекты работы SO5 от простого к сложному: SObjectizer-5 в примерах: шаг за шагом. В целом же, SO5 мне нравится больше, чем SO4, работать с ним приятнее, безопаснее.

Я могу сильно ошибаться, но мне кажется, что для C++ совсем немного библиотек/фреймворков, которые позволяют использовать в C++ акторов/агентов. Для той же Java в свое время такие фреймворки найти было гораздо проще. Так что SObjectizer для C++ -- это один из совсем немногих подобных инструментов. Да еще, к тому же, долгое время использующийся в реальных проектах.

Да к тому же SObjectizer это не просто ядро, позволяющее диспетчировать события между работающими на разных нитях агентами. Это еще и библиотеки, позволяющие строить на SObjectizer сложные распределенные приложения, обменивающиеся сообщениями между собой. Строить чуть ли не в прямом смысле, собирая приложение из DLL, в каждой из которых реализуются те или иные прикладные агенты. Хотя это уже тема отдельного большого разговора.

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

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