• ú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í
    UETOYO
    UETOYO --- ---
    Možná se koukni jak se to dělá v Pythonu. Ten má formátování jako součást syntaxe. Jen takovej nápad.
    Lexikální a syntaktická analýza zdrojových kódů programovacího jazyka Python - Root.cz
    Lexikální a syntaktická analýza zdrojových kódů programovacího jazyka Python - Root.cz
    https://www.root.cz/clanky/lexikalni-a-syntakticka-analyza-zdrojovych-kodu-programovaciho-jazyka-python/
    TOOMIX
    TOOMIX --- ---
    MICRO: ve výsledku mi stačí jen odsazovat podle chlupatých závorek a kolem znamínek (+-*/) mít z každé strany jednu mezeru
    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.
    Kliknutím sem můžete změnit nastavení reklam