Re: Coroutines
От: WolfHound  
Дата: 24.02.09 13:38
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS>1. Буду благодарен за пример проблемы, в решении которой coroutines не притянуты за уши.


  ReadAllLinesLazy(fileName : string) : System.Collections.Generic.IEnumerable[string]
  {
    using (file = IO.File.OpenText(fileName))
    {
      def loop()
      {
        def line = file.ReadLine();
        when (line != null)
        {
          yield line;
          loop();
        }
      }
      loop();
    }
  }

  Test() : void
  {
    foreach (line in ReadAllLinesLazy("ФайлоНаДесятьГигабайт"))
    {
      WriteLine(line);
    }
  }


DAS>В решении на C# coroutines я вообще не увидел

Ну так это первый C#... там корутин нету. Во втором есть yield return.

DAS>2. Вопрос по реализации. Если я правильно понимаю, между вызовами coroutine ее состояние(локальные переменные и точка возврата) должна где-то сохраняться. Где она сохраняется? Неужели в стеке?

Зависит от реализации.
В случае C# и Nemerle генерируется некий класс который и хранит состояние.
В других реализациях может быть иначе вплоть до инлайна корутины.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.