• ú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: co takhle rozlisovat array (proste pole tady zacina a tot vse co vis) a safe_array (tady zacina a mas pro nej alokovany tolik pameti)?
    Kdybys chtel jeste resit kolik tech prvku je platnejch, tak nejspis budes chtit rovnou udelat to pole nafukovaci ala vector jak pise Jachymko.
    _BENNY
    _BENNY --- ---
    XCHAOS: muzes v tom udelat mrdnik a jednom rikat array a druhemu field ;)
    XCHAOS
    XCHAOS --- ---
    a když tu máme tolik mudrců, co bazírujou na terminologii: jak byste terminologicky rozlišili pole známé a neznámé délky (nezaměňovat s null-terminated stringy, to je ještě jiný případ) ?

    je "array" spíš označení pro pole známé délky - nebo prostě pro obecné pole ?
    bylo by vhodné použít označení "buffer" pro pole neznámé délky a "array" pro pole známé délky ?

    chci totiž vymyslet pro svůj dialekt C pseudo-třídu polí, které budou doprovázeny informací o alokované velikosti - a tudíž iterovatelné přes všechny prvky, apod. - ale nerad bych hned od začátku terminologicky šlápl mimo mísu.

    může být "vector" vhodné jako označení pro pole známé délky, pokud "array" zůstane označení pro pole neznámé délky ?
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    tak logicky, protoze kdyz to nejdriv vsechno naalokujes a pak uvolnis, tak nejspis budes od OS potrebovat vic stranek a to zase bude o neco dyl trvat. Plus umi bejt v 32b programech obcas problem s fragmentaci a tak.

    tj. delas mempool pres nejakou macro magic?
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: a co pořadí uvolňování - to by na rychlost taky mohlo mít vliv, ne ?
    tedy, kdybys měl na uvolňování druhou smyčku.

    "u mě" v mém chystaném dialektu bude zápis

    forget
    {
    repeat(100)
    {
    int *ptr=get(array,int,100);
    }
    }

    provedený skutečně jen s jedním malloc() a jedním free() ...
    XCHAOS
    XCHAOS --- ---
    REDGUY: opravdové zásluhy přiznávám těm, kdo chyby opravují...

    a ani jinak není chyba jako chyba - to, že o něčem zjistíš, že to "nejde použít tak, jak bys chtěl" nestačí, abys mohl říct, že je tam "chyba"...
    REDGUY
    REDGUY --- ---
    XCHAOS: až najdeš bug v nějakým mým releasu, tak kolem toho dělej takovej humbuk - humbuk? Ty ses ptal co jsem predvedl a ja ti odpovedel, ze jsem nasel a ukazal ti chyby v tvem kodu. Normalni clovek by za to podekoval, ne nadaval - ale opet, chapu ze to je tvuj emocialni problem se mnou 8)

    btw, pri zbeznem pohledu bych rekl, ze tvuj (ne-release) crl1 je brutalne rozbitej z hlediska mnohonasobneho vyhodnocovani argumentu maker a chybejicich zavorek kolem nej. Skoro jsem myslel ze tohle uz jsem ti pred par rokama vysvetlil, ale asi jsi to vytesnil. Chces to vysvetlit znova? 8))
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Hmm.. no, to je slozitejsi, protoze zalezi jak definujes "to same". Pokud chces aby udelaly stejny memory operace, tak mne nenapada jak to zaridit. Protoze, pokud se nepletu, tak zatimco:
    Cckovy
    for(int i=0; i<100; i++)
    { int *ptr = malloc(100*sizeof(int)); /* do stuff */; free(ptr);}
    a C++
    for(int i=0; i<100; i++)
    { int *ptr = new int[100]; /* do stuff */; delete [] ptr;}

    delaj vesmes to samy (100x naalokuje, 100x uvolni),
    tak kdyz udelas tu druhou smycku v Jave, tak to zoptimalizuje na 1 alokaci, 1 uvolneni.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no tak právě proto bych řeč rád stočil třeba nato, jestli existují nějaké benchmarky testující rychlost a efektivitu mechanismů alokace paměti...

    a to samozřejmě nejen pro C... ale i rozšířené vyšší jazyky. srovnávací benchmarky - u kterých by ale bylo jasně vidět, že "dělají to samé"
    XCHAOS
    XCHAOS --- ---
    REDGUY: tak víš co ? až najdeš bug v nějakým mým releasu, tak kolem toho dělej takovej humbuk. pokud kritizuješ věci v těžce vývojovým SVN, tak prostě buď spolupracuj a commituj návrh oprav - a nebo drž papulu.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Popravde, ja si myslim ze v Ccku bys to nemel chtit delat automaticky.
    Pokud neprepodkladas ciste single threaded single process kod, tak ty refcounty (a obecne jakykoliv garbage collection mechanismy) sou hodne drahy kvuli nejakejm atomicum a mutexu. A pak to chce peclive zvazit kdy a jak to presne pouzit.
    Napriklad v nejaky kriticky sekci si dovedu snadno predstavit ze, kdyz uz tam musis dynamicky alokovat, tak nechces dalsi overhead co se refcountu tyce.

    A teda predpokladam, ze pokud mas v planu delat v Ccku nejaky weboviny, tak to bude multithreaded a/nebo multiprocess, pripadne do budoucna timhle smerem rozsiritelny, kdyz uz dneska pomalu nezakopnes o single-core procesor.
    REDGUY
    REDGUY --- ---
    XCHAOS: To je mi popravde receno uplne jedno 8)
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: je to pravda, taky je to jen mírný offtopic.

    podstatné jádro diskuze bylo, že v samotném C sice máme velkou volnost použít nějaký exotický alokátor paměti a různé přístupy ke garbage collection - ale žádná knihovna nám nemůže přetížit tak základní věc, jako chování pointerů.

    v C jde dělat různé krkolomné věci - viz třeba flow control makra, apod. - ale nejde tam nijak jednoduše zařídit, aby se při každé operaci přiřazení nebo na konci scope automaticky zavolal nějaký kód.
    XCHAOS
    XCHAOS --- ---
    REDGUY: našel si bugy v něčem, co jsem _releasnul_ ?
    REDGUY
    REDGUY --- ---
    XCHAOS: co si tedy tak úžasného už předvedl ty - kdyz uz nic jineho, nasel jsem par bugu v tvych programech, naucil te par novych veci a pri tom vyvratil par tvych bludu. Coz by pro zacatek mohlo stacit 8)

    z jakého titulu vlastně tenhle klub neustále zahrnuješ tak sžíravou kritikou - copak, potrebuju na to tvoje povoleni? Ja myslel ze od toho diskusni kluby jsou, aby se v nich tribily myslenky. To ze tvoje myslenky casto za moc nestoji (z ruznych duvodu) a pritahuji kritiku je jen nestastna shoda okolnosti 8)
    XCHAOS
    XCHAOS --- ---
    DAVIDWITCH, JACHYMKO: toto je všechno hezké a zajímavé, ale připomínám, že na NYXu je přece krásný lesklý plyšový klub o C++ - tak s tímto prosím (v tomto rozsahu obecně a co se týče Windows zvláště) jděte tam: tady je to určené spíše pro výměnu zkušeností lidí, co se snaží programovat v C99 a pod GNU/Linuxem.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JACHYMKO: jo, to prefixovani bylo peklo. Ja ale narazil az primo na to Managed C++ (coz bude ono C++/CLI). Proste sem misto MFC chtel pouzit WinForms a tohle na mne baflo. :-)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Ono kdyby to C++ umelo a delalo automaticky, tak asi zacnu aktivne hledat nejakej programovaci jazyk co mi da na vyber. Libovolny takovyhle chytry mechanismy maj overhead, treba u refcountu to musi bejt threadsafe (tj. nejaky mutexy, atomicky countery) coz neni zadarmo.
    Jinak treba M$ ma vlastni rozsireni C++ standardu pro spolupraci s .NET, kde to ma dalsi 2 znaminka pro pointery (^) a reference (%, hmm.. mozna opacne) ktery jsou garbage collected. (ale jestli to pouziva prave refcounty nevim, ony jsou fakt dost neefektivni, jakmile mas k dispozici prekladac).
    XCHAOS
    XCHAOS --- ---
    REDGUY: no já na tom pracuju, dej mi rok - dva ... :-)

    spíš by mě zajímalo, co si tedy tak úžasného už předvedl ty a z jakého titulu vlastně tenhle klub neustále zahrnuješ tak sžíravou kritikou...
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: jinak ano... běžná interpretace přísudku "umí" ve spojení s podmětem "programovací jazyk" je v hovorové češtině chápána jako "umí to automaticky". ano, došlo tu k politováníhodnému nedorozumění - ale mě neskutečně irituje snaha tohle nedorozumění okamžitě interpretovat tak, že jedna z diskutujících stran je úplně blbá a vůbec neví co říká.

    co je zajímavá a co z toho naopak nečekaně vyplynulo, je že ani samotné C++ v sobě nemá tento mechanismus vestavěný, a potřebuje na to jakési rozšiřující knihovny. takže zajímavé není, že "C to umí, pokud se to udělá ručně", ale že "C++ to samo od sebe neumí automaticky"

    (popravdě - mám určité tušení, že minimálně někteří aktivní účastníci téhle diskuze ve skutečnosti nenaprogramovali/nepřeložili ani řádek v céčku pod linuxem - ale taky neztrácím čas tím, že bych to nějak donekonečna opakoval a zdůrazňoval...)
    XCHAOS
    XCHAOS --- ---
    The XML C parser and toolkit of Gnome
    http://xmlsoft.org/
    XCHAOS
    XCHAOS --- ---
    libcurl - the multiprotocol file transfer library
    http://curl.haxx.se/libcurl/
    Kliknutím sem můžete změnit nastavení reklam