Názor ke článku Knihovna libcoro - korutiny pro C++20 (revize) od Ondřej Novák - ještě k deferred_future pokud napíšu co_await foo() tak pokud foo() je...

  • 27. 3. 2024 6:35

    Ondřej Novák

    ještě k deferred_future

    pokud napíšu

    co_await foo()

    tak pokud foo() je korutina nebo generátor, tak samotné zavolání funkce přepnutí nezpůsobí. Přepnutí způsobí až co_await, ten tedy vyžaduje aby foo() vrátila awaiter. tady právě deferred_future je ten awaiter který teprve v co_await zahájí operaci a dojde k přepnutí.

    pokud by foo vracela pouze future, pak co_await nemůže nic přepínat, protože z jeho pohledu už výpočet běží. Takže pouze zaregistruje korutinu k probuzení na výsledku a vrátí řízení o level výš. z hlediska efektivity je lepší, když dvě korutiny se přepínaji na deferred_future než na future

    abych zachoval určitý level abstrakce, tak i samotna future umi deferred režim a jak jsem psal v článku, smyslem deferred_future je hlavně zlepšení čitelnosti a umožnění move toho objektu, tedy pohodlnější zacházení (protože tam je move možný), pokud volaný 100 procent ví, že tam bude vždy korutina, muze tuhle informaci tímto způsobem předat volajícímu a tím mu rozvázát ruce,