воскресенье, 22 февраля 2015 г.

[prog.c++.sobjectizer] Ну ведь реально код может быть короче...

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

Код из версии 5.5.3 Он же в версии 5.5.4
void
create_coop( so_5::rt::environment_t & env )
{
   using namespace so_5::disp::thread_pool;

   auto c = env.create_coop( so_5::autoname,
         create_disp_binder( "thread_pool",
            []( params_t & p ) { p.fifo( fifo_t::individual ); } ) );

   std::unique_ptr< a_collector_t > collector{ new a_collector_t{ env } };
   std::unique_ptr< a_performer_t > performer{
         new a_performer_t{ env, collector->so_direct_mbox() } };
   collector->set_performer_mbox( performer->so_direct_mbox() );

   std::unique_ptr< a_generator_t > generator{
         new a_generator_t{ env, collector->so_direct_mbox() } };

   c->add_agent( std::move( collector ) );
   c->add_agent( std::move( performer ) );
   c->add_agent( std::move( generator ) );

   env.register_coop( std::move( c ) );
}
void
create_coop( so_5::rt::environment_t & env )
{
   using namespace so_5::disp::thread_pool;

   auto disp = create_private_disp( 3 );
   auto c = env.create_coop( so_5::autoname,
         disp->binder( params_t{}.fifo( fifo_t::individual ) ) );

   auto collector = c->make_agent< a_collector_t >();
   auto performer = c->make_agent< a_performer_t >(
         collector->so_direct_mbox() );
   collector->set_performer_mbox( performer->so_direct_mbox() );

   c->make_agent< a_generator_t >( collector->so_direct_mbox() );

   env.register_coop( std::move( c ) );
}

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

А вообще C++11 рулит. И бибикает :)))

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

Отправить комментарий