• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    XCHAOSANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API
    /* Toto je klub především pro lidi, pro které je programování jednou z mnoha massive multiplayer online počítačových her, které lze hrát.
        V tomto klubu hrozí sémantická hereze a nezdravě vysoký obsah syntaktického cukru. Nevhodné pro algoritmické diabetiky.
        Od účastníků debaty se předpokládá automaticky přístup k instalovanému GNU C: sudo apt-get install build-essential
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C (programovací jazyk)#C99 Heslo na české Wikipedii
    Jazyk C - Základy praktického programování V Praze 2oo7 pro SSPŠ Tomáš Harvie Mudruňka a kolektiv - jak si programování v C představuje většina lidí
    http://stevenkobes.com/ctest.html C Programming Puzzlers - nepouštějte se do flamewars v tomhle klubu, pokud neuhodnete aspoň polovinu správně!
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    http://en.wikipedia.org/wiki/C99 C99 is a modern dialect of the C programming language.
    http://cprogramminglanguage.net/ C programming language
    http://cprogramminglanguage.net/c-programming-language-tutorial.aspx C programming language - úvod
    http://en.wikipedia.org/wiki/Criticism_of_the_C_programming_language C makes it easy to shoot yourself in the foot. (ještě že ne do hlavy...)
    http://en.wikipedia.org/wiki/C_preprocessor
    http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html C99 makra s proměnným počtem argumentů - __VA_ARGS__
    http://gcc.gnu.org/onlinedocs/gcc/ GNU C Compiler
    http://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/Optimize-Options.html
    http://bellard.org/tcc/ Tiny C Compiler - prý C99 compliant (min. umí __VA_ARGS__) - vhodný pro skriptování v C - umí #!/usr/bin/tcc -run
    http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest - pokud jste neviděli tohle, tak jste ještě neviděli opravdu nečitelný C zdroják
    http://bellard.org/otcc/ Obfuscated Tiny C Compiler - z tohohle vtípku vznikl Tiny C compiler
    http://en.wikipedia.org/wiki/ANSI_C Jak se střelit do nohy standardizovaným způsobem.
    http://eli-project.sourceforge.net/c_html/c.html ANSI C Specification
    http://www.lysator.liu.se/c/ Různý ANSI C bordel
    http://www.cs.rit.edu/~ats/books/ooc.pdf Object Oriented Programming with ANSI-C - a pak že to nejde
    http://en.wikipedia.org/wiki/Longjmp co jsou to setjmp()/longjmp() knihovní funkce (pro všechny, podle kterých to bez C++ try { } catch() ... nejde)
    http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/dcdc710c27f47c72 C neumí správně počítat (?)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    http://www.fastcgi.com/ FastCGI is simple because it is actually CGI with only a few extensions.
    http://www.metalshell.com/source_code/18/Mysql_Select.html How to do a simple connection and select with mysql
    http://xmlsoft.org/ The XML C parser and toolkit of Gnome
    http://curl.haxx.se/libcurl/ libcurl - the multiprotocol file transfer library
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    https://dev.arachne.cz/svn/cll1h SVN/Trac jazyka C<<1 (user-friendly nadstavba nad ANSI C99 - ve stylu JQuery vs. JavaScript)
    Benchmark iterace a serializace stringů v různých jazycích vs. v C
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        moderátor se velice zhruba řídí zvyklostmi moderace, která kdysi platila v řadě konferencí sítě FidoNet ... C != 0xdead */
    rozbalit záhlaví
    KLEINZACH
    KLEINZACH --- ---
    DAVIDOWITCH: heh, v bejvaly firme mi tudle techniku zakazali, protoze si nekde na netu precetli, ze "z funkce ma byt pouze jeden return" a prislo jim to jako super napad..
    JANFROG
    JANFROG --- ---
    DAVIDOWITCH: Diky, neznal jsem. Vyzkousim jestli to dela to co chci a napis report (otazka je kdy :-)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JANFROG: V jazyce samotném skoro určitě nic není, ale gcc na to má:
    c++ - Is there a compiler hint for GCC to force branch prediction to always go a certain way? - Stack Overflow
    http://stackoverflow.com/...-a-compiler-hint-for-gcc-to-force-branch-prediction-to-always-go-a-certa

    Já to mám rád protože na začátku funkce si ošetřím chyby (jako unlikely), a vlastní tělo je pak ve zbytku fce napsaný bez spousty indentace a dobře se to čte.
    JANFROG
    JANFROG --- ---
    DAVIDOWITCH: Mozna ano, ale nevim, jek se to dela :-( Muzes dat nejaky priklad (C99) jak to udelat?
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JANFROG: v tom tvém příkladu, nestačil by nějaký statický jump hint, místo změny kódu?
    XCHAOS
    XCHAOS --- ---
    JANFROG: aha, no. já na mikrooptimalizace u toho, co se dělá fakt často, docela věřím. bohužel jsem vlastně už léta nic takového nepsal, a tedy neoptimalizoval (protože jsem vlastně s desktopovými pokusy skončil už dávno... a od té doby píšu víceméně jen skripty)
    JANFROG
    JANFROG --- ---
    XCHAOS: Z toho si nic nedelej, vsichni vime, ze REDGUY ma s Tebou nejaky problem...
    JANFROG
    JANFROG --- ---
    XCHAOS: Aha. V tom mem postu jsem vubec nenarazel na vyjimky a uvolnovani zdroju jako spis na fakt, ze i mikro-optimalizace jako mit fast-path bez skoku muze dost vyrazne pomoci. S vyjimkam to nesouviselo...
    XCHAOS
    XCHAOS --- ---
    REDGUY: příhodně ontopic:
    Red Guy Butt-walking. Czerwony chodzi na tyłku.
    https://www.youtube.com/watch?v=icy4NVpejCs
    REDGUY
    REDGUY --- ---
    XCHAOS: Heh, tobe se clovek nezavdeci. Kdyz ti napisu, ze mas nebo blbe, tak se vztekas. Kdyz i jen kliknu na to jedno maly blby minusko, taky se vztekas. Jestli tak spatne snasis kritiku ode me, mozna by sis me mel zablokovat, misto aby ses ponizoval timhle ufnukanym zalovanim, nemyslis?

    Anyway, proc minus? Protoze snazit se ti znova vysvetlit to, co jsi nepochopil uz pred tema x rokama, co jsem ti to vysvetloval poprve, mi prijde jako zbytecne. Takze proc se snazit, kdyz staci minus, ze?

    Nicmene, jo, nekolik veci v [ XCHAOS @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ] je prekvapive pricetnejch. Napriklad každá posedlost použitými prostředky místo dosaženými cíli: kdybys tohle aplikoval na svoji posedlost slunecni energii... hmmm.. 8)))
    XCHAOS
    XCHAOS --- ---
    JANFROG: no že prostě goto ti neaktivuje věci, které souvisí s opuštěním scope. Vyvolání throw() někde uvnitř try{} bloku (v C++) podle mě ano (i když REDGUY dal minus, tak se ho zeptej, které části toho textu dal minus). Když si to v C nasimuluju pomocí longjmp(), tak se jen obnoví úroveň stacku zaznamenaná v bodě setjmp() (podle mě) - ale jinak k žádnému automatickému uvolnění dalších zdrojů systému nedojde (jako ostatně v C nikdy)
    XCHAOS
    XCHAOS --- ---
    to je vůl, ten REDGUY s těma minuskama za nic (nota bene, když prezentuju stanovisko, do kterého mi i on sám za ta léta dotlačil...)
    JANFROG
    JANFROG --- ---
    XCHAOS: Ted jsem mirne ztracen. Jak to souvisi s vyjimkami?
    KOJA: Taky se ztracim...
    KOJA
    KOJA --- ---
    JANFROG: Kdyz bych se to pro sebe pokusil oskatulkovat jako "spise mensi" projekty s enormni mirou znovupouziti davalo by ti to smysl?

    * "spise mensi" jsem si dovolil na zaklade toho, ze mi cloc tvrdi, ze libstdc++ 5.4.0 pro amd64 je cca 100kLOC.
    XCHAOS
    XCHAOS --- ---
    JANFROG: v C se dá ale obstojný try{}except{} implementovat pomocí setjmp/longjmp :-) ale samozřejmě u jazyka bez automatického volání destruktorů na konci scope nebudou věci tak sluníčkové jen proto, že navenek to bude vypadat "moderně".

    myslím, že v C++ zavedli to try právě proto, aby tam vždy byl scope, na jehož konci se zavolají příslušné destruktury - protože tradiční goto by je prostě nezavolalo (nejde jen o paměť, ale třeba i pozavírání otevřených souborů a uvolnění podobných zdrojů)

    jako je fakt, že čím víc jsem se snažil obejít bez C++, tím víc jsem z jiných programovacích jazyků (např. Python) okoukal, proč ten vývoj od C k C++ probíhal. dokud člověk píše jednoduché prográmky a ne náročné aplikace, tak nad problematikou uvolňování zdrojů většinou vůbec nepřemýšlí a přijde mu ok, že se vše uvolní až když program skončí...

    každopádně do věcí, co jsem chtěl nad C udělat, jsem se za posledních pár let pěkně zamotal. v podstatě ale každá posedlost použitými prostředky místo dosaženými cíli (které jsou v podstatě vždy dočasné, iluzorní a zbytečné) povede k něčemu podobnému (nejen u C, nejen u programování...)
    JANFROG
    JANFROG --- ---
    KOJA: Myslim ze ano. Je to videt vsude kolem (me :-) To si ale nutne neprotireci s tim
    <i>ze na hromadu problemu staci rozumny navrh na urovni architektury a (pardon) "mikrooptimalizace" nejsou potreba</i>. Samozrejme, pokud mas O(n^3) algoritmus a existuje O(nlogn), pak nema cenu "mikrooptimalizovat" ten n^3. O tom zadna.

    Zalezi na tom co delas. Pokud delas nejakou aplikaci, rekneme nejaky IS nebo tak, pak asi opravdu jedine, co ma smysl je pouziti dobrych algoritmu a rozumne cacheovani.
    Pokud ale delas vis low-level - zakladni knihovny, runtime, prekladace - pak je dost citit jestli neco udelas na ~1 cachemiss nebo na ~10 cachemiss, prestoze slozitost obou je O(1), rekneme. Nebo je dost rozdil, jestli
    napises

    if (error) {
    handle_error();
    return;
    } else {
    ...
    }

    nebo

    if (!error) {
    ....
    return;
    } else {
    handle_error();
    }

    pripadne

    if (error) goto handle_error;
    fixed: ...
    return
    fix_error();
    goto fixed;


    pokud je to low-level kod, provadi se opravdu casto a muze to bolet (vlastni zkusenost :-)

    On i ten REDGUYem vysmivany benchmark ukaze zajimave veci - ono to neni tak ze <i>podstate testuje jednu jedinou funkci v dost trivialnich podminkach<i>. On spis testuje, jak dobry je optimalizator a jak se chova - obzvlaste na jit systemech se spekulativnim inlinovanim (dokaze tu funkci nainlinovat? Kdy to udela? Od kdy se vyplati zpomaleni zpusobene rekompilaci, OSR, a naslednym restartem? Kdy deoptimalizuje?). Kdyby tyhle veci nemeli velky vyznam, nedelalo by se to - je to _dost_ prace to odladit :-)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: ASIC na řetězení stringů? jako alternativa akcelerované grafárny pro webservery? :-))
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    KOJA: ASICy muzou bejt zajimavy kvuli spotrebe. Obecne, dedikovanej HW je zajimavej kvuli spotrebe.
    KOJA
    KOJA --- ---
    JANFROG: Zajimavy. Chapu spravne, ze ocekavas, ze vyznam optimalizace kodu poroste? Kdybys chtel rozvest svoji perspektivu, rad si poctu. Sam o tom obcas popremyslim a zaver zadny nemam - na jedne strane si google vyrabi asicy (proc?), na strane druhe mam obcas pocit, ze na hromadu problemu staci rozumny navrh na urovni architektury a (pardon) "mikrooptimalizace" nejsou potreba (nanejvys tak jeste poresit cachovani vsude kde to dava smysl).
    KOJA
    KOJA --- ---
    REDGUY: Jo, sorry, tak jsem to i myslel a prislo mi, ze to tak myslite oba. Ten linkovany benchmark uz jsem v myslenkach uplne opustil.
    REDGUY
    REDGUY --- ---
    KOJA: Kdyz rikam nanobenchmark tak myslim to, co tady bylo nalinkovany, cili opravdu nano vec, ktera v podstate testuje jednu jedinou funkci v dost trivialnich podminkach. V okamziku, kdy mluvis o "skladani benchmarku", tak uz to imho je neco jineho a k tomu jsem se nevyjadroval.
    KOJA
    KOJA --- ---
    REDGUY, JANFROG: Myslim, ze to "podobne" asi implicitne myslite oba. Problem syntetickych benchmarku mi prijde dost slozity na to aby byl zajimavy sam o sobe. Nektere "low hanging fruit" jde asi pocesat obecne - napr. knihovna facebook folly ktera "nikdy neni pomalejsi a obvykle je rychlejsi" nez STL implementace v libstdc++. Ale namixovat synteticky benchmark tak, aby byl relevantni a pomohl zvolit statisticky vyhodny kompromis bude asi dost zajimave. Skladat treba benchmark na kterem se otestuji ruzne branch prediction algoritmy pri vyvoji noveho desktopoveho CPU muze byt dost dobra zabava.
    Kliknutím sem můžete změnit nastavení reklam