• ú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í
    XCHAOS
    XCHAOS --- ---
    REDGUY: chci jen říct, že to bude záviset na tom, jak kdo implementuje a zdokumentuje tu danou funkci: ta funkce bude dělat to, co programátor uzná za vhodné, a co je u ní bezprostředně požadováno.
    REDGUY
    REDGUY --- ---
    XCHAOS: Ted si nejsem jistej jestli ti spravne rozumim. Rikas, ze funkce A, ktera si bude pro svoje pracovni ucely alokovat nejakou pamet, aniz by ji vracela ven, se nebude muset starat o to, jestli je ve forget nebo remember kontextu, protoze se o to postara funkce B, ktera ji bude volat? Nebo jsem to spatne pochopil?

    a jinak ano - na thread safety asi budeme muset zapomenout. to bude až C<<2 - LOL. Takze na jedne strane rikas, ze chces delat superefektivni programy, ktere umozni provoz serveru pro tisice lidi na jedne masine a na druhe strane zcela rezignujes na multithreadovost - v dobe, kdy desktopova masina muze mit tucet threadu a bez vetsich problemu lze koupit server se stovkama hw threadu. To dava smysl. Moment. Nedava 8)

    A co signaly? A setjmp/longjmp?
    REDGUY
    REDGUY --- ---
    XCHAOS: že si prakticky nikdy nenavrhl žádnou opravu ničeho, čemu říkáš "chyba" - whoa. A ja myslel ze opravy tech bugu co jsem ti ukazoval jsou tak trivialni ze to nemusim ukazovat 8)
    A "chyba" tomu rikame oba, protoze proc jinak bys to potom opravil, ze 8)
    XCHAOS
    XCHAOS --- ---
    REDGUY: já bych se popravdě na základě tvého stylu diskuze a neustálého odvolávání se na iOS vůbec nedivil, kdybys měl něco společného s Dannym. jenže ten měl na NYXu vlastní login, takže je to trochu záhada.
    XCHAOS
    XCHAOS --- ---
    REDGUY: bude se to dědit napříč voláním, ano. funkce NEBUDE muset začínat jedním z těhle maker - máš spoustu funkcí, které vůbec nic nealokují, a pokud ano, a pokud budeš programovat složitější projekt v prostředí, kde budou tyhle alokační zvyklosti - tak bude záležitostí volajícího, zda a kdy chce tu paměť uvolnit nebo ne (tedy např. si do forget nebo remember umístí celé volání funkce - která v naprosté většině případů nebude muset řešit, co s tím chce dělat)

    a jinak ano - na thread safety asi budeme muset zapomenout. to bude až C<<2 :-)
    REDGUY
    REDGUY --- ---
    DAVIDOWITCH: Na tohle je skvelu ObjC a obzlvast v iOSu, jak mas vlastne povinne pojmenovany parametry. Je to trochu o zvyk, ale s rozumnym IDE je to bomba na pouziti.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: a co ten BENNYHO field ? ten se mi líbí víc....
    a "vector" se většinou vyznačuje velikostí (ovšem v geometrickém smyslu se neváže na žádný pevný výchozí bod). "field" ovšem může znamenat také "položka"...)
    XCHAOS
    XCHAOS --- ---
    REDGUY: chci tady jen nově příchozím vysvětlit, že si prakticky nikdy nenavrhl žádnou opravu ničeho, čemu říkáš "chyba": víceméně se ti musí přiznat, že přemýšlíš o některých méně triviálnějších případech použití, a taky si mě nasměroval k tomu, že v případě někdo jako parametr makra dát složitější výraz, tak pak u mě dojde k jeho vícenásobnému vyhodnocení - což je tedy v podstatě celkově vážný problém při využití jakýchkoliv složitějších maker v Céčku.

    ale tedy to samé by někdo určitě dokázal říkat i méně arogantně.
    REDGUY
    REDGUY --- ---
    XCHAOS: Az na to ze uz v mirne komplikovanem pripade to nefunguje, takze paralelne s tim muzis pouzivat normalni alloc, viz muj priklad par dni dozadu.
    A stav kontextu se dedi napric volani funkce? Podle te globalni promene soudim ze ano. Cili pokud budu chtit konzistetni chovani, kazda funkce bude muset zacinat jednim z tehle maker?
    A kdyz uz mluvime o globalni promenne - znamena to ze na thready muzes leda smutne vzpominat? Jak to bude fungovat se signalama? Co setjmp/longjmp?
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: muzes tomu rikal array_s, vhodne zkrat dle vlastni chute. Ja sem pro ukecany promenny a fce.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: goto je spatny dokud nekde nemas 3-4 vnoreny fory a nechces vyskocit ze vsech najednou (ale taky to cpu do fci a pouzivam return).

    A nevim az tak souvislo mezi tim forget{} a tim ze uvnitr bude nejakej repeat{} uvnitr kteryho se pres 100x zopakovanej get udela jen jeden malloc. Bejt to vnoreny opacne chapu co to udela, ale takhle to v tom vysvetleni nevidim (predpokladam ze repeat je fakt jen for cyklus od 0 do 99, ale ten get ne uplne chapu)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: safe_array zní hezky, až na to, že je hrozně dlouhý

    _BENNY: něco jako po bitvě je každý polním generálem ? :-) jo, field zní drsně. ale babo raď, jestli je array spíše neznámé délky a field spíše neznámé... ale dík, je to krátké.

    až vám ukážu, kam chci cpát informaci o délce polí, tak mě všichni svorně zabijete, zase jednou :-) ale proto chci, aby se to co nejméně podobalo čemukoliv, u čeho by někoho mohlo napadnout míchat to s obyčenými pointery na pole.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no ano, na to se tu ptal i id REDGUY

    víceméně, opustil jsem svoje plány na "pojmenované" paměťové kontexty (memory pooly) a rozhodl se, že ve většině případů potřebuju paměť v kontextech rememeber { } a forget { }, které se do sebe bude možné navíc vnořovat a které se budou vzájemně přebíjet.

    není to žádný magic - uvnitř makra bude jediná jednoprůchodová for(;;) smyčka, která udělá nějakou inicializaci a nějakou deincializaci (je vtipné, kam všude dnes cpu cyklus for(), když prvních 10 let jsem v C programoval zarputile jen pomocí while() do { } while(), protože mi for() přišlo matoucí... a dodnes přijde, vždyť se taky "skutečné programování" snažím dělat zásadně jen pomocí for_each() :-) :-)

    forget { forget { .... } } a remeber { remeber { .... } } jsou triviální případy ... jinak vnoření odlišného je taky téměř triviální:

    remeber { a=nezahazuju; forget { b=zahazuju; remeber { c=nezahazuju; } d=zahazuju; } e=nezahazuju; }

    a,c,e musí po vystoupení z vnějšího remember zůstat definované
    b,d se uvolní v bodě, kde končí ten scope forget
    atd.

    toto je podle mě jednak fakt srozumitelné, jednak to musí být vnořovatelné (bude tam nějaká skrytá řídící globální proměnná, která řekne těm makrům, jaký je aktuální kontext), jednak je implementace téměř triviální (podotýkám téměř, protože ty memory pooly budou přeci jen řešené trochu komplexněji...)

    původní plán byl na "pojmenované" a "nepojmenované" kontexty... ale postupem času mi došlo, že ty pojmenované jsou úplná blbost (nebo skoro úplná blbost - mají asi takové oprávnění, jako příkaz goto - který víceméně nemá moc oprávnění, pokud zavedeme systém odchycení a ošetření vyjímek ...)
    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.
    REDGUY
    REDGUY --- ---
    XCHAOS: Ano, to je pravda. O sebehorsim bugu muzes prohlasit ze to je feature 8)
    A co se zasluh tyce, opravdu mi nemusis zadne "priznavat". Desi me predstava ze bych se nekdy dozvedel ze "mam zasluhy na Cll1", to bych v CV fakt nechtel 8) Ale znovu - ptal jsi se, co jsem dokazal, odpovedel jsem ti. To neni delani humbuku, to neni pozadovani zasluh, to je cirocire zdvorile odpovidani na otazku a konstatovani faktu. Pokud se ti nelibi odpoved, priste povaz, jestli nebude lepsi otazku vubec neklast 8) (Alternativne, pro extra komicky efekt, muzes zacit vysvetlovat ze upozornovat na chyby bez toho, abych je za tebe opravil, je vlastne spatne. Nemuzu se dockat 8) )
    _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))
    Kliknutím sem můžete změnit nastavení reklam