Již nějakou dobu píšu veškerý svůj kód jako `constexpr`. Jak jsem k tomu došel? Začal jsem (z nějakého důvodu) psát v C89, poté jsem si řekl "jak těžké by bylo zavést do tohoto kódu constexpr?“. No, těžké to nebylo, přidal jsem pár maker a můj kód byl C++14 constexpr kompatibilní. K testování: Běžně používám fuzz testy (clang a MSVC). A všude v kódu mám milion assertů, takže chybu implementace nějakého algoritmu snadno a rychle odhalím. Jenže já jsem chtěl fuzz testovat i v constexpr režimu. K tomu je potřeba generátor náhodných čísel. Ten jsem implementoval konzumací maker typu __FILE__, __LINE__, __DATE__ a podobných. Pošlu je do SHA-3 a pomocí SHAKE128 funkce můžu generovat nekonečné množství náhodných čísel. Popřípadě můžu použít BLAKE3 místo SHAKE128. Dále jsem řešil podobný problém jako autor s rozdělením na hlavičkové a implementační soubory. Vyřešil jsem je tím, že každý header úplně na konci podmíněně (macro) includuje korespondující cpp soubor. Toto ale nedoporučuji, protože překlad trvá velmi, velmi, velmi dlouho a kompiler spotřebuje velmi, velmi, velmi hodně paměti RAM (desítky GB).
Je potřeba u testů generátor náhodných čísel? Nestačil by pseudonáhodný generátor. Problém asi je, že celý <random> není deklarován constexpr, ale napsat si vlastní generátor co bude constexpr asi není problém
Jinak __FILE__ a __LINE__ se už nemusí používat, protože mám std::source_location, což je třída, která má
https://en.cppreference.com/w/cpp/utility/source_location
static consteval source_location current() noexcept
Ta vrací aktuální polohu v kódu. Mám v backlogu článek na tohle téma
Pokud testy vyžadují čas a paměť, pak je samozřejmě lepší je překládat zvlášť.
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 57 599×
Přečteno 27 720×
Přečteno 26 403×
Přečteno 24 367×
Přečteno 22 864×