• ú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í
    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.
    ANT_39
    ANT_39 --- ---
    KOJA: Ten talk jsem nevidel, ale osobne jsem z pouziti std::accumulate, std::transform atd. taky rozpacitej. Ted c++ nepisu, ale kdyz jsem to pred nejakou dobou zkousel pouzivat, tak mi vetsinou vyslo, ze for cyklus je prehlednejsi a cistsi.
    KOJA
    KOJA --- ---
    UETOYO: Nejenomze posloucha ale dobre se na to i kouka. Me to malem dojalo.
    Nektery veci jsem si "taky vymyslel" (triviality jako pouzit lambdu kdyz chci inicializovat const instanci pomoci funkce ktera bere v rozhrani referenci na vysledek), takze na jednu stranu jo, je zajimavy videt, ze nekdo uvazuje podobne.

    Na druhou stranu mam ale trochu dilema protoze kdyz vidim kam tenhle zpusob psani v C++ vede (treba pokusy pouzit std::accumulate, std::for_each nebo std::transform namisto jednoducheho for cyklu), tak si pak v nekterych pripadech reknu, ze C++ na tohle proste nebylo navrzeny a radsi to napisu "C-ckove" protoze expression-oriented zapis je dost krkolomny a i ja sam bych na to za mesic taky mozna koukal jako pero z gauce. Pravda ale je, ze znacnou prekazku vidim v reprezentaci "kolekci" objektu pomoci dvou iteratoru vsude v STLku.

    Na hodnoceni takovych tech znasilnovani ruznych operatoru pro syntakticky cukr (potazmo tvorbu DSL) mam zatim malo dat ale prozatim jsem spise opatrny protoze leccos vypada presne na takovyhle slidech moc hezky ale v realu se do toho zatim vzdycky bud pripletl nejaky zakerny detail C++ nebo byla implementace toho aparatu natolik slozita, ze pri pomysleni na jeho debugovani jsem ja i temer vsichni ostatni vymekli a napsali to "postaru" a jednoduse.

    BTW nevite nekdo o nejake vetsi (verejne citelne) C++ code-base kde by byly takovehle novoty konzistentne pouzivane? Nebo aspon nejake sepsane zkusenosti a poznatky kde to drhlo?
    UETOYO
    UETOYO --- ---
    Phil Nash -- autor knihovny Catch -- ,á medový hlas :D, dobře se to poslouchá.
    Functional C++ for Fun and Profit by Phil Nash
    https://www.youtube.com/watch?v=YgcUuYCCV14&t=250s
    UETOYO
    UETOYO --- ---
    Stojí za shlédnutí
    C++Now 2017: Niko Matsakis "Rust: Hack Without Fear!"
    https://www.youtube.com/watch?v=lO1z-7cuRYI

    Things that Matter - Scott Meyers | DConf2017
    https://www.youtube.com/watch?v=RT46MpK39rQ
    KLEINZACH
    KLEINZACH --- ---
    UETOYO: jo, mam jeden projekt jako staticky qt pod msvc. pouzivam cmake na vsechno a sem s tim celkem spokojenej. qmake pouzivam jenom na vybuildeni qt.

    to jejich Qt IDE je takovy vselijaky: pouzivam z toho qt creator, protoze je to o hodne mensi opruz nez to psat v kodu nebo rovnou v xml (i kdyz clovek musi obcas i to, protoze creator neumi moc dobre copy/paste slozitejsich widgetu do layoutu).
    samotnyho vyvojarskyho ide se trosku vyhybam - dycky byl opruz zprovoznit/nakonfigurovat spravnej toolkit. no a hlavne programatorsky pohodli celkem zadny oproti msvc + visual assist a debugger ma taky msvc lepsi (zvlast kdyz je vybavenej natvisem, kterej lidi od qt udrzujou)
    na mensi veci klidne, ale kazdej den bych s tim delat nechtel, to radsi vim/emacs + gdb...
    --
    btw 2017 rc mam, zkousel sem parkrat ten jejich cmake subsystem, ale asi to funguje jenom na mensich projektech, na pracovnim to doslova vyblilo nesmysl - fakt, to snad nebyl ani platnej projekt :)

    co je dobry, aspon budou muset do cmake dodelat podporu pch (cmake netusi o pch vubec nic, pro nej sou to jenom prepinace, msvc je ma navic udelany trosku jinak nez gcc a dohromady to boli)
    RESURRECTION
    RESURRECTION --- ---
    UETOYO: Nejakou dobu jsem to s tim zkousel a docela to slo. Pokud jsi zvykly na VS, tak se to da; ja jsem spis zvykly na Qt Creator. Jsou k tomu oficialni Qt VS Tools a dela se s tim dobre. Funguje bez problemu QMake projekt, CMake projekt i VS projekt vsechno s Qtem. Kdyz mas stazene zdrojaky, tak se to da Qt i krasne debugovat z VS. Za nejvetsi minus povazuju obecne nestabilitu a naprostou neintuitivnost VS. Neustale zaseky, zpomaleni, "cekani na interni procesy" apod. Nic co by souviselo s Qtem nicmene. :-) Imho je to o preferencich, jake IDE chces pouzivat a jake ti vyhovuje.
    UETOYO
    UETOYO --- ---
    Ostrá verze Visual Studio 2017 by měla být vydána v první polovině března a práce s CMake projektem by se měla dost zjednodušit proti nynější verzi. Zkoušet se to dá samozřejmě už na RC verzi. https://blogs.msdn.microsoft.com/.../cmake-support-in-visual-studio-2017-whats-new-in-the-rc-update/

    Jen tak od cesty, je tu někdo kdo pracuje s Qt pod VS, plusy/mínusy oproti Qt Developer?
    UETOYO
    UETOYO --- ---
    Implementace funkcionálních datových struktur v C++: https://github.com/BartoszMilewski/Okasaki
    UETOYO
    UETOYO --- ---
    UETOYO
    UETOYO --- ---
    ANT_39: Jo budu na sebe přísnější ... vyrazil jsem to z nadpisu;
    UETOYO
    UETOYO --- ---
    ANT_39: Ne budu si to hlídat :) - dík za připomenutí; však je to jedna zpráva ... nicméně pokud někdo založí Rust diskuzi, zlobit se nebudu, třeba si toho někdo všimne.
    ANT_39
    ANT_39 --- ---
    UETOYO: Tohle ještě platí? Nějak to tu konverguje směrem k tomu druhýmu klubu...
    UETOYO
    UETOYO --- ---
    rustup.rs - The Rust toolchain installer
    https://www.rustup.rs/
    Taking Rust everywhere with rustup - The Rust Programming Language Blog
    http://blog.rust-lang.org/2016/05/13/rustup.html
    Kliknutím sem můžete změnit nastavení reklam