• ú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: Bavime se o norme C99 (mam rad svoje // komentare).
    A smart pointery nejsou veci normy, nedefinuje je ani C++, je to spis koncept/design pattern. Kterej se typicky interne implementuje pres pocitany reference (ale nemusi) a vyzaduje pretizeni =. To je jasny, to v C99 nenaimplementujes.
    Ale normalni pocitani referenci jako koncept neni na pretizeni = nikterak zavisly. Jako priklad kde to je pouzity bez = jsem uvedl COM. To ze je microsofti s tim nema nic spolecnyho, je to priklad knihovny ktera ma pocitany reference a nepouziva/nepotrebuje pretizeny =.

    Takze, proc nejdou teda takovy ty klasicky "manualni" pocitany reference?
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: bavíme se o normě ANSI C89/C99 ?

    jestli tyhle normy definují nějaké "smart pointery", tak mi něco uniklo... a notabene COM je speciálně microsoftí věc, že jo...
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: to mi prijde jako neco jinyho. To co rikas vylucuje existenci smart pointeru (at uz invazivnich nebo neinvazivnich), ale ref couting je neco jinyho. Teda, smart pointery typicky pouzivaj ref counting, ale treba COM to ma explicitne.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: v čistém C nemůžou být refcounty, pokud použiješ obyčejné přiřazování referencí pomocí = ... protože chování tohoto operátoru neovlivníš.

    uvažoval jsem o nějakém makru např. "a=let(b)", které by jako vedlejší efekt někde evidoval počet referencí na b - ale fakt si to nejde představit (především: reference zaniká na konci scope, v C nemáš nic jako "destruktor", takže prostě... není to uhlídatelné).

    fakt - když chci komfortní garbage collection v C, tak je nutné zvolit jiný přístup.
    XCHAOS
    XCHAOS --- ---
    ANT_39: nikdy se to nejmenovalo maruška, především :)

    REDGUY: hmm, hezké, že se umíš takhle rozkecat, ale v podstatě nic objevného si nenapsal. víceméně tvrdíš něco ve smyslu: "bez ohledu na to, jakými všemi způsoby se to dá dělat, a bez ohledu na to, kolik z nich já znám nebo si umím představit, jsem si jistý, že xChaos to udělá špatně, ha ha ha"

    a dokaž mi, že ne.
    ANT_39
    ANT_39 --- ---
    XCHAOS: Vysmivam? Tim, ze zminuji marusku, nebo cim?
    REDGUY
    REDGUY --- ---
    XCHAOS: tedy chápu to tak, že když to dělám já, je to směšné - a když to dělají ostatní, tak to vydá za článek na Wiki ? Vis, ono kdyz dva delaji "totez", neni to vzdy totez. Jak bych ti to jenom vysvetlil... jo, obrazkama: Kdyz se nekdo rozhodne delat hudbu, dopadne to takhle:



    A kdyz se ji rozhodne delat nekdo jinej, dopadne to takhle:



    Oboje je, technicky vzato, hudba. Ale presto je rozdil myslim zjevny.
    (oukej, priznavam, to prvni jsem neslysel a soudim ciste podle obalky. Pokud se pletu, neni problem dosadit nejakou jinou prisernost, ekvivalentni Cll1 8) )

    budou pouze anonymní kontexty remember { } a forget { } - skvele, mas jmena. A ted jeste jak budou fungovat?

    ale aspoň to dodržuje ducha strukturovaného programování - co to? Zatimco jine pristupy k alokaci pameti ho nedodrzuji? Nebo jak jsi to myslel?

    A ty refcounty by me taky docela zajimaly.

    XCHAOS: s urážením tady fakt začal někdo jiný. - dost mozna. Jen mi prislo legracni ze to beres tak osobne, ze ciste fakticke a k predmetu prispevku irelevantni konstatovani "nevim odkud to citujes" je ti dobrou zaminkou k tomu psat cosi o "nedovtipnosti". Prosim, neber to jako stiznost, naopak 8)

    XCHAOS: obecné přirovnání programátorů v C++ k leteckým dispečerům (myšlena na velkých mezinárodních letištích) bez další omáčky byste ale snad akceptovat mohli - proc? Protoze si to prejes? Cekas ze neco napises a ostatni to automaticky akceptujou? Obavam se ze tak to nefunguje. Proc zrovna leteckym dispecerum a ne treba architektum? Proc ne Perlisti a Javisti? Co Erlagnovci? Co lidi co pisou Cisco IOS? K jakym povolanim bys prirovnal ty? A vysvetlis mi konecne jak je to s tim vztahem zvidave analyticnosti a kreativnosti k objektovym jazykum, C++, kompilaci a interpretaci?
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Ja prosim ne. Proc tam nemuzou bejt ref county?
    XCHAOS
    XCHAOS --- ---
    REDGUY: no jak vidíš, tak nedávno jsem změnil API ke kontextovému alkátoru :-) vytvářet nějaké pojmenované kontexty, to by bylo takové "goto".

    budou pouze anonymní kontexty remember { } a forget { } (vnořovatelné do sebe, pochopitelně) ... a ano, pořád jsem byl líný to naprogramovat. ale aspoň to dodržuje ducha strukturovaného programování (pravda - to refcounty taky, ale proč v čistém C nemůžou být refcounty, to snad všichni chápou...)
    XCHAOS
    XCHAOS --- ---
    REDGUY: s urážením tady fakt začal někdo jiný.
    XCHAOS
    XCHAOS --- ---
    ANT_39:
    ANT_39: obecné přirovnání programátorů v C++ k leteckým dispečerům (myšlena na velkých mezinárodních letištích) bez další omáčky byste ale snad akceptovat mohli a to by ten flamewar ukončilo.

    já mám ambice být tak max. dispečerem na letišti malého aeroklubu, kde létají větroně, skáče se tam z padáku, občas nějaký ten vyhlídkový let, vrtulník záchranné služby, apod.
    XCHAOS
    XCHAOS --- ---
    ANT_39: každopádně je milé, ja se mi současně vysmíváš a současně připouštíš, že o odlišných alokačních strategicích přemýšlí i jiní lidé. tedy chápu to tak, že když to dělám já, je to směšné - a když to dělají ostatní, tak to vydá za článek na Wiki ? inu, tak to jsem asi fakt punkáč, no :-)

    REDGUY: tohle je (u tebe vyjímečně) ontopic copy+paste a není v tom nic, v čem bych nesouhlasil. odkazy,jak v ANSI C používat garbage collector místo obyčejného malloc() tady už proběhly a určitě byly přínosem.
    REDGUY
    REDGUY --- ---
    hmm, zajimavej komentar k tematu ze Slashdotu:

    When you're doing serious structure-hackery (as opposed to, say, string-hackery or numeric-hackery) in a non-GC language, you often end up having to structure your code around variable lifetimes, rather than structuring it around the algorithms like you're supposed to. The lack of GC can mean that some algorithms are not viable, and can result in the developer picking a worse algorithm instead. This kind of cost won't easily show up on a profile, but the cost is there, and it's nonzero.

    Compiler writers in particular know this, which is why even GCC uses GC. Yes, it's home-built application-specific carefully-applied-and-tuned GC, but it's GC nonetheless. I have a theory that one of the reasons why most languages use GC is that most languages are optimised for writing their own compiler in.

    Oh, and in a multi-threaded application, free() can be more expensive (in a latency sense) than malloc(). A well-tuned memory allocator maintains multiple arenas, so it can can allocate memory from whichever one has the lowest thread contention. But deallocating memory requires returning it to the arena from whence it came; you have no choice in this. Some high-performance applications (e.g. database servers) have been known to avoid the latency of free() by handing off critical memory blocks to a dedicated thread which just sits in a loop calling free(). Essentially, it's a GC thread, only it's a manual one.

    Don't get me wrong. I don't use Java for pretty much anything (definitely more of a C++-head). But one should never underestimate the cost of manual memory management, or of any other resource for that matter.
    ANT_39
    ANT_39 --- ---
    XCHAOS: A ze se programator v C++ lisi od programatora v cemkoli jinym z hlediska prescasu a penez, co si za to rekne, to by chtelo nejaky solidni data, abych tomu zacal verit.
    ANT_39
    ANT_39 --- ---
    REDGUY: Ja zas s nostalgii vzpominam na Marušku :)

    Jinak ty alternativni alokacni techniky nejsou zas tak nova vec, ne? Nabizi se https://secure.wikimedia.org/wikipedia/en/wiki/Slab_allocation, https://secure.wikimedia.org/wikipedia/en/wiki/Obstack, a https://secure.wikimedia.org/wikipedia/en/wiki/Memory_pool . Samozrejme nevim, co to ma ve finale byt, ale ne na vsechno je malloc/free idealni. Je samozrejme otazka, jestli to dava smysl jako genericky alokacni nastroj, to se pozna podle toho, jak to Xchaos napise, ze :)
    ANT_39
    ANT_39 --- ---
    XCHAOS: Ten paper k tomu neni nezajimavej, asi to stoji za precteni. Genialni je asi dost silny slovo, ale nektery ty optimalizace, ktery tam pro C++ delaji, jsou celkem zajimave. Z velke casti je to o organizaci dat v pameti (zmeny v tom, jakou strukturou co reprezentujes) abys mel co nejlepsi lokalitu a nemel tam zbytecny ukazatele. Optimalizace pro C by imho vypadaly dost podobne.
    REDGUY
    REDGUY --- ---
    XCHAOS: ještě se divíte, že chci vyvíjet remeber {} a forget {} makra - myslim ze nejsem sam kdo se velmi tesi na tvuj design. Obcas mi se mi stejska po tom, jak jsi nam pred par rokama vysvetloval tvuj kontextovej alokator, nebo jak se to jmenovalo. Uz mas nejakej navrh? Na cem budou postaveny? Co budou umoznovat? Proc budou lepsi nez malloc/release?
    REDGUY
    REDGUY --- ---
    XCHAOS: chápu, že očekávat od tebe takovou míru dovtipnosti by bylo moc: Hele, ja rozumim ze mi za kazdou cenu musis odporovat a snazit se me urazet, ale tocit se na takove nepodstatnosti jako tohle? Notabene takove ktera nijak nesouvisi s predmetem debaty a dokonce neni ani mirena proti tobe? ROFL, ty to fakt beres dost osobne 8)

    btw, co [ REDGUY @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ] ? Bude nejaka odpoved nebo to radsi tak nejak zamluvime? 8)
    XCHAOS
    XCHAOS --- ---
    SKIM: heh: "The Java version was probably the simplest to implement, but the hardest to analyze for performance. Specifically the effects around garbage collection were complicated and very hard to tune. Since Scala runs on the JVM, it has the same issues."

    tenhle článek jako kdybych psal já ! ještě se divíte, že chci vyvíjet remeber {} a forget {} makra ? :-)
    XCHAOS
    XCHAOS --- ---
    SKIM: no mě programátoři v C++ právě nepřipadají jako extra geniálnější, než právě třeba (dobří) codeři v C. Některé konkrétní algoritmy určitě vyžadují genialitu, aby je někdo vymslel, to je bez diskuze... ale spíš bych programátory v C++ klasifikoval třeba jako letecké dispečery: ti také dělají něco, v čem se točí velké peníze, a jsou tedy dobře placení - protože když to udělají špatně, tak mohou způsobit spoustu škody. a společné mají i ty noční přesčasy a tak.
    SKIM
    SKIM --- ---
    XCHAOS: Mě se líbí tento titulek
    Google pits C++ against Java, Scala, and Go: C++ wins. If you're a genius
    Google pits C++ against Java, Scala, and Go • The Register
    http://www.theregister.co.uk/2011/06/03/google_paper_on_cplusplus_java_scala_go/
    Kliknutím sem můžete změnit nastavení reklam