• ú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: Protoze to ma funkcni refcounty, aniz by to pouzivalo operator=
    S rozumnym pouzim atd.
    Ale ok, takze to uzavrem na tom, ze "v Ccku nejde delat refcounty" znamena "Ccko neumi smartpointery, akorat nemam poneti jak se co jmenuje".
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: já COM neodsuzuju, akorát prostě nevím, proč to taháš sem: jako _nativní_ princip správy paměti v nativní C aplikaci pro POSIXový systém to použitelné není.

    v POSIXu se obecně na sdílení paměti ("objektů") mezi procesy (nikoliv mezi vlákny procseu) používá mechanismus sdílené paměti (shmget(), mmap()). je to jistě taky zajímavé téma - ale pro běžnou správu paměti v rámci jednoho procesu asi budeš chtít použít něco sice méně robustního a univerzálního - ale zato výrazně svižnějšího.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: No, treba je to smyslem u objektu sdilenejch mezi vic procesama, kdy bez pocitani referenci proste nevis jestli si posledni a mas to smazat, nebo na to drzi pointer jeste 3 ukazatele na tvym pocitaci a dalsi 2 pres sit. Ale, well, to by sis o tom COMu musel neco precist a ne to smahem odsoudit jako M$ a tudiz irelevantni.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: ježišmarja, manuálně pochopitelně můžeš dělat cokoliv... ale pokud bys po každém přiřazení musel volat nějakou inkrementující funkci, tak mě to opravdu přijde krajně neintuitivní. natož pak volání těch dekrementujících funkcí na konci scope...

    já nevím... ale nebylo náhodou smyslem počítání referencí to, že to ten programovací jazyk dělá sám od sebe, a programátor to nemusí řešit ?

    a nevzniká náhodou nová referende na objekt nejčastěji právě když se použije operátor přiřazení výsledku nějaké proměnné ?
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: viz [ XCHAOS @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ] - jde to, ale musel by si zapomenout na rovnítko. a používat místo toho něco, co by s těmi refcounty počítalo.

    a stejně bys měl problém se snížením počtu odkazů na konci scope. takže ne - v čistém C to nejde.

    refcounty jsou zajímavý trik, nic proti nim - ale je to jedna věc, co jde v C++ nebo vy vyšších jazycích, ale není jednoduše aplikovatelná v čistém C. (to máš stejné, jako že máš nějaké hudební nástroje, na které akord prostě nezahraješ... třeba píšťalu)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Tak znova.. refcounty *NEJSOU* zalezitosti operatoru prirazeni. Jasne sme ti to rekli DVA, mne si za to dokonce podekoval.
    XCHAOS
    XCHAOS --- ---
    REDGUY: hmm, Objektive C ovšem není C/C99, takže celé je to dost mimo mísu. Refcounty nejsou záležitost alokátoru, ale operátoru přiřazení. v čistém C můžeš použít celou spoustu strategií alokace a garbage collection - jenom ne refcounty

    (mohl bys je diskutabilně použít, kdybys úplně zavrhl operátor přiřazení "=" ... a místo toho důsledně volal nějakou přiřazující funkci, inkrementující ten refcount)

    jinak ano, moje alokační strategie se už kdysi v DOSu nápadně podobala alokační strategii v původním 16ti bitovém Mac OS (tedy před Mac OS X), sám jsem tady na to odvolával - takže nevím, proč mi najednou povýšeně radíš, ať si to "nastuduju".

    (tedy samozřejmě - já na tu alokační strategii tehdy přišel nezávisle a o tom jak byl udělaný starý historický Macintosh jsem se dočetl až později, ale ono je přece o tolik víc cool našprtat se, jak něco dělal někdo přede mnou, než na něco přijít sám od sebe... to je přece trapné, mít nějaké nápady, že ano.. co kdyby se jim náhodou někdo vysmál...)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Ja popravde moc ne, tvoje primarni odpoved byla totalne z cesty a vesmes mlzici. Mne furt zajima proc si myslis ze to nejde.

    XCHAOS: Nevybavuju si ze bych tu kdy videl nejaky "tak takhle sem to ted nahrubo naspecifikoval, co vy na to." Ta vec se neustale menila a litala z jednoho konce na druhy, podle toho s kym a o cem ses zrovna hadal.
    XCHAOS
    XCHAOS --- ---
    REDGUY: myslím, že ani nemáš moc představu, jaký design jsem zahodil a jaký chystám. samozřejmě, že ta diskutovaná datová struktura (která se určitě nejmenuje Maruška, ať už se jmenuje jakkoliv - podle mě je to binární B+ strom) je kompatibilní s jakýmkoliv design-pattern - ať už by šlo o container classes, nebo o cokoliv jiného.

    (počítám ses nikdy moc neobtěžoval si nastudovat, o čem vlastně píšu - víceméně se ti daří dělat z lidí blbce i bez toho, aniž by ses jejich názory zabýval - ono toto totiž nepochybně jde, jsou na to osvědčené postupy, a ty jich používáš celou řadu...)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: děkuji, takhle nějak jsem si to představoval
    REDGUY
    REDGUY --- ---
    XCHAOS: Podivej, pokud si myslis ze refcounty v klasickem C nefunguji, mel bys napsat do Applu a vysvetlit jim to. Cely iOS (a OS X do nejake relativne nedavne verze) stoji na refcountovane alokaci pameti a funguje jim to dost dobre. Urcite je pobavi az jim budes vysvetlovat jak to maji rozbity 8)
    (Ano, iOS a OSX jsou psane v Objective-C. Nicmene na ten alokator to ma vliv pouze v tom, ze se jeho kod vola jako metoda objektu, ne jako funkce. Pretezovani operatoru tam neni, takze o O-C se da rict to co rikas o C: 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íš.)

    A btw, abych si odpracoval dnesni dobry skutek a dal ti moznost naucit se neco uzitecneho: nastuduj si jak v iOSu fungujou memory pooly. To je neco neco zhruba podobneho tvym kontextovym alokatorum, ale, abych se pridrzel sve hudebni analogie, programovali to Beatles, ne Christian Crusaders 8)
    REDGUY
    REDGUY --- ---
    XCHAOS: 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 - V prvni rade, neni to jen "udela spatne" ale spis "udela spatne nebo o tom bude jen tlachat a nic z toho nakonec nebude". A nejsem si jisty, pouze to predpokladam na zaklade minulosti. Chces priklady? Maruska - x lidi ti tady vysvetlovalo ze je to hloupost, tys dupal nozickou a rikal "nenenene, jen pockejte". A kdeze je Maruska? Nikde. Obdobne, kontextovy alokator - pred par rokama (boze, to to leti) jsem ti tady s ostatnimi vysvetloval ze tvuj pristup je nesmysl, na oplatku jsem se dozvedel ze "nenenene, nechapes meho genia, bude to super". A jak je to ted? Stary design jsi zahodil a chystas novy. Ne ze bych o tom novem mel nejake iluze, ale myslim ze to dost dobre vypovida o tom, kdo mel pravdu ohlede toho stareho, ne?

    Takze, ne, nejsem si jisty. Pokud ale muzu extrapolovat z minulosti, nejsem ohlede tvych budoucich vytvoru prilis optimisticky. Pochopitelne se muzu mylit, ale mam intenzivni obavu ze to se nedozvime, protoze zadny poradny design z tebe nevypadne.
    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...)
    Kliknutím sem můžete změnit nastavení reklam