Hlavní navigace

Odpověď na názor

Odpovídáte na názor ke článku Knihovna libcoro - korutiny pro C++20 (revize).

  • 28. 3. 2024 13:14

    Ondřej Novák

    "Z toho deferred_future<> jsem teď zmatený - takže je to prakticky lambda, která teprve pustí výpočet a vlastně vrací future<>, akorát je to celé dáno do jednoho objektu? Vzhledem k tomu, že je záměrně netransparentní pro volajícího, možná by mělo smysl ty dvě věci rozdělit.."

    V zásadě ano. Ovšem, kolikrát a v jakém formátu vracíš z funkce lambdu? Napiš mi nějaký prototyp deklarace funkce, co vrací lambdu.

    Určitě použiješ std::function - heap allocation
    (deferred_future - tedy použije coro::function, ten do 24 bajtů nealokuje, a handle korutiny má 8 bajtů, tam se vejde)

    Na std::function neuděláš co_await, musíš z toho tedy nejprve vyextrahovat tu future.

    na deferred_future uděláš co_await a všechno se to stane v tomto jednom kroku!

    - zavolá lambdu (zapamatuje se vrácené handle, pokud je to korutina)
    - předá jí promisu
    - zaregistruje handle korutiny
    - přepne do korutiny, která teď zahájí výpočet (pokud to není korutina, provedlo se to jako první bod)

    jasně že by se to dalo rozepsat do víc kroků a navrhnout to takto jako separátní objekty. Budeš to takhle pak rozepisovat všude tam kde to použiješ? Nebo dáš přednost jednomu objektu? To je princip programování skládáš větší objekty z menších.