Сопрограммы
От: x-code  
Дата: 03.06.12 17:56
Оценка:
На википедии есть некий пример сопрограмм. Если привести его в более сиподобный вид, то получится примерно следующее:
Queue q(20);
void produce()
{
    for(;;)
    {
        while (!q.IsFull())
        {
            Item item = Gen();
            q.Add(item);
        }
        yield consume;
     }
}

void consume()
{
    for(;;)
    {
        while (!q.IsEmpty())
        {   
            Item item = q.Extract();
            Use(item);
        }
        yield produce;
    }
}


Есть две функции, которые могут где-то сохранять свое состояние и передавать друг другу управление напрямую, без вызова функции. Оператор yield делает нечто, что сохраняет состояние первой функции, переключается на вторую и восстанавливает состояние второй. Желательно, чтобы это нечто было достаточно низкоуровневым и эффективным, с тем чтобы данный оператор можно было применять где угодно, в том числе при программировании embedded софта и т.п. То есть никаких фреймворков нет, есть как-бы "голый си" (некий разрабатываемый си-подобный язык).

Интересно, как можно такую фичу грамотно спроектировать при разработке собственного языка программирования?
Какие требования, ограничения к сопрограммам должны предъявляться? Любые ли две функции можно сделать сопрограммами, или только удовлетворяющие какому-то общему требованию?

В общем, любые мысли приветствуются.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.