Как то нарвался на интересную реализацию 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(...)
...
}
//ну и так далее.
так вот вопрос.
не встречал ли кто небудь научных работ или просто статей с описанием таких идей?
есть ли название такому способу програмирования?
существуют ли языки поддерживающие такую концепцию?
заранее благодарен.