• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    UETOYOC++ (11+) aneb "Shadow of the Beast"

    C++



    Tématicky je vítáno vše, co souvisí s C++, obzvláště verze standardu 2011 a novější. Pokud nemáte rádi C++ a preferujete jiný jazyk, pak jsou tu jiné diskuze.Buďte trpělivý, C++ je plné záludností, takže pokud víte více než ostatní, dokažte to příkladem, odkazem na specifikaci atd.


    Ať již česky nebo slovensky, prosím pište s diakritikou a formátujte zdrojový kód ukázek.

    rozbalit záhlaví
    MICRO
    MICRO --- ---
    TOOMIX: Doporučuji se zamyslet, jak moc pokročilé formátování potřebuješ. Pokud potřebuješ pouze odsazování, jde to udělat celkem naivním způsobem, kdy každý řádek odsadíš na základě počtu otevřených závorek před ním.

    Pokud bys chtěl pokročilejší formátování (jako má např. clang-format), musíš to celé naparsovat a pak znovu vygenerovat, jak navrhuje KLIP. Ovšem tohle není zdaleka tak jednoduché, jak by se mohlo zdát. Potřebuješ totiž „nedestruktivní“ parser:
    – Potřebuješ parsovat a uchávavat komentáře (namísto zahazování v lexeru).
    – Potřebuješ uchovávat původní literály, protože člověk může napsat 1.6 nebo 1.600 – překladači to je jedno, ale při reformátování to chceš zachovat.
    – Potřebuješ uchovávat informace o závorkách. Opět, překladači je (obvykle) jedno jestli napíšeš x = a + b; nebo x = (a + b);, ale reformatteru ne.
    – Atd.

    V tomto je ještě o dost vypečenější C(++), kde máš preprocessor, který byl původně zamýšlen tak, že o něm samotný kompilátor vlastně nepotřebuje vědět, ale pro formatting to musí být všechno v jednom parseru.

    Možná by se ten problém dal trochu redefinovat – celé formátovaní je vlastně jednom editace whitespace mezi tokeny. Informace z parseru by se daly použít na editace whitespace místo generování celého zdrojáku nanovo.
    KLIP
    KLIP --- ---
    TOOMIX: predpokladam, ze ten tvuj kompilator ma parser, kterej zdroj naparsuje do nejakyho stromu. ten strom pak traversnes a pro kazdej node stromu vygenerujes zpatky zdrojovy text. Pri tom traversovani si evidujes miru odsazeni a podle toho jak vstupujes do ruznejch nodu a vystupujes z nich, tak tu delku indentujici mezery menis.
    TOOMIX
    TOOMIX --- ---
    MICRO: jo, na ty kódy je vlastní kompilátor, ale to takový jednoduchý Pascal/C - if, else, přiřazení hodnoty, závorky, nějalé vestavěné funkce atd., doprogramoval jsem si obarvování syntaxe, ale to bylo vcelku jednoduché. U formátování nevím, odkud začít
    MICRO
    MICRO --- ---
    TOOMIX: Jesli máš vlastní kompilátor, a předpokládám i vlastní jazyk, asi bude nejlepší si to udělat sám.
    TOOMIX
    TOOMIX --- ---
    Mám desktop aplikaci v MFC, používám CRichEditCtrl a do něj se píše zdrojový kód, který pak validuji vlastním kompilátorem. Je v tom napsané podstatě takové C. Co byste mi doporučili za knihovnu pro formátování kódu? Stačí že by to zformátovalo až po stisknutí tlačítka. Díky
    UETOYO
    UETOYO --- ---
    Přemýšlím, že budu dělat takový 14-deník; seznam článků a videí v podobě odkazů -- prostě takový newsletter.
    Vlastně to budu dělat pro sebe, jako senznam věcí co jsem viděl a načetl. Zároveň bych to chtěl tady trochu renovovat a oživit.
    Nejaké nápady a případně zájem o to co jsem psal? Osobně jsem si myslel, že Rust začne tvrdě přebírat žezlo, ale za ta léta jsem docela vystřízlivěl a C++ mi vlastně docela sedí a stále se posouvá. Takže mám osobní motivaci do toho víc šlápnout.

    Zdravím.
    DANIELSOFT
    DANIELSOFT --- ---
    KOJA: ze proste takhle dlouhou a dalekosahlou evoluci asi jiny jazyk nezazil mozna krome Fortranu?
    UETOYO
    UETOYO --- ---
    Can C++ be 10x Simpler & Safer? - Herb Sutter - CppCon 2022
    https://www.youtube.com/watch?v=ELeZAKCN4tY&feature=youtu.be


    GitHub - hsutter/cppfront: A personal experimental C++ Syntax 2 -> Syntax 1 compiler
    https://github.com/hsutter/cppfront
    BADBOY23
    BADBOY23 --- ---
    UETOYO: s kodem nejsem moc kamarad:D a uz takhle ve studiu travim spoustu casu jeste abych se ponoril do tohodle sveta....moje idea spis byla pokud by to tady nekoho zajimalo nebo pokud nekdo zkousel neco podobnyho jestli by nebyl ochotnej se na to kouknout a ricit mi jestli to vubec bude proveditelny nejak rozumne jenom protoze jsem si vymyslel nejakou blbost:D s tim ze jsem ochotnej zaplatit nebo treba protisluzbu delam audio/video/grafiku
    BADBOY23
    BADBOY23 --- ---
    Cau mam lama dotaz s C++ nemam zadne zkusenosti produkuji v nekolika DAW Audio a objevil jsem https://juce.com/
    v kterem se daji delat vst audio pluginy pripadne coz je vec proc to resim udelat z pluginu dll - vst pokud je to mozne google me dostal k juice tak to zkousim tady...byl by jste schopny mi s tim nekdo pomoct samozrejme vim ze nic neni zadarmo pokud by jste nekdo do toho sel napiste mi do posty at to tady nezasirame...rozepisu se o co by se presne jednalo...diky Jiri
    UETOYO
    UETOYO --- ---
    CppCon 2017: Bjarne Stroustrup “Learning and Teaching Modern C++”
    https://www.youtube.com/watch?v=fX2W3nNjJIo&ab_channel=CppCon
    UETOYO
    UETOYO --- ---
    Structure and Interpretation of Computer Programs: SICP - Conor Hoekstra - CppCon 2020
    https://www.youtube.com/watch?v=7oV7hiAsVTI&ab_channel=CppCon
    UETOYO
    UETOYO --- ---
    Koncepty klepou na dveře, tady je blog post s malou ukázkou:
    omni blogs
    https://omnigoat.github.io/2020/01/19/cpp20-concepts/
    Více také na https://en.cppreference.com/w/cpp/language/constraints
    UETOYO
    UETOYO --- ---
    C++Now 2017: Daniel Pfeifer “Effective CMake"
    https://www.youtube.com/watch?v=bsXLMQ6WgIk
    VEVERAK
    VEVERAK --- ---
    ANT_39: Ja prave se dostal do faze ze uz algoritmy jsou pro mne citelnejsi ... nicmene s tim x.do_stuff(); mas pravdu, schazi tu neco jako std::for_each(container, do_stuff);
    ANT_39
    ANT_39 --- ---
    VEVERAK: Ja to obcas zkousim, ale mimo nejake sorty a podobne "velke" algoritmy mi to nepripadne moc prakticke. Takovy to for (auto const &x: xs) x.do_stuff(); mi v porovnani s std::for_each pripada citelnejsi, a ten zapis byva i kratsi.

    Tu a tam narazim na potrebu napsat neco jako je v Pythonu print ",".join(foo(i) for i in kontejner), a co jsem se koukal par let zpatky, tak cyklus s booleanem, ktery ridi zda "," vypsat, nebo ne, byl proste nejcitelnejsi reseni.

    V zasade jsem z tech algoritmu celkem zklamany. Ten jazyk porad jeste nema expresivitu, aby se to vyplacelo. Cast problemu je asi v tom, ze mam oko natrenovane na cteni te rozvinute formy, ale faktem je, ze kdyz se kouknu na tu syntaktickou polivku, ktera kolem toho volani algoritmu typicky vznikne, tak to radsi prepisu zpatky.

    Poslednich par let ale C++ sleduju jen dost zdalky, mozna se to s C++17 zlepsilo.
    VEVERAK
    VEVERAK --- ---
    Vzhledem k tomu ze na tom byl v mem projektu prostor, tak jsem si rekl ze na truc kromne util/ nikde nepouziju for/while.
    Po case to zaclo drhnout na dvou vecech:

    - Psat pokazde container.begin() a container.end(), hlavne v situacich kdy se jedna o delsi jmeno, je otrava a kazi to prehlednost.
    - Par veci nejde udelat s standartnima algoritmama jednoduse (kombinovat je slozite za sebou nema smysl).

    Skoncil jsem u toho ze jsem si napsal funkce forEach(Container container, UnaryFunction f) etc... ktere berou jen jeden argument (a ocekavaji begin()/end()) a doplnil par dalsich funkci na algoritmy ktere tam nejsou, napr: maxElement(container, f)

    Ve finale to pro mne vedlo k sprehledneni kodu a jsem s tim i dlouhodobe spokojeny. V tenhle moment kdyz vidim kus kodu tak mam jasne co za algoritmus je spusteny nad daty a kontextove je typicky jasne kdy a jak se spousti dana funkce a kcemu asi slouzi, neni potreba analyzovat cely kus kodu. (Coz je fajn.)

    Ovsem uznavam ze to kromne mne nikdo jiny necte takze muze byt biased nazor.
    FXXXX
    FXXXX --- ---
    GitHub - lefticus/cppbestpractices: Collaborative Collection of C++ Best Practices
    https://github.com/lefticus/cppbestpractices
    KOJA
    KOJA --- ---
    UETOYO: Presne! Moje prvni reakce na novinky v C++17 tehdy bylo, ze jsem zacal procitat tutorial k Rustu :-)
    Pro realne pouziti tam kde je to vhodne (ano tautologie, sorry neumim se vyjadrovat) mi C++ jeste neprijde tak mimo optimum abych ted hned presedlaval ale prubezne se rozhlizim a premyslim. Zatim mam jenom takove fragmenty co se mi na ruznych jazycich libi a treba z toho postupne slepim ultimatniho kockopsa :-) C++ mi prjde, ze je sveho druhu prukopnik, ze proste takhle dlouhou a dalekosahlou evoluci asi jiny jazyk nezazil a tudiz se to vsichni zucastneni porad vlastne uci. Prijde mi to trochu jako kdyby se velka firma co vyrabi letadla pokusila promenit treba na retezec restauraci.

    Tyjo, ty metaclasses, to je poradnej kalibr. Taky na to kouknu radsi jeste jednou a poradne.
    UETOYO
    UETOYO --- ---
    KOJA: Díky za odkaz... projdu si to o víkendu. Přes nos mi ještě přešlo toto: https://herbsutter.com/2017/07/26/metaclasses-thoughts-on-generative-c/
    Popravdě s C++ mám takový manio-depresivní období... když se podívám třeba na D nebo Rust a vidím ten rozdíl v ergonomii jazyka... V C++ jde vše, ale za jako cenu...
    KOJA
    KOJA --- ---
    UETOYO: Jeste jsem koukal na prezentaci o Ranges od Erica Nieblera ktera je tam zminovana.
    CppCon 2015: Eric Niebler "Ranges for the Standard Library"
    https://www.youtube.com/watch?v=mFUXNMfaciE

    Je to vice-mene step-by-step popis toho prikladu s formatovanim kalendare. Posledni cca pulhodina jsou dotazy a pro mne byly asi jeste zajimavejsi (sentinely, implementace operaci na nekonecnych ranges, o tom jak se to ma s typama pri manipulaci s ranges apod.)

    Jak jsem na to koukal, tak mi ale doslo, ze za tema par radkama kodu s autodedukovanyma typama je hromada kodu ktery je pro nas uplne virtualni, prekladac si ho sice vygeneruje (treba kdyz si udela instance konkretnich sablon) ale AFAGK (google mlci) pristup k nemu nemame, takze je nutne si ho modelovat jenom v hlave. Videt je vlastne jenom meta-C++ kod, pripadne AST a interni reprezentace kodu v prekladaci a pak az assembler. Rikam si jestli by nebylo zajimave mit moznost premluvit prekladac aby skutecne vygeneroval a dumpnul C++ kod po vsech compile-time vypoctech a pred optimalizacema. Jedine relevantni tool o kterem vim a ktery ale ma trochu jiny uhel pohledu a nevim nakolik je to jen proof-of-concept je meta-debugger Metashell (Templight) z dilny Abela Sinkovics a jeho studentu.
    Kliknutím sem můžete změnit nastavení reklam