Одной из главных претензий к SObjectizer всегда была его многословность. Посему в каждом релизе SO-5 этому аспекту мы старались уделять внимание. Продвижение вперед в этом направлении было постоянно, но каких-то кардинальных улучшений никогда не происходило. Была такая тихая ползучая эволюция...
Тем интереснее и неожиданнее оказывается сравнение того, как нужно было писать еще три месяца назад и того, как можно писать сейчас.
Вот пример кода из презентации "What is SObjectizer-5.5" от февраля 2015, как раз после релиза версии 5.5.3:
virtual void so_evt_start() { // Child cooperation will use active_obj dispatcher. // So pinger and ponger will work on the different // working threads. so_environment().add_dispatcher_if_not_exists( "active_obj", &so_5::disp::active_obj::create_disp ); // Creation of child cooperation with pinger and ponger. auto coop = so_5::rt::create_child_coop(*this, "pinger_ponger", // active_obj dispatcher will be used as a primary dispatcher // for that cooperation. so_5::disp::active_obj::create_disp_binder("active_obj") ); // Filling the child cooperation. auto a_pinger = coop->add_agent( new pinger( so_environment(), so_direct_mbox() ) ); auto a_ponger = coop->add_agent( new ponger( so_environment(), so_direct_mbox() ) ); a_pinger->set_ponger_mbox( a_ponger->so_direct_mbox() ); a_ponger->set_pinger_mbox( a_pinger->so_direct_mbox() ); // Cooperation registration. so_environment().register_coop( std::move( coop ) ); // Limit the pinger/ponger exchange time. so_5::send_delayed_to_agent< stop >( *this, std::chrono::seconds( 1 ) ); } |
А вот тоже самое, но уже с помощью версии 5.5.5, май 2015:
virtual void so_evt_start() { // Creation of child cooperation with pinger and ponger. // Child cooperation will use active_obj dispatcher. // So pinger and ponger will work on the different // working threads. so_5::rt::introduce_child_coop( *this, "pinger_ponger", // active_obj dispatcher will be used as a primary dispatcher // for that cooperation. so_5::disp::active_obj::create_private_disp()->binder(), [=]( so_5::rt::agent_coop_t & coop ) { // Filling the child cooperation. auto a_pinger = coop.make_agent< pinger >( so_direct_mbox() ); auto a_ponger = coop.make_agent< ponger >( so_direct_mbox() ); a_pinger->set_ponger_mbox( a_ponger->so_direct_mbox() ); a_ponger->set_pinger_mbox( a_pinger->so_direct_mbox() ); } ); // Limit the pinger/ponger exchange time. so_5::send_delayed_to_agent< stop >( *this, std::chrono::seconds( 1 ) ); } |
Это, действительно, ползучая эволюция, никаких нарушений совместимости между версиями не было, старый код и сейчас будет успешно компилироваться и работать.
PS. К упрекам в многословности я все еще отношусь довольно болезненно. Хотя уже и начинаю привыкать к ситуации, когда пытаешься выяснить у собеседника, а как бы он видел себе тот или иной фрагмент, но никакого вразумительного ответа не получаешь. Приходится крутить самому :) Пока, вроде бы, получается. Как будет дальше -- посмотрим :)
Комментариев нет:
Отправить комментарий