Информация об изменениях

Сообщение Re[17]: Mногопоточность: C++ vs Erlang vs другие от 08.06.2015 20:49

Изменено 08.06.2015 20:50 Evgeny.Panasyuk

Здравствуйте, vdimas, Вы писали:

V>Читаю и поражаюсь наивности автора:

V>

V>4 Writing simple generators
V>Consider a simple generator that counts down from a specified starting value:
V>

V>auto g = [n = int(10)]() resumable
V>{
V>  std::cout << "Counting down from " << n << "\n";
V>  while (n > 0)
V>  {
V>    yield n;
V>    n -= 1;
V>  }
V>};
V>

V>и только у меня созрел полный возмущения вопрос: а как он думает оформлять останов???
V>как читаю далее:
V>

V>Instead of returning a single value as in a normal lambda, we generate a sequence of values
V>using the yield statement. To obtain these values we call the generator as a normal function
V>object:
V>

V>try
V>{
V>for (;)
V>std::cout << g() << “\n”;
V>}
V>catch (std::stop_iteration&)
V>{
V>}
V>

V>Улыбнуло.
V>Вернее, валяюсь от смеха. ))
V>Не выйдет. ))

Конечно не выйдет, именно поэтому автор дальше пишет:

However, in many use cases an exception will not be acceptable. To avoid the exception we need to prevent the generator from falling off the end.

и приводит другие варианты.

V>Во-первых, семантика resumable означает однократный вызов ф-ии, но многократное её асинхронное продолжение.


Тоже самое и здесь. Ты посмотри примеры из Boost.Asio про stakcless coroutine — там именно происходит вызов именно как продолжения.
Re[17]: Mногопоточность: C++ vs Erlang vs другие
Здравствуйте, vdimas, Вы писали:

V>Читаю и поражаюсь наивности автора:

V>

V>4 Writing simple generators
V>Consider a simple generator that counts down from a specified starting value:
V>

V>auto g = [n = int(10)]() resumable
V>{
V>  std::cout << "Counting down from " << n << "\n";
V>  while (n > 0)
V>  {
V>    yield n;
V>    n -= 1;
V>  }
V>};
V>

V>и только у меня созрел полный возмущения вопрос: а как он думает оформлять останов???
V>как читаю далее:
V>

V>Instead of returning a single value as in a normal lambda, we generate a sequence of values
V>using the yield statement. To obtain these values we call the generator as a normal function
V>object:
V>

V>try
V>{
V>for (;)
V>std::cout << g() << “\n”;
V>}
V>catch (std::stop_iteration&)
V>{
V>}
V>

V>Улыбнуло.
V>Вернее, валяюсь от смеха. ))
V>Не выйдет. ))

Конечно не выйдет, именно поэтому автор дальше пишет:

However, in many use cases an exception will not be acceptable. To avoid the exception we need to prevent the generator from falling off the end.

и приводит другие варианты.

V>Во-первых, семантика resumable означает однократный вызов ф-ии, но многократное её асинхронное продолжение.


Тоже самое и здесь. Ты посмотри примеры из Boost.Asio про stakcless coroutine — там происходит вызов именно как продолжения.