Task oriented programming?
От: chudo19  
Дата: 16.05.06 18:13
Оценка:
Как то нарвался на интересную реализацию coroutines или cooperative multitasking в одной игровой SDK
вот примерно такое на псевдо С++:


proc void Entity::Main(Entity target)
{
...
    //ждем окончания процедуры Attack попутно отлавливая сообщения пеердоваемые ей из шедулера
    Result res = wait_for(Attack(taget))
    {
      on(Damage)
      {  
          if(this.m_Health<10)
              //прервать Attack и все функции дальше по стеку и размотать стек вплоть до Main 
              //вернее насильно вызвать некий return handler
              break;
          else
              //продолжить исполнение Attack или того что вызвала Attack 
              resume;

      }
      on(EntityDead)
      {
          if(this.m_Target==EntityDead.m_Sender)
             // заменить Event EntityDead на NewTargetEvent который теперь получит процедура Attack и продолжить исполнение Attack             
             resume NewTargetEvent(FindNewTarget());
          else
             resume;
      }
      on(Return)
      {  
          // код в случае если кто то выше по стэку требует прерватся ("break")
         //some cleanup
      }
    }
...

}
//такие же фокусы для Attack
proc void Entity::Attack(Entity target)
{
...
if(some flag)
{
    wait_for(Time(max_time))
    {
      on(SeeEnemy)
      {  
         ....
              resume;

      }
      on(EntityDead)
      {
          ...
      }
    }
}
else
    wait_for(...)
...

}

//ну и так далее.


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