Pokud vím, nějaké možnosti definovat assumptions se chystají v dalších verzích C++.
C++23 má atribut assume https://en.cppreference.com/w/cpp/language/attributes/assume
C23 má macro unreachable https://en.cppreference.com/w/c/program/unreachable
Dá se postavit macro, které detekuje C++23 / C23 / starší standard / specifickou platformu a použije správnou variantu (__builtin_unreachable, __assume, __builtin_assume).
Jj, děkuji za poznámku , já v zásadě o tom vím , jen to nemám pořádně nastudované a testované.
Tady by se hodil assume na _fetched false, protože překladač při optimalizaci co_await neví nic o tom jestli se ten příznak nenastavuje někdy jindy. Z funkce await_ready vedou tři cesty, z nichž jedna končí false a další dvě končí true, s nichž jedna má ten příznak _fetched nastaven na true a druhá na false. Teda takový je záměr ale překladač nemá jak ověřit ten poslední případ. Proto generuje rychlejší kód pokud je příznak explicitně vynulován, protože může přeskočit i ten test na _fetched v await_resume a ten return inlinuje do té přímé větve a vysledkem je pak jednoduchý cyklus s jednim testem - pokud je co_await v cyklu
Zkusím v další seanci tam dat c++23 a ověřit jak se to bude chovat s assume
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×