среда, 8 октября 2014 г.

[prog.flame] HelloWorld Battle: Theron-6.0 vs SObjectizer-5.5.1 :)

Да вот просто так, под влиянием ожесточенных обсуждений :)

Слева Theron, справа SObjectizer. Все комментарии удалены дабы не отвлекать внимание. Если кому-то нужны пояснения, то вот сюда (по сравнению с LOR-овским вариантом из SO-примера удалена секция try-catch, т.к. в Theron-варианте ее тоже нет).

#include <Theron/Theron.h> 

class Printer : public Theron::Actor
{
public:
  Printer(Theron::Framework &framework) : Theron::Actor(framework)
  {
    RegisterHandler(this, &Printer::Print);
  }

private:
  void Print(const std::string &message, const Theron::Address from)
  {
    printf("%s\n", message.c_str());

    Send(0, from);
  }
}; 

int main()
{
  Theron::Framework framework;
  Printer printer(framework);

  Theron::Receiver receiver;

  if (!framework.Send(
      std::string("Hello world!"),
      receiver.GetAddress(),
      printer.GetAddress()))
  {
    printf("ERROR: Failed to send message\n");
  }

  receiver.Wait();
}
#include <iostream>

#include <so_5/all.hpp>

struct message : public so_5::rt::message_t
{
  std::string msg;

  message( std::string m ) : msg( std::move(m) ) {}
};

class printer : public so_5::rt::agent_t
{
public :
  printer( so_5::rt::environment_t & env ) : so_5::rt::agent_t( env )
  {
    so_subscribe_self().event( &printer::print );
  }

private :
  void print( const message & evt )
  {
    std::cout << evt.msg << std::endl;
  }
};

int main()
{
  so_5::launch( []( so_5::rt::environment_t & env ) {
    auto agent = new printer( env );
    env.register_agent_as_coop( "hello", agent );

    agent->so_direct_mbox()->run_one().wait_forever()
      .make_sync_get< message >( "Hello, World" );

    env.stop();
  } );
}

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