Odpovídáte na názor ke článku Knihovna libcoro - korutiny pro C++20 (revize).
"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.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 50 233×
Přečteno 23 535×
Přečteno 22 525×
Přečteno 20 434×
Přečteno 17 495×