[VC++] Resumable functions and await
От: Abyx Россия  
Дата: 18.11.13 22:20
Оценка:
В 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++. Прикладные вопросы' — Кодт
In Zen We Trust
Re: [VC++] Resumable functions and await
От: Evgeny.Panasyuk Россия  
Дата: 18.11.13 22:39
Оценка:
(для ссылки, тема началась тут
Автор: Evgeny.Panasyuk
Дата: 19.11.13
)

A>спрашивается нафига они так сделали и зачем вообще тогда оно нужно?


Могу только поспекулировать на эту тему:
  • Им нужно было получить что-то очень близкое по использованию к await/async из C#
  • Напрягаться и реализовать трансформацию функции в объект state-machine им жутко не хотелось
  • Поэтому они проявили "смекалку" и сделали stackful. Но при этом умудрились объединить все недостатки stackful и stackless, и потерять все уникальные преимущества


    Что делать дальше? Главное не допустить включение этого в ISO. Как я понял, они запланировали продавить это к C++17, поэтому время ещё есть. Нужно сделать грамотное описание всех pros/cons, показать альтернативы, обсудить в [std-proposals] и далее возможно описать это в виде ISO paper (как там у них называются статьи-комментарии?).
  • Re: [VC++] Resumable functions and await
    От: niXman Ниоткуда https://github.com/niXman
    Дата: 19.11.13 01:30
    Оценка: -3
    Здравствуйте, Abyx, Вы писали:

    overquoting
    A>спрашивается нафига они так сделали и зачем вообще тогда оно нужно?
    чо, просто расширили кодогенератор? как это похоже на M$ =)
    пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.