LINUX.ORG.RU

SObjectizer-5.8.0 и so5extra-1.6.0

 , , , ,


2

2

Вышли очередные версии библиотек SObjectizer и so5extra.

Полный список изменений можно найти в Wiki:

https://github.com/Stiffstream/sobjectizer/wiki/v.5.8.0

https://github.com/Stiffstream/so5extra/wiki/v.1.6.0

Менее полный, но с большим погружением в отдельные моменты, обзор изменений сделан в свежей статье на Хабре.

Если же говорить в двух словах, то начата новая ветка 5.8, в которой пришлось пойти на слом совместимости с предыдущей веткой 5.7. Так что при переходе на SO-5.8 потребуется модифицировать исходники. Не получилось придумать способ внедрить новую функциональность не поломав совместимость :(

Для тех, кто не знает меня и не слышал про этот проект, вкратце:

SObjectizer – это один из «акторных фреймворков» для C++ (еще есть QP/C++, CAF: C++ Actor Framework и rotor). Краткий обзор SObjectizer-а можно найти в этой презентации или в этой статье. Кроме модели акторов SObjectizer поддерживает еще и такие модели как Publish-Subscribe и Communicating Sequential Processes. А so5extra – это набор дополнительных полезных прибамбасов для SObjectizer-а, которые не хотелось добавлять в сам SObjectizer.

В двух словах, SObjectizer, – это инструмент для упрощения разработки некоторых типов многопоточных приложений на C++.

Новая версия уже доступна через vcpkg, добавление в conan пока задерживается, но надеюсь, что скоро она появится и там.


Готов к тому, что в меня будут бросаться гнилыми помидорами за рекламу образцового нинужно, но как можно было обойтись без поста на LOR-е, по старой доброй традиции? ;)

★★★★★

Для тех, кто не знает меня и не слышал про этот проект, вкратце:

Столько понаписал, но не написал собственно ответа на вопрос - что же это такое. Чтобы таки это выяснить, мне пришлось перейти по ссылке, поэтому процитирую нужный кусок текста сюда, чтобы другим было проще:

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

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Простите, я насколько давно живу с этим проектом, что мне сложно охарактеризовать его в двух словах.

Ваша цитата, к сожалению, говорит только о части возможностей (большей, да, но все же части). SObjectizer позволяет писать приложения без агентов+диспетчеров вообще, управление рабочими нитями тогда лежит на самом программисте, а обмен сообщениями выполняется через CSP-шные каналы (mchain-ы), по аналогии с тем, как это происходит в Go.

eao197 ★★★★★
() автор топика
  1. Есть же уже «позиксная» очередь сообщений с поддержкой отображения состояния очереди в ядре «Линукса». Чем она не устраивает?
  2. В стандарте языка Си++ очередей ещё нет? А в стандартной библиотеке? Насколько сложно продвинуть твою очередь в стандарт? В «Яндексе» какими очередями пользуются?

Возможно, что можно было бы просто встретить главного «крестовика» «Яндекса» на выходе из конторы после рабочей смены, выпить с ним по кружке в ближайшей забегаловке, разъяснить друг другу что к чему и продвижение твоей очереди в стандарт языка могло бы пойти быстрее.

Enthusiast ★★★
()
Ответ на: комментарий от Enthusiast

Есть же уже «позиксная» очередь сообщений с поддержкой отображения состояния очереди в ядре «Линукса»

При чем тут ««позиксная» очередь сообщений»?

В стандарте языка Си++ очередей ещё нет? А в стандартной библиотеке?

Это один и тот же стандарт. А еще очередь очереди рознь.

Насколько сложно продвинуть твою очередь в стандарт?

Зачем ее продвигать в стандарт? Не говоря уже о том, что SObjectizer это не про очередь, а про акторов.

В «Яндексе» какими очередями пользуются?

При чем тут «Яндекс»?


Какая-то шизофазия.

Siborgium ★★★★★
()
Последнее исправление: Siborgium (всего исправлений: 1)
Ответ на: комментарий от Enthusiast

Есть же уже «позиксная» очередь сообщений с поддержкой отображения состояния очереди в ядре «Линукса». Чем она не устраивает?

Тем, что проект кроссплатформенный, например.

В стандарте языка Си++ очередей ещё нет?

Нет.

А в стандартной библиотеке?

Странно отделять стандарт языка от его стандартной библиотеки. Ну да ладно, там тоже нет.

Насколько сложно продвинуть твою очередь в стандарт?

Невозможно. Просто невозможно продвинуть то, чего нет.

В «Яндексе» какими очередями пользуются?

Понятия не имею. Но при чем здесь «Яндекс»?

Возможно, что можно было бы просто встретить главного «крестовика» «Яндекса» на выходе из конторы после рабочей смены

А это кто?

eao197 ★★★★★
() автор топика
Ответ на: комментарий от eao197
  • В «Яндексе» какими очередями пользуются?
  • Понятия не имею. Но при чем здесь «Яндекс»?

Если ты задаёшь такие вопросы, тогда непонятно чего ты хочешь добиться со своей библиотекой: денег; известности; внимания к себе; предложения о работе.

Если писать для того, чтобы писать, то это подобно написательству книги, которую никогда не напечатают для народа. Если же ты хочешь известности либо предложения о работе, то ты всё это сможешь получить, если в «Яндексе» либо в другой конторе подобной величины начнут использовать твои наработки. Если же так и сидеть в своей лачуге, то кому какая разница какими библиотеками в ней пользуются? Цель-то у тебя какая со своей библиотекой очередей сообщений?

Enthusiast ★★★
()
Ответ на: комментарий от Enthusiast

денег; известности; внимания к себе; предложения о работе.

Всего, сразу и еще вчера.

если в «Яндексе» либо в другой конторе подобной величины начнут использовать твои наработки

В Яндексе не начнут, там своих велосипедостроителей выше крыши. И не просто так, т.к. задачи масштаба Яндекса кроме Яндекса мало где решают.

Начнут в более скромных.

Цель-то у тебя какая со своей библиотекой очередей сообщений?

Похвастаться, конечно же. Ну и плюс «денег; известности; внимания к себе; предложения о работе», куда же без этого.

PS. Большая часть написанного является неприкрытой иронией и циничным сарказмом ;)

eao197 ★★★★★
() автор топика
Ответ на: комментарий от eao197

Похвастаться, конечно же. Ну и плюс «денег; известности; внимания к себе; предложения о работе», куда же без этого.

Тогда я предположу сам: если ты обнародуешь выход новой версии своей библиотеки на форуме линуксоидов, значит ты хочешь, чтобы твоей библиотекой пользовались здешние форумчане-программисты. А раз так, то почему тогда ты не опакечиваешь свою библиотеку во всех основных сборках «Линукса», как приличный разработчик, а предлагаешь скачивать какие-то там исходники непонятно откуда, ведя себя как ай-ти-голодранец? Сейчас ты просто вывалил что-то где-то и сидишь в кустах, ни за что не отвечая. Если ты опакетишь свое поделие, продвинешь эти пакеты в основные хранилища пакетов сборок «Линукса», чтобы народ смог установить твою библиотеку по-человечески, и будешь сопровождать эти свои пакеты, исправляя ошибки, тогда отношение народа к тебе будет как серьезному разработчику, а не ай-ти-голодранцу, как сейчас.

Enthusiast ★★★
()
Ответ на: комментарий от Enthusiast

Новая версия уже доступна через vcpkg

отношение народа к тебе будет как серьезному разработчику, а не ай-ти-голодранцу, как сейчас

«Опакечиванием» в vcpkg удовлетворен, как серъёзный разработчик :)

nikitos ★★★
()
Ответ на: комментарий от Enthusiast

если ты обнародуешь выход новой версии своей библиотеки на форуме линуксоидов, значит ты хочешь, чтобы твоей библиотекой пользовались здешние форумчане-программисты

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

А раз так, то почему тогда ты не опакечиваешь свою библиотеку во всех основных сборках «Линукса», как приличный разработчик, а предлагаешь скачивать какие-то там исходники непонятно откуда, ведя себя как ай-ти-голодранец?

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

тогда отношение народа к тебе будет как серьезному разработчику, а не ай-ти-голодранцу, как сейчас.

Таки я не 100-долларовая купюра, чтобы всем нравится. Я лучше потрачу свое время на то, чтобы расширить документацию для библиотеки, чем на бодание с пакетами для конкретной ОС, уж проссыте мне этот грех.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от Enthusiast

Что за бред?

  1. Автор программы/библиотеки не мантейнер. От него достаточно получить внятный способ сборки.
  2. Эта библиотека не является системной, она встраивается в программу и её версии не в полной мере обратносовместимы. Делать libsobjectizer580-dev, libsobjectizer574-dev, libsobjectizer572-dev?
  3. Библиотеки подобного класса тухнут в системе чрезвычайно быстро. Например, libfmt.
AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

Автор программы/библиотеки не мантейнер. От него достаточно получить внятный способ сборки.

В таком случае о широком использовании народом этого поделия можно сразу забыть. Хлеб за брюхом не ходит обычно.

Эта библиотека не является системной, она встраивается в программу и её версии не в полной мере обратносовместимы. Делать libsobjectizer580-dev, libsobjectizer574-dev, libsobjectizer572-dev?

Да. Ещё создать символическую ссылку, указывающую на текущую установленную версию библиотеки. Многие так делают.

Enthusiast ★★★
()
Ответ на: комментарий от Enthusiast

В таком случае о широком использовании народом этого поделия можно сразу забыть.

Звучит так, как будто этого стоит боятся. Хотя тут стоило бы задать вопрос: а оно мне надо?

Тут же вот какое дело: SObjectizer – это же не PCRE, не Boost.Asio или libuv, не libcurl. Он в принципе нужен далеко не всем. И даже в задачах, где акторы рулят и педалят, могут быть условия, из-за которых условный QP/C++ (CAF, rotor, нужное вписать) будет предпочтительнее. Так что разговора о том, что SObjectizer-ом будут пользоваться десятки тысяч разработчиков во всем мире не шло изначально.

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

Так что я делаю то, что интересно и полезно мне (точнее говоря, нам, т.к. SObjectizer – это не только (и не столько) моя разработка), время от времени фиксирую версии, рассказываю о них и о том, как SObjectizer может применяться (иногда и о том, как не должен применяться). По большей части получаю от этого кайф.

Ну не окажется «это поделие в широком использовании народом», ну и что?

eao197 ★★★★★
() автор топика

SObjectizer – это один из «акторных фреймворков» для C++ (еще есть QP/C++, CAF: C++ Actor Framework и rotor).

Поймал себя на мысли, что проговаривание названия твоей библиотеки, даже внутренним голосом, приносит невероятную боль. Остальные перечисленные тобой фреймворки «звучат» значительно лучше.

filosofia
()
Ответ на: комментарий от filosofia

Ну это вы сейчас прям с козырей зашли. Крыть нечем.

Ваш довод мог бы стать самым железобетонным аргументом против выбора SObjectizer-а… Если бы не тот факт, что у нас используется snake_case + posix_style_t и это прям серпом по приверженцам PascalCase и camelCase. У них подгорает сильно больше.

Да, а еще у нас tabs, а не spaces. Вааще без шансов на успешный успех.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от eao197

Это довод ни за, ни против, и вовсе не довод, а эмоция. Может с непривычки, но выговаривание «эс-обжектайзе» внутри предложения ломает привычный мне флоу русского и английского языка. В немецком вроде лучше звучит.

Как вы там расставляете свои закорючки и в каком кейзе — кому вообще до этого есть дело? Лишь бы консистентно было. Хотя бы в пределах файла. Хотя бы в функции!

filosofia
()
Ответ на: комментарий от filosofia

Может с непривычки, но выговаривание «эс-обжектайзе» внутри предложения ломает привычный мне флоу русского и английского языка.

Мы название произносим как «со-бжектайзер».

Как вы там расставляете свои закорючки и в каком кейзе — кому вообще до этого есть дело?

Тем не менее, в прошлом находилось достаточное количество людей, которые непременно хотели высказать свое «фи» по этому поводу.

Я это к тому, что всегда будет кто-то, кто чем-то будет недоволен.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от filosofia

А это не суть. Это общая тенденция в обсуждениях на публичных площадках: высказать (по большому счету) бесполезную эмоцию вроде «название сложно произносится» или «код в snake_case стиле невозможно читать». Причем делается это людьми, которым до обсуждаемой разработки вообще дела нет.

Се ля ви.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от rupert

достаточно, что можно притянуть через cget.

Там буст шестилетней давности. Похоже этот cget уже давно не поддерживается.

cget это минималистичная утилита для сборки зависимостей с упором на CMake.

Пишется файл с определением зависимостей dev-requirements.txt:

boost,https://downloads.sourceforge.net/project/boost/boost/1.82.0/boost_1_82_0.tar.bz2  --cmake boost -DBOOST_WITH_FILESYSTEM=1
Stiffstream/sobjectizer@v.5.8.0.1 --cmake subdir -DCMAKE_DIR=dev -DSOBJECTIZER_INSTALL=ON

и выполняем cget install.

В workspace можно создать файл .envrc (для direnv):

export CGET_PREFIX=`pwd`/cget
export CMAKE_PREFIX_PATH=${CGET_PREFIX}${CMAKE_PREFIX_PATH:+:${CMAKE_PREFIX_PATH}}
export PKG_CONFIG_PATH=${CGET_PREFIX}/lib/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}

# export PATH=${CGET_PREFIX}/bin:${PATH}
export LD_LIBRARY_PATH=${CGET_PREFIX}/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

# export CPATH=${CGET_PREFIX}/include${CPATH:+:${CPATH}}
# export LIBRARY_PATH=${CGET_PREFIX}/lib:${LIBRARY_PATH:+:${LIBRARY_PATH}}

И тогда всякие IDE подцепят всё что надо, и будет тебе автодополнение и прочие штуки.

AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

Пока нет. У нас и так CMake не основная система сборки, основная самописная много лет назад на Ruby.

Но есть подозрение, что после повсеместной поддержки C++20 (с модулями) в основных компиляторах нужно будет от своей системы отказываться. Оставаться один-на-один с CMake не хочется, так что будем посмотреть по сторонам.

Однако, это дело не ближайшего будущего, скорее года 25-26. Пока мы ограничиваемся C++17, но году в 25-ом, наверное, будем уже полностью переходить на C++20.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от eao197

Оставаться один-на-один с CMake не хочется, так что будем посмотреть по сторонам.

От Cmake вам уже нельзя отказываться. На него могут полагаться многие пользователи вашей библиотеки. Он позволяет легко использовать SObjectizer. Например, выше упомянутый cget или vcpkg, или bitbake из Yocto Linux, или … его скомпилируют и разместят в нужном месте.

Остаётся только в CMake-файле своего проекта добавить две строки:

find_package(sobjectizer REQUIRED)
target_link_libraries(hello_world PUBLIC sobjectizer::StaticLib)

Или в Meson:

so5dep = dependency('sobjectizer', method: 'cmake', modules: ['sobjectizer::StaticLib'])
executable('hello', 'main.cpp', dependencies: [so5dep])

Хотя не плохо бы ещё генерировать файл для pkg-config. Тогда и другие сборочные системы смогут его использовать.

CMake становиться головной болью, когда из него пытаются сделать систему управления зависимостями.

AlexVR ★★★★★
()
Ответ на: комментарий от eao197

Ну не окажется «это поделие в широком использовании народом», ну и что?

В этом случае ты можешь остаться ремесленником навсегда.

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

Только вот как только дядя Вася попытается поставлять свои глушители на конвеер «Автоваза», то при массовом использовании сразу выяснится, что глушители Васины прогорают не за десять лет, как прежние заводские, а за год. Или Вася поднапряжется и станет настоящим мастером, доведя качество своего товара до заводского уровня, либо отправится назад в свой автомагазин навечно, но побитый.

Стоит ли доводить качество твоей библиотеки до уровня работы настоящего мастера или оставить все как есть сейчас - решать тебе. Зависит от того что именно ты хочешь.

Enthusiast ★★★
()
Ответ на: комментарий от AlexVR

От CMake никуда не денешься, это да. Но вот использовать ее именно в разработке мне лично сильно неудобно. Поэтому и говорю о том, что когда придет время переходить на C++20 с модулями, то нужно будет присматривать что-то поудобнее CMake.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от eao197

От CMake никуда не денешься, это да. Но вот использовать ее именно в разработке мне лично сильно неудобно.

Т.к. CMake рассчитан на использование с чем-то ещё. CMake надо использовать для описания пакета:

  • из каких компонентов состоит пакет (библиотеки, исполняемые фалы, тесты, примеры),
  • какие внешние пакеты нужны (find_package, pkg_check_modules),
  • зависимости между компонентами (как внутренних, так и внешних),
  • требования к компилятору (пример),
  • куда устанавливать дополнительные файлы.

Т.е. максимально чисто и просто.

При этом не надо делать лишнего, например, как в SObjectizer создавать отдельные цели для статической и динамической библиотеки. Это решается передачей параметров в cmake.

Такой подход позволяет использовать библиотеку в разных сферах:

  • Создать пакет для Linux (например, в рамках Yocto Linux подготовить образ для одноплатника).
  • Использовать в ПО на вычислительном кластере через EasyBuild (это пожалуй лучшая система управления пакетами, которую я знаю).
  • Использовать через cget, conan, vcpkg, ….

Т.е. для CMake нужен ещё пакетный менеджер.

Плюс ещё может возникнуть задача создания workspace - места, где одновременно идёт работа и над библиотекой и над приложением.

Можно ли через CMake решить все три задача? Можно, но аккуратно. И желательно с добавлением, хотя бы, git submodules.

AlexVR ★★★★★
()
Ответ на: комментарий от eao197

А что не так с качеством? С этого места поподробнее, пожалуйста.

Так положительный опыт массового использования товара и есть показатель его качества.

Я не понимаю почему ты кочевряжишься с прекрасной возможностью совершенно бесплатно проверить свою библиотеку на миллионах людей, которым совершенно нечем себя занять и они готовы приложить свои умственные усилия и потратить время на взаимодействие с твоей библиотекой. Почему ты не ценишь это?

Между прочим, дяде Васе прежде чем начать устанавливать свои глушители на новенькие автомобили «Автоваза» ему придётся оплатить и провести дорогостоящие и длительные заводские испытания.

Enthusiast ★★★
()
Ответ на: комментарий от Enthusiast

Так положительный опыт массового использования товара и есть показатель его качества.

Вы путаете качество и востребованность. Это, зачастую, взаимосвязано, но одно из другого не проистекает со 100% гарантией.

Ну и поскольку заикнулись вы про качество, то хотелось бы узнать какие претензии именно к качеству.

Я не понимаю почему ты кочевряжишься с прекрасной возможностью совершенно бесплатно проверить свою библиотеку на миллионах людей

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

Почему ты не ценишь это?

Уже писал: я делаю то, что интересно и нужно мне. Выкладываю в свободный доступ под свободной лицензией. Рассказываю о том, что и как сделано, как работает, как это использовать.

Далее если кому-то нужно, то он/она использует результаты моей работы.

Все вышеописанное уже отнимает кучу времени и сил. Вкладываться еще и в подготовку пакетов для debian/redhat/arch/gentoo у меня нет ни времени, ни желания. Тем более, что мне регулярно приходится переключаться с Linux на Windows и обратно. Так что я лучше потрачу время на допиливание какой-либо фичи или в расширение документации. Это будет полезнее для тех, кому инструмент нужен вне зависимости от наличия пакетов для какого-то из десятков дистрибутивов Linux-а.

eao197 ★★★★★
() автор топика
19 октября 2023 г.

Зафиксирована версия 5.8.1 для SObjectizer и 1.6.1 для so5extra.

Чуть подробнее о том, что было добавлено/исправлено можно прочитать вот в этой статье. В общем, этот релиз демонстрирует, что если нам сообщить о том, чего вам в SObjectizer не хватает, то со временем это таки может появится ;)

PR в vcpkg и conan для добавления новых версий отправлены, когда их примут предсказать сложно, но со временем эти версии должны стать доступны и через vcpkg/conan.

С большим удовольствием прорекламирую серию статей о SObjectizer, которую начал публиковать Марко Арена (кто-то может знать его по Italian C++ Community). Найти эту серию можно в блоге Марко или на сайте dev.to. Мне самому было очень интересно читать написанные им статьи, как будто смотришь на давно привычные тебе вещи совсем с другой стороны. Так что рекомендую. На данный момент опубликовано три части, но это только начало.

Ну и на правах саморекламы: изобретаю велосипеды для себя, могу изобрести и для вас.

eao197 ★★★★★
() автор топика
Ответ на: комментарий от filosofia

выговаривание «эс-обжектайзе» внутри предложения ломает привычный мне флоу русского и английского языка

Людей, которые неиронично используют слово «флоу» в разговорах на русском языке, нужно лечить трудотерапией где-нибудь на Колыме.

alex1101
()
2 ноября 2024 г.

SObjectizer обновился до версии 5.8.3. Там несколько небольших нововведений и исправлений.

А so5extra обновился до версии 1.6.2 и как раз самое интересное именно в so5extra. Туда был добавлен новый компонент msg_hierarchy, который позволяет сделать подписку на сообщение базового типа, а получать по этой подписке затем сообщения производных типов.

Кому интересны подробности, то на Хабре есть статья с описанием этих нововведений и примеры кода их иллюстрирующие.

eao197 ★★★★★
() автор топика