• ú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: mno... :-) to je jen o nedostatku představivosti... vím, že v Pythonu se to dělá jinak (naštěstí..), ale máš třeba i metody jako .foreach(), apod. .. prostě samozřejmě si jde představit literál, od kterého potřebuješ zavolat metodu:

    >>> "nEjAky TEXT co vznikl jako copy+paste do zdrojaku".lower()
    'nejaky text co vznikl jako copy+paste do zdrojaku'

    (ha, proč lower() vrací self? protože stringy jsou immutable? to ovšem není literál jako literál, najednou :-) jako já netroluju proti Pythonu, naopak se mi líbí relativně nejvíc ze všech věcí, co někdo doopravdy používá, na druhou stranu se mi dotkly výpady proti mému projektovaném ne-C++ dialektu čistého C, které mě obviňovaly z nekonzistence.. ovšem ve světě programovacích jazyků je nekonzistence spíš norma... resp. nejde domyslet nikdy vše)

    no ok, muselo by to udělat kopii původního seznamu, tak to asi funguje jinak - originál to nechá na pokoj:
    >>> a=[2,1]
    >>> b=sorted(a)
    >>> a
    [2, 1]
    >>> b
    [1, 2]

    každopádně je trochu matoucí, že sorted není metoda, a že literál není vždycky literál (právě, že jedině jako céčkař důvody pro immutable stringy v Pythonu chápu, třeba při práci s utf-8 to umožňuje zachovat si příčetnost... ale kdybych přišel do toho světa jako úplný nováček, tak asi začnu kroutit hlavou... je fakt, že lidi, co by nad tím kroutili hlavou, odradí od Pythnu už to, že whitespace má syntaktickou funkci.. naštěstí :-)
    REDGUY
    REDGUY --- ---
    XCHAOS: literálního zápisu kontejneru v Pythonu nesetkal, podle mě souvisí s tím, že si nevybavuju jakoukoliv metodu, u které by to bylo praktické. - coz mozna uzce souvisi s tim, ze podobne manipulace s listovym literalem jsou v praxi dost zbytecne.

    sorted je prostě funkce, která zavolá metodu sort a vrátí parametr - LOL. _ne_. Co se trochu zamyslet a zkusit to znova?
    REDGUY
    REDGUY --- ---
    XCHAOS: Aha. Takze "poznat coderskej kod" je magicka schopnost, kterou disponujes, ale u ktere nedokazes popsat, jak funguje. A protoze nejsi ani schopnej porad popsat, kdo vlastne je ten tvuj "coder", tak vlastne muzes jen tak nahodne placnout "tohle psal coder, tohle nepsal".

    Takze zase dalsi pripad, kdy si XChaos nahodne nadefinuje terminy podle toho jak se mu hodi, s nulovym prinosem. Ok, diky 8)
    XCHAOS
    XCHAOS --- ---
    REDGUY: já nevím, já řekl, že když mi nějakej ukážeš, tak ho poznám. jak poznám, že je nějaká barva zelená nebo červená? no.. vidím to, pokud nejsem barvoslepej. (pokud ano, musím změřit vlnovou délku.. možná jsou teď nějaký appky pro barvoslepý, který dělaj z barev co snímá smartphone realitime textury nevím...)
    XCHAOS
    XCHAOS --- ---
    REDGUY: s tím "sorted" je to dobrá připomínka, nemám to až tak v paži (já ani netvrdil, že všechno má vracet self jako návratovou hodnotu...).

    vtipné ovšem je, že sorted() v Pythonu není metoda kontejneru, nedá se pro ní tedy využít ten zápis volání metody nad literální formou zápisu kontejneru :-) (sorted je prostě funkce, která zavolá metodu sort a vrátí parametr, zase je na tom hezky vidět výhoda dynamického typování)

    no ale
    >>> sorted([2,1])
    [1, 2]
    zas tak neokouzlí, jako by okouzlilo [2,1].sorted(), akorát že to už nelze :-) zase ruby má i 3.times, zatímco Python je v tomhle takovej konzervativní.

    fakticky to, že jsem se s voláním metody u literálního zápisu kontejneru v Pythonu nesetkal, podle mě souvisí s tím, že si nevybavuju jakoukoliv metodu, u které by to bylo praktické. takže mi příjemně překvapilo, že to jde - a nepřekvapilo, že je to současně k ničemu :-)
    REDGUY
    REDGUY --- ---
    XCHAOS: no ale prostě není řešením všechny lidi, co používaj C, převychovat na C++ - a rika tady snad nekdo neco takovyho? Nerika. Takze dalsi xstrawman 8)

    některý věci se neučím, protože se je _nechci_ naučit. - to je tvoje plne pravo. Nicmene, pokud nejakym vecem nerozumis, protoze se je odmitas naucit, tak _prosim_, prestan o nich vynaset radobyzasvecene soudy typu "nemuzes chapat, co se deje uvnitr". Kdyz uz, tak rikej "nechapu, co se deje uvnitr, protoze jsem se to nenaucil".

    Jo, a co to poznavani "coderskeho kodu"? Vysvetlis nam, jak ho poznas, nebo ne? 8))
    XCHAOS
    XCHAOS --- ---
    REDGUY: no ale prostě není řešením všechny lidi, co používaj C, převychovat na C++!

    některý věci se neučím, protože se je _nechci_ naučit. byl jsem donucen i tak se v životě naučit spoustu věcí, co jsem nechtěl. můj názor na život je obecně tento:

    REDGUY
    REDGUY --- ---
    XCHAOS: ale už se volají nějaké ty konstruktory a destruktory - za prve, ne nutne. Za druhe, to jak a kdy se volaji neni zadna magie vyzadujici "absolutni sluch", ale proste nejak dobre definovanej process. kdybych věděl jak přesně, tak už rozumím - ano. Cili opet jsme u toho, ze problem je u tebe. Mozna bys nemel svoji nevedomost vydavat za nejakou obecnou vlastnost toho jazyka. Ne nejake "nemuzes chapat" ale proste "xchaos to nechape, protoze se to nenaucil".
    REDGUY
    REDGUY --- ---
    XCHAOS: kde laika zmate, že výsledek setřídění je vzápětí garbage collectorem zahozen - ale prdlajs. Ty proste jenom nevis, jak funguje metoda sort v pythonu, ktera tridi in-place a jeji navratova hodnota je None. Kdyz napises "l = ['b', 'a'] ; c = l.sort(); print c", tak se stane presne to samy, i kdyz tam zadny grabage collectovani neni. Jestli chces setridenej seznam jako navratovou hodnotu tridici funkce, pouzij sorted.

    To ze "laik" je zmaten je problem toho laika, kterej se neobtezoval precist si dokumentaci k zakladni funkci, ne problem jazyka 8))
    XCHAOS
    XCHAOS --- ---
    REDGUY: no pointer je pořád pointer, ale už se volají nějaké ty konstruktory a destruktory (kdybych věděl jak přesně, tak už rozumím C++, že jo :-)

    jako já C++ nikomu neberu, jen se tu chci bavit s lidmi, kteří mají nějaký motiv zůstat u C. (psychoanalýzu těhle motivů můžeš provádět jinde, já u toho nemusím být :-)
    REDGUY
    REDGUY --- ---
    XCHAOS: A pointer v C++ neni pointer? V cem je ten zasadni rozdil?
    XCHAOS
    XCHAOS --- ---
    XCHAOS: ehm, "pokud bychom se pokusili" ... pokusili jsme se, jediné, co jde získat je .sort míst .sort(), přiřazení uvnitř závorkové konvence, jako v C, tam nejde.

    jako zase právě na Pythonu se mi líbí, že tam prostě nejde kód zprasit, jako v C (jinak nevím, jak to některé jazyky limitující C, např. javascript, vlastně mají s přiřazením uvnitř aritmetického operátoru.. fakticky je zvláštní, že Denis Ritchie zemřel osamocen - a nikoliv v kruhu žáků, kteří by vyzvídali, jak to vlastně bylo původně zamýšlené s čárkou a přiřazením uvnitř aritmetických operátorů a jak daleko to mělo dojít :-)
    XCHAOS
    XCHAOS --- ---
    Kontejnery jsou v programování vůbec vtipná věc...



    Tyhle skvělé obrázky jsem např. našel na Twitteru BTW - od nějakého (zřejmě?) afroamerického týpka, který místo aby se nechal střílet od policajtů nebo je střílel programuje (ale teda zřejmě ne v C.. smál se tam představě, že by se měly škálovat nějaké kontejnerové knihovny pro Docker...)
    XCHAOS
    XCHAOS --- ---
    REDGUY: tojsme tu už řešili. nesáhá příliš hluboko, navíc původní C bylo tuším psaný pro tehdejší strojový kód PDP11, aby každá instrukce jazyka byla převoditelná do jedné, nejvýše dvou strojových instrukcí. to je u dnešních procesorů každopádně irrelevantní. (BTW už i na Z80 se daly celé "knihovní funkce" v C převést na jedinou ASM instrukci, např. memcpy() - tolik k debatě inline kód vs. knihovní kód)

    o dnešním strojovém kódu dnešních procesorů vím samozřejmě houby, takže směrem "co se děje uvnitř" ve smyslu přepisu do strojového kódu to nemyslím.

    myslím to jednoduše tak, že v C pointer do paměti je jen pointer, a pokud nerozvětvím program do více vláken nebo neudělám chybu, tak mi tam ta paměť sedí - dokud jí nedealokuju, neopustím scope, apod.

    příkladem toho, jak i situace ve vyšších jazycích může být zmatená, je platný Python zápis
    [ XCHAOS @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ]

    kde laika zmate, že výsledek setřídění je vzápětí garbage collectorem zahozen (a pokud bychom se před to pokusili dát přiřazení, tak překvapivě - získáme pointer na metodu sort, aspoň moje pokusy k něčemu takovému vedly :-)

    V C by aspoň (některé) překladače vydaly warning "pozor, výsledek bude zahozen" ("value computed but not used") - to se někdy děje, když např. použijeme operátor ',' (čárka), který funguje skoro jako ; ... akorát že je to pořád operátor a umožňuje prasit uvnitř aritmetického výrazu (to ale není nic, co by se vám stalo při dodržování alespoň strukturovaného stylu programování z 80tých let, když ne přímo pozdějšího objektového :-) (akorát že C to dělá jen pro primitivní typy, protože žádné nativní kontejnery nepodporuje - dokonce i obyčejné pole je v C jen syntaktický cukr nad přičítáním offsetu k pointeru :-)
    REDGUY
    REDGUY --- ---
    XCHAOS: Hele, jeste jedna doplnujici otazka, nebo spis dve. Co presne si predstavujes pod tim "videt, co se deje uvnitr", jak hluboko ten pohled podle tebe v C saha? A proc si myslis, ze to je potreba?
    REDGUY
    REDGUY --- ---
    JANFROG: A tak samozrejme ze C++ je slozity a mohli bysme si dlouho povidat o tom, jestli pomer slozitost/vykon za to stoji, jestli fragmentace dana tim, ze ruzni uzivatele si vybiraji ruzny casti jazyka je nebo neni problem a tak dale. Ale je to slozitost ciste mechanicka, mas proste hromadu papiru s nejakou specifikaci. Ta hromada je sice vyrazne vetsi nez pro treba C (nebo Scheme 8) ), ale porad je to jen hromada, kterou se bud naucis, nebo si v ni najdes co potrebujes.

    XChaos ale rika, ze "nemuzes vedet co se deje uvnitr" a ze "C++ vyzaduje absolutni sluch, který nemá každý". Samozrejme, mozna je to zase jen dalsi jeho malebny prirovnani, ktery se pri blizsim pohledu rozpadne, ale fakt by me zajimal priklad neceho, co v C++ muze pochopit jen jedinec, obdarenej tim "absolutnim sluchem" a co chudak bez sluchu, jen s hromadou papiru, pochopit nemuze...
    WILD_A
    WILD_A --- ---
    Myslim, ze v zrovna v C a C++ plati, ze cim vic clovek vi, tim vic si uvedomuje jak malo toho vi ... viz JANFROG a coder se pozna podle toho, ze si mysli, ze vi v zasade vsechno ;)
    JANFROG
    JANFROG --- ---
    REDGUY: rosim nejaky konkretni priklad toho, kdy v C++ "nemuzes chapat, co se deje uvnitr".
    Tak takovych pripadu muzu najit radu i v "cistem" C :-)

    Samozrejme, ze to nechapu ja ani nikdo koho znam, neznamena ze to teoreticky nelze chapat. Nicmene jsem presvedcen ze pri te komplexite to proste jeden clovek opravdu chapat nemuze. Jen C99 spec je ~600 stranek spec-speaku, k tomu pridej compiler reference pro rekneme GCC/MSVC/ICC pro kazdy jen pro dve, tri verze co pouzivas. K tomu i386 / x86_64 / ARM / SPARC ABI Reference. To uz jsme na tisicich strankach spec-speaku a to nemluvim o POSIX + WinAPI. Je opravdu realne si myslet, ze pro netrivialni program nekdo vi, co se deje uvnitr? Nemyslim.
    BURAN
    BURAN --- ---
    REDGUY: no hlavne se mne na to, co je to za fw, vubec nezeptal ;-)
    BURAN
    BURAN --- ---
    XCHAOS: ja zas nechapu, jak s dotazem: "jak se lisi C kod psanej coderem od C kodu psanym necoderem?" souvisi, co ja osobne programuju za firmware? :-D vzdyt to je uplne irelevantni. Napis konecne, jak se rozpozna ten coderskej a necoderskej zpusob, prosim pekne.
    REDGUY
    REDGUY --- ---
    XCHAOS: že ten zápis tedy není neplatný, ale pro standardní kontejnerové metody (které nevrací nic, ale pracují nad kontejnerem jako takovým) fakticky nepoužitelný (což vidím trochu jako design-flaw - ale prdlajs. Teda, samozrejme, ze to _ty_ vidis jako "design flaw" je pochopitelne mozny, ale v ramci koncepce a designu pythonu je to zcela umyslne a schvalne, kdyby metoda sort navic (krome toho trideni) vracela self, vedlo by to k mene prehlednemu kodu a zvysovalo riziko chyb kvuli aliasingu. Jestli chce setridenej list jako navratovou hodnotu, mas tady "sorted".

    XCHAOS: jak říkám, nevím, k čemu přesně dělá firmware - ne? A presto rikas, ze ho coder, jehoz kod nahodne zapisuje po pametu, umi dobre napsat? Hmmm... mozna kdybys konecne prestal mlzit a klickovat a konecne vysvetlil, co to je ten "coder" a jak poznas "coderskej" kod, tak by se to vyjasnilo. Nebo proste priznat, ze to bylo proste zase jen dalsi nesmyslny xplacnuti 8))

    ty už přesně víš, že je to minimálně firmware ke grafické kartě, nebo něčemu takovému - jo, uz jsem si rikal ze uz ses nejak dlouho nedopustil strawman fallacy 8)))
    Kliknutím sem můžete změnit nastavení reklam