• ú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í
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Je to ciste skolni uloha, ale ma spoustu fajn figlu. Jako treba jak to udelas aby to fungovalo na utf16 (tj. kazdej znak ma bud 8 nebo 16 bitu, podle flagu v nejvyssim bitu).
    Nebo co udelas kdyz se to nevejde cely do pameti.

    Pricemz pristup do out-of-core dat je dulezitej pro.. no skoro vsechno.
    I kdyz klasictejsi otazka na tohle bejva na sort.. mas obrovsky mnozstvi dat na disku, nevejde se to do pameti, chces je seradit, jak to udelas?

    (Dalsi dobra uloha je, ze mas obrovskej log, nekolik TB, a chces z nej random 10k pro nejaky statisticky zpracovani... jak vyberes 10k radek abys nemel zbytecny IO)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no, sice string reverse není operace, se kterou bych se setkal jinde, než mimo úlohy studijního typu, ale přeci: třeba v případě immutable stringů v Pythonu by to taky byla prasárna... až na to, že Python má "extended slice" syntaxi :-))) viz http://stackoverflow.com/questions/931092/reverse-a-string-in-python
    KEYMASTER
    KEYMASTER --- ---
    DAVIDOWITCH: tohle přece za mě zoptimalizuje kompilátor, riiiiiight? ;)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JANFROG: KEYMASTER: Jo.. byl tam strlen

    for(int i = 0; i < strlen(str); ++i)
    std::swap(str[i], str[strlen(str) - i - 1]);

    (tj. nejenze to neprohodilo, ale mel tam to N^2 hned 2x)
    KEYMASTER
    KEYMASTER --- ---
    JANFROG:
    char* previous = malloc(1);
    previous[0] = 0;
    for(int i = 0; i < strlen(input); ++i) {
    char* next = malloc(strlen(previous) + 2);
    next[0] = input[i];
    for(int j = 0; j < strlen(previous)+1; ++j) {
    next[j+1] = previous[j];
    }
    previous = next;
    }

    Víc to naprasit nedokážu. Dealokace paměti vynechána z důvodu optimalizace, někde jsem četl že free je pomalý a všechna pamět se stejně uvolní po skončení programu.
    JANFROG
    JANFROG --- ---
    DAVIDOWITCH: N^2, to bych ani nevedel jak to udelat :-)
    JANFROG
    JANFROG --- ---
    WILD_A: Tak hlavne pointa je v tom, ze u HLL - pokud jeho VM za neco stoji - ani nemuzes vedet, co se skutecne provede dokud ten program nespustis nad konkretnima datama...takze IMHO ani nema cenu s tim nejak operovat...
    WILD_A
    WILD_A --- ---
    DAVIDOWITCH: Ja to pochopil tak, ze by vykon mel byt bran v potaz, ne ze jde hlavne o vykon.
    string reverse v N^2 je ovsem vic nez snaha zbytecne neoptimalizovat, to je presnej opak :)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    WILD_A: Tak soucasti pointy clanku je i to, ze vetsina aplikaci neni zamerena na vykon, ale mohla/mela by :-D
    My ted meli na pohovoru experta kterej na otoceni stringu (normalniho, in-core, vubec zadny habadury) navrhl N^2 algoritmus a vubec mu to neprislo divny, i pred nekolik hintu ze mozna preci jen.. :-/
    WILD_A
    WILD_A --- ---
    Priznam se, ze kdyz pouzivam HLL jako python nebo lisp tak nevim jaky konkretne instrukce z toho jsou, ale ze zkusenosti vim co je rychlejsi. uspornejsi. Nevim jestli je potreba vedet na co se dany konstrukt JITne, nicmene vedet jak se dany konstrukt chova je rozhodne uzitecny a znat alespon hrubejs vnitrnosti jazyka a runtimu povazuju za podminku nutnou. Z meho okoli vim, ze treba garbage collector je pro velkou cast lidi cerna skrinka co neco magicky dela a moc nikdo nevi jak konkretne funguje, ani zaklady typu jestli je generacni a co to znamena.

    Celkove clanek zajimavej, obzvlast snahou napravit mytus, ale ze by se vetsina snazila naucit assembler mi prijde nepravdepodobny, byt je to imo dobra zkusenost a souhlasim ze to dava smysl, ja se to kdysi naucil crackovanim her, SoftICE rulez :). I kdyz abych pravdu rekl, ze tak si myslim, ze vetsina nepotrebuje znat asm, ale znat runtime jazyka ktery pouzivaji, aby se vyhnuli aspon tem nejhorsim konstrukcim, vetsina aplikaci neni zamerena na vykon.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Prosimte, i kdyz je to tvuj klub, zkus si nejdriv clanek precist nez ho zacnes komentovat. Nebo ho nekomentuj vubec, pokud te obsah nezajima, to je taky zcela validni pristup.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no, tak nějak jsem to prolétl. je to takové šalamounské, no. je fakt, že jestli se nějaká instrukce týká např. každého packetu, který projde routerem třeba 2000x nebo např. jen 7x, je docela rozdíl ... nevím, co na to říká Mooreův zákon, ale pokud nějakého produktu jste schopni prodat se stejnými náklady třeba 100x tolik, tak optimalizace asi smysl měla.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JANFROG: Tak clanek predpoklada ze lidi vedi. Respektive, prislo mi ze to ze se lidi neobtezuji vedet (a nemuzou potom spravne rozhodnout) povazuje za velkou chybu.
    Tj. to ze nevybiraji "rychlejsi" je na stejny urovni jako ze vybiraji "rychlejsi", ale delaj to blbe. Oboje znamena ze nemaj dost znalosti na to optimalizovat.

    XCHAOS: Z tveho komentare bych odvodil, ze si necetl ani prvni odstavce clanku...
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no ale některé z nás prostě baví optimalizovat. (ostatně, řada projektů ve světě free software vzniká dobrovolně, a ne na zakázku.. i když částečně je to mýtus a některé podstatné komponenty dnešních linuxových distribucí jsou původně komerční projekty, později abandonware uvolněný pod GPL...)
    XCHAOS
    XCHAOS --- ---
    JANFROG: :-)))
    JANFROG
    JANFROG --- ---
    A jeste jedna usmevna historka: doted si vzpominam, jak me muj "guru" sprdnul stylem: "Ach ne, hlavne zadny if-else. Kdyz uz nusis, tak jedine goto! :-) Kazdej jsme nejak zacinal :-)
    JANFROG
    JANFROG --- ---
    DAVIDOWITCH: Zajimavy cteni. Necetl jsem to dukladne, s radou veci souhlasim, ale jsou tam i veci, se kteryma nesouhlasim. Napr. ze programator (v HLL) by mel vybirat se dvou semanticky ekvivalentnich konstrukci ty "rychlejsi". Moje zkusenost je, ze spousta "programatoru" to "dela", v zasade ale spatne, protoze netusi co se dole deje (resp si mysli, ze tusi). Typicke priklady co jsem mel tu cest videt/slyset:
    * hlavne nevytvarejte zbytecne objekty, zbytecne to zatezuje GC, kdyz uz, znovu pouzijte existujici!
    * hlavne ne vyjimky, jsou pomale!
    * nikdy nepouzivejte konkatenaci stringu, vzdycky jen pres stringbuffer!

    a podobne perly ;-)
    WILD_A
    WILD_A --- ---
    ANT_39: tohle tema je hlavne otazka osobnich preferenci a ja osobne uprednostnuju aby kod pokud mozno neschovaval slozitosti coz imo pretezovani operatoru dela, akceptoval jsemto do nejaky miry, nicmene pokud se jedna o specifickou tridu takmam radsi jasny volani funkce at mne to tukne do oka driv nez rozjedu profiler. Jasny, ze muzu tuhle debatu vzdycky smest tim, ze profiler mi odhali vsechno nebo, ze kdyz koukmu na ten asm tak mi to ukaze pravdu, ale kdyz je to kasny z kodu tak anijedno delat nemusim a usetril jsem si praci. Takze za mme je to nepretezovat pokud to neni jasny nebo se to nechova obvyklym, ocekavanym zpusobem.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JANFROG: Jasny, a jo, tvoje aproximace rozhodne dava smysl.

    A ja tu prihodim clanek na tema optimalizace, je to hezky cteni:
    The Fallacy of Premature Optimization
    http://ubiquity.acm.org/article.cfm?id=1513451
    JANFROG
    JANFROG --- ---
    DAVIDOWITCH: Ja vim ze to vis. Jen jsem chtel poukazat na to, ze v instrukcich je trosku nesmysl dneska pocitat.

    I kdyz, musim se priznat, ja to sam delam :-) Kdyz generuji / pisu kod, obvykle jen pocitam pocet taken-jumpu ve fast path + kouknu na efektivitu vyuziti cache. V mem konkretnim pripade je to docela dobra aproximace...
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JANFROG: Vim. Jen sem rozvadel napad ze [] v C je lepsi protoze trva jen instrukci. To ze mnohem vic zalezi na tom jestli mas to kam tim [] pristupujes v cache nebo ne nez na tom pres kolik instrukci spocitas presnou adresu je trochu soucasti pointy. (A ja bych asi vytahl ze spojaky jsou na ten pristup kor blby, protoze nepouzivaj datovou lokalitu.. ale to uz tu nekolikrat bylo)
    Kliknutím sem můžete změnit nastavení reklam