LINUX.ORG.RU

Обновился инструмент для работы с агентами в C++: SObjectizer 5.5.0

 , , ,


4

1

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

Последние несколько лет SObjectizer развивается на SourceForge как OpenSource проект под BSD-лицензией. Подробнее об истории, текущем состоянии и направлении движения SObjectizer можно прочитать здесь.

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

Главное отличие v.5.5.0 от предыдущих версий — это отсутствие зависимости от ACE Framework. Т.е. теперь ACE в коде ядра SObjectizer не используется вообще, для SObjectizer достаточно наличия стандартной библиотеки C++11. Это означает, что SObjectizer уменьшился в размере, нужно меньше времени на сборку SObjectizer-проектов, упрощается поддержка различных компиляторов и платформ. В частности, эта версия SObjectizer тестировалась посредством MSVS2013 (Windows), GCC 4.8/4.9 (Windows, Linux), Clang 3.5.0 (Linux).

Из более мелких изменений можно отметить прямую поддержку std::chrono при работе с отложенными/периодическими сообщениями, а так же небольшое изменение названий некоторых классов/функций (с сохранением старых имен для обеспечения совместимости). Более подробная информация о нововведениях в v.5.5.0 доступна в соответствующем разделе Wiki проекта. Так же увеличилось количество страниц с описаниями базовых вещей SObjectizer.

Версия 5.5.0 может быть загружена из раздела Files или получена из Subversion-репозитория.

Примечание. Этот релиз содержит только ядро SObjectizer (т.е. проект so_5). Никакие другие подпроекты (вроде so_log или so_sysconf) в релиз не включены. Возможно, сборка SObjectizer Assembly со всеми подпроектами будет сформирована и опубликована позже (если она действительно кому-то потребуется).

PS. Анонс делается просто для того, чтобы уведомить, что такой проект есть, живет, развивается. Доступен под BSD-лицензий, т.е. даром, в том числе и для коммерческих проектов. Это не просьба сделать code review. И не попытка кому-то что-то «продать».

PPS. Специально для желающих постебаться над синтаксисом и посравнивать программирование на C++ с Perl-ом. Вот классический пример Hello, World. В традиционном, ООП-шном варианте, с созданием класса агента и переопределением виртуальных методов (хотя есть и более модерновый вариант, с использованием С++ных лямбда-функций):

#include <iostream>

// Main SObjectizer header files.
#include <so_5/all.hpp>

// Definition of an agent for SObjectizer.
class a_hello_t : public so_5::rt::agent_t
{
	public:
		a_hello_t( so_5::rt::environment_t & env )
			: so_5::rt::agent_t( env )
		{}

		// A reaction to start of work in SObjectizer.
		virtual void
		so_evt_start() override
		{
			std::cout << "Hello, world! This is SObjectizer v.5."
				<< std::endl;

			// Shutting down SObjectizer.
			so_environment().stop();
		}

		// A reaction to finish of work in SObjectizer.
		virtual void
		so_evt_finish() override
		{
			std::cout << "Bye! This was SObjectizer v.5."
				<< std::endl;
		}
};

int
main( int, char ** )
{
	try
	{
		// Starting SObjectizer.
		so_5::launch(
			// A function for SO Environment initialization.
			[]( so_5::rt::environment_t & env )
			{
				// Creating and registering single agent as a cooperation.
				env.register_agent_as_coop( "coop", new a_hello_t( env ) );
			} );
	}
	catch( const std::exception & ex )
	{
		std::cerr << "Error: " << ex.what() << std::endl;
		return 1;
	}

	return 0;
}

PPPS. Специально для желающих узнать, чем SObjectizer лучше libcppa/CAF. В двух словах — это две совершенно разные разработки, ставящие перед собой разные цели и достигающие их разными способами. Подробнее здесь и здесь.

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

Пока ты явно в документации не написал, что у тебя realtime или soft realtime - ни один челоек в здравом уме не будет считать, что ты претендуешь на realtime только потому, что где-то в методе инициализации есть буквы rt.

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

т.к. environment в данном случае является синонимом runtime

у тебя та ещё каша в голове

anonymous ()
Ответ на: несмотря на то, что ты продолжаешь хамить... от anonymous

несмотря на то, что ты продолжаешь хамить...

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

рекомендую начать с азов: http://www.usingcsp.com/cspbook.pdf

Почему не с «Actors and Continuous Functionals» и теории Pi-calculus?

Что-нибудь еще?

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

Почему не с

просишь помочь и тут же начинаешь спорить?

Что-нибудь еще?

разберись для начала с этим

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

просишь помочь и тут же начинаешь спорить?

Я не спорю. Я интересуюсь.

разберись для начала с этим

У меня есть ощущение что:

- во-первых, своих собеседников вы считаете неграмотными дебилами;

- во-вторых, считаете свои взгляды на организацию работы агентов единственно правильными.

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

я понимаю модель акторов и знаю когда и как её надо использовать. в отличие от...

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

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

я понимаю модель акторов и знаю когда и как её надо использовать

Корона не жмет, трон не низкий?

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

Прочитайте то, что я пишу. Нигде подход SO5 не объявляется единственно правильным. И наличие настраиваемых механизмов в SO5 как раз проистекает из того, что разным задачам нужны разные возможности.

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

И наличие настраиваемых механизмов в SO5

до тебя не доходит, увы

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

до тебя не доходит, увы

Сударь, могли бы вы изъясняться точнее? Из всех ваших постов в этой теме полезной информации почти нет вовсе.

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

Здесь представлен работающий инструмент. Кому нужно, тот возьмет и попробует. Кому не нужно, продет мимо, возьмет что-то другое или напишет сам. Реплики же вида «я понимаю модель акторов и знаю когда и как её надо использовать» никому ничего полезного не дадут от слова совсем. Поэтому держите их при себе.

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

лютый бугурт, видимо

Сударь, могли бы вы изъясняться точнее?

....

Поэтому держите их при себе.

опять взаимоисключающие параграфы.

anonymous ()
Ответ на: лютый бугурт, видимо от anonymous

Ба, да это ж анонимный тимлид, судя по всему.

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

И таки повторю: Если вы думаете, что что-то знаете, понимаете или умеете, то продемонстрируйте, не сочтите за труд. Если не можете, не хотите, не имеете времени — не отвлекайте ни себя, ни других, проходите мимо.

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

ты весьма противоречив. считаешь себя самым умным?

это ты выкладываешь свои поделки на всеобщее осмотрение и бросаешься на любого кто не согласен с твоей гениальностью.

если я упрощаю свои объяснения до уровня 5-летнего ребёнка (поверь, с одной стороны я знаю в этом толк, с другой — твоё умственное развитие соответствует) ты начинаешь грубить и брызгать слюной. я, конечно, обладаю бесконечным терпением (должность обязывает), но не знаю как с тобой поговорить о деле.

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

Сударь, могли бы вы изъясняться точнее?

переведу с анонимного на русский: данный анонимус считает, что в любой задаче связанной с созданием акторов, весь подобный код нужно писать каждый раз с нуля, для этой и только для этой задачи. Соответственно код, который можно оторвать от задачи, да еще и сделать фреймворком/библиотекой он считает парашей. «Наличие настраиваемых механизмов» только усугубило его подозрения. Удачи вам в этом нелегком споре :D

stevejobs ★★☆☆☆ ()

Почему бы просто не использовать Erlang? К чему вся эта боль?

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

я не сомневался, что на лоре бывают вменяемые регистранты :)

другим и с десятого раза не объяснишь...

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

та же самая «параша» потому что :)

в некритичных к производительности местах с удовольствием использую. в виде кролика. у него есть дополнительное преимущество — со всяким энтерпрайзом типа микрософта и оракла легко интегрируется.

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

это ты выкладываешь свои поделки на всеобщее осмотрение и бросаешься на любого кто не согласен с твоей гениальностью.

Сударь, отвлекитесь от обсуждения моей скромной персоны. Можете сделать лучше — сделайте и покажите.

К фреймворку какие претензии?

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

я с самого начала сказал: ненужно.

обсудим?

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

Почему бы просто не использовать Erlang?

Все это началось задолго до того, как об Erlang-е стало известно широким массам.

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

К чему вся эта боль?

У кого боль?

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

я с самого начала сказал: ненужно.

Не удивлен.

обсудим?

Сможете аргументировать?

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

с динамической типизацией

в крестах-то? возвращайся как пройдёшь детоксикацию.

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

Сможете аргументировать?

джобс уже снизошёл до того, что перевёл тебе на язык скорбных умом. ещё что-то непонятно?

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

а вы пробовали критичное по скорости писать на эрланге, а всё остальное на крестах, и объединять? спрашиваю, интересуюсь о впечатлениях

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

джобс уже снизошёл до того, что перевёл тебе на язык скорбных умом. ещё что-то непонятно?

Вы действительно придерживаетесь вот этой точки зрения:

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

???

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

не пробовал эрланг жрёт 2-процессорную дуру на пару десятков тысяч событий в секунду. у меня миллион на одном ядре. разница на лице, как говорится.

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

интересуюсь о впечатлениях

если конкретно о впечатлениях, то драйвера сетевых карт — говно

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

возьмусь поправить коллегу: на 100 задач требуется около 80 стратегий распределения сообщений

:)

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

Собственно, необходимости такой не было. Про Erlang в Рунете активно начали говорить, если не ошибаюсь, года с 2005. К тому времени мы уже вовсю SO использовали, в том числе и для распределенных приложений. Да и на Ruby я к тому времени попрограммировал, чтобы понять, что такое динамика. Желания писать логику на динамике, а критичные к скорости участки на C/C++ не было.

На Erlang смотрел для общего развития, надобности в использовании в продакшене не было.

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

топик начинает смещаться в сторону психиатрии...

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

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

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

Сударь, хватит распыляться мыслею по древу. Ответьте, пожалуйста, «Да» или «Нет» на вопрос.

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

ну у меня-то вообще до недавнего времени была голая джава, а потом появилась акка :) Пытаюсь понять, на чем сейчас нужно/принято быстро и удобно писать parallel computing / concurrency для интернета (онлайн-игрушки), чтобы не сойти с ума, в том числе от сложности разработки, и является ли Java/Scala всё еще лучшим решением.

Например, в Wargaming юзают Erlang. Я сейчас работаю в техподдержке веб-сервера на эрланге, который может в несколько тысяч видеостримов с одного сервера, что прямо скажем намного больше чем у его немногих конкурентов (написанных на Java). Но при этом динамическая лапша меня смущает ничуть не меньше уродливости крестов. Ну и вы его в этом треде пару раз упомянули. Отсюда и вопросы были.

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

Пытаюсь понять, на чем сейчас нужно/принято быстро и удобно писать parallel computing / concurrency

язык неважен :)

Я сейчас работаю в техподдержке веб-сервера на эрланге

это многое объясняет :)

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

это многое объясняет :)

у меня реально поехала крыша работать разработчиком. Это когда выпускаешь релиз в пятницу вечером (суббота отменяется) и вдруг понимаешь, что всю прошлую неделю спал по ночам в офисе на кухне на туристическом коврике. И вообще новый год на носу, а ты даже и не думал об этом ни разу, и не имеешь на новый год никаких планов кроме как успеть сделать рефакторинг до того, как все остальные выйдут на работу. Одна мысль о том, что придется возвращаться в этот ад вызывает жуткую боль. Сейчас в техподдержке я кодю максимум когда заказчик не знает как написать сайт на PHP и интегрировать с нашими продуктами, и ему нужно записать видео-скринкаст. Но когда-нибудь возвращаться в ад придется. Думаю, годик ментального отмкокания будет в самый раз. И потом снова на своё место, на офисную кухню под стол на коврик xD

язык неважен :)

важен скорее не язык, а платформа. Нужно писать софт, а не технологию для создания этого софта. Например, если ты делаешь игру - то нужно писать саму игру, а не движок для нее. Движок всегда лучше купить, если его можно купить. В данном случае, используя Java/Scala, я бесплатно приобретаю огромную платформу, в которой всё уже есть, и можно начинать писать бизнес-логику самого продукта.

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

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

Это когда выпускаешь релиз в пятницу вечером

менеджера уволить не пробовал? я приезжаю домой в 18:00 (20км за мкадом) и гуляю с детьми в лесу. какой нахрен релиз? релиз-инженер? пи-эм? их проблемы.

важен не язык, а платформа.

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

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

Пытаюсь понять, на чем сейчас нужно/принято быстро и удобно писать parallel computing / concurrency для интернета (онлайн-игрушки)

Вообще-то parallel computing и concurrent computing — это разные вещи. Первая решает проблему выжимания максимума производительности из железа для сокращения времени на решение задачи. Например, у вас есть СЛАУ большой размерности, которую нужно решить максимально быстро. В том числе распараллеливая операции на имеющиеся ядра.

Тогда как concurrent computing — это предоставление возможности независимого параллельного выполнения различных задач. Например, один поток читает данные с диска, второй расшифровывает их, третий трансформирует, четвертый подписывает, пятый отсылает в сеть (причем для криптографических операций могут быть задействованы внешние устройства).

Это если очень грубо и в двух словах. Если углубляться в детали, то все будет несколько сложнее и обнаружится некоторое взаимопроникновение этих вещей друг в друга. Например, для того, чтобы в concurrent computing обеспечить высокую пропускную способность для мелких вычислительных задач, нужно максимально загружать имеющиеся мощности, что похоже на специфику parallel computing.

Erlang появился для нужд телекома именно для решения проблем concurrency. Там активности абонентов выгодно было представлять отдельными процессами (или даже деревьями процессов). И для этих целей была написана специальная VM, которая эффективно могла работать в условиях сотен тысяч процессов. При этом для процессов средствами Erlang VM обеспечивается вытесняющая многозадачность (т.е. один занявшийся длительными вычислениями процесс не может «повесить» остальные) и сборщик мусора умеет справляться с наличием большого количества параллельных процессов (чему, как мне помнится, помогает функциональная природа Erlang-а). Поэтому на Erlang отлично ложатся задачи, где есть масса мелких параллельных активностей (возможно даже совершенно не похожих друг на друга), каждую из которых можно представить в виде процесса. Вот тот же Web, например, где каждый запрос пользователя может быть представлен легковесным Erlang-овским процессом.

Тогда как Java создавалась как язык общего назначения. Не слишком заточенный ни под parallel, ни под concurrent computing. Поэтому подходы из Erlang в чистом виде там не работают. Хотя те же самые проблемы можно решать и иначе. Например, был такой известный фреймворк, как SEDA, который проповедовал стадийную обработку запросов.

Но когда Erlang пришел в массы, его стали безумно копировать. Забывая при этом, что платформы, на которых делают его клонов, не обладают возможностями Erlang VM. Поэтому, имхо, результат получается хуже оригинала (будь то Akka/ScalaActors/libcaf). Впрочем, если понимать ограничения конкретной платформы, то можно вполне успешно решать задачи, обходя эти ограничения тем или иным способом.

PS. К erlyvideo имеете отношение?

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

перестань нести чушь. я не могу столько хохотать.

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

менеджера уволить не пробовал? я приезжаю домой в 18:00

Судя по вашему стилю общения и уровню аргументации, такая лафа у вас благодаря попустительству или некомпетентности вашего руководства.

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

перестань нести чушь

несколько смягчу (уточню) свой комментарий:

Но когда Erlang пришел в массы

каждый вменяемый программист был в состоянии написать свой эрланг (и не такой убогий как твой, да)

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

ошибаешься

это потому, что вся работа сделана в срок (помнишь, ты при нашем знакомстве пытался острить по этому поводу?), качественно, и с заделом на будущее на годы.

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

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

anonymous ()
Ответ на: ошибаешься от anonymous

Re: ошибаешься

при этом только в отчётном году я собственноручно вытащил из глубокой жопы проект, приведённый туда твоим единомышленником (даже ваш код, который вы почему-то считаете кодом на си++ выглядит похоже)

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

Судя по вашему стилю общения и уровню аргументации

менеджеры, выражающие своё отношение ко мне в такой форме, обычно долго со мной не сотрудничают. угадай почему?

anonymous ()
Ответ на: перестань нести чушь от anonymous

каждый вменяемый программист был в состоянии написать свой эрланг (и не такой убогий как твой, да)

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

В течении короткого времени этот чувак обязательно сливается. Через какое-то время что-то похожее проявляется снова. Быстро исчезает. Потом опять проявляется.

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

eao197 ★★★★ ()

чота я не понял как так получилось, что автор выложил какой-то код, а тут уже и за ерланг и за яву, и уже кого-то уволить собираются … лор такой лор …

PS: покажи свой хеловорд 10 разным людям и узнай 10 разных причин почему ты мудак.

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

лор такой лор

Ну хоть что-то в этом мире не меняется :)

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

ты действительно считаешь, что в ныне обанкротившемся эриксоне боги горшки обжигали? ты в 90-е, видимо, только на бейсике писал, и не знаешь, что эти идеи тогда активно обсуждались (вплоть до впиливания в посикс костылей) и примеров реализаций (и моих тоже, да) было чуть более 9000.

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

Да мне как-то фиолетово, что вы сами о себе думаете. Диссертацию Джо Армстронга я читал, могу уровень оценить. Erlang пробовал, могу себе представить, сколько труда в него вложено.

Вы же никто, звать вас никак, что вы сделали — хз. П*здесь на форуме о каких-то там достижениях, которые никто не видел и проектах, про которые никто не знает, много мозгов не нужно.

Так что сделайте отдолжение, заткните свой фонтан.

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

опять бугурт...

ты здесь выставляешь свои поделки под видом рабочего кода. получай фидбек. в чём проблема? попка болит?

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

могу уровень оценить

смеёшься? ты не в состоянии понять то, что я легко объясняю 10-летнему ребёнку (психическая неуравновешенность здесь играет свою отрицательную роль, да)

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

и примеров реализаций (и моих тоже, да) было чуть более 9000.

Не могу не поинтересоваться, откуда такое число?

eao197 ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.