В VC++ Nov. 2013 CTP добавили ключевые слова __resumable и __await
Используются они так:
#include <ppltasks.h>
#include <pplawait.h>
concurrency::task<int> foo(int a) __resumable
{
auto sum = a;
sum += __await concurrency::create_task([]{ return 20; });
return sum;
}
#include <iostream>
int main()
{
auto&& t = foo(1);
std::cout << t.get() << '\n';
}
Это
Stackful сопрограммы.
Реализация использует фиберы.
foo трансформируется в
int __suspendable_foo(int a)
{
auto sum = a;
sum += concurrency::details::await_task<int>(concurrency::create_task([]{ return 20; }));
return sum;
}
concurrency::task<int> foo(int a)
{
return concurrency::details::create_resumable_context([]{...});
}
спрашивается нафига они так сделали и зачем вообще тогда оно нужно?
19.11.13 13:34: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
(для ссылки, тема началась
тутАвтор: Evgeny.Panasyuk
Дата: 19.11.13
)
A>спрашивается нафига они так сделали и зачем вообще тогда оно нужно?
Могу только поспекулировать на эту тему:
Им нужно было получить что-то очень близкое по использованию к await/async из C#
Напрягаться и реализовать трансформацию функции в объект state-machine им жутко не хотелось
Поэтому они проявили "смекалку" и сделали stackful. Но при этом умудрились объединить все недостатки stackful и stackless, и потерять все уникальные преимущества
Что делать дальше? Главное не допустить включение этого в ISO. Как я понял, они запланировали продавить это к C++17, поэтому время ещё есть. Нужно сделать грамотное описание всех pros/cons, показать альтернативы, обсудить в [std-proposals] и далее возможно описать это в виде ISO paper (как там у них называются статьи-комментарии?).
Здравствуйте, Abyx, Вы писали:
overquoting
A>спрашивается нафига они так сделали и зачем вообще тогда оно нужно?
чо, просто расширили кодогенератор? как это похоже на M$ =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)