• ú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 --- ---
    DAVIDOWITCH: mno, můžeš mít předalokovanou paměť... ale někde musíš mít uloženou tu délku, a postupně jí zvyšovat, jak ti načtený kus stringu přibývá.

    a tady by bylo závislé na konkrétní implementaci, jestli by si algoritmus pokaždé sahal na místo, kde je uložená délka stringu - a nebo jestli by si to okopíroval do proměnné na začátku.

    samozřejmě, u toho postupného načítání vznikne stejný problém, kdyby si chtěl třeba zavolat strlen() na začátku - jenže právě "tradiční" čtení null-terminated stringů je většinou "zleva doprava" - a ne, že se nejdřív zeptáš jak je to dlouhé.

    možná, že "výhoda" o které mluvím, hrála v těch 70tých letech větší roli, než dneska... těžko říct, moc si neumím představit, jak se tehdy doopravdy programovalo.

    JACHYMKO: hmm, vzhledem k tomu, že filename bývá dlouhé řádově max. desítky bajtů (tvrdý limit je tuším 256, nebo tak něco), tak zrovna TOHLE nevidím největší bottleneck POSIX API :-) (jako že několik vážných bottlenecků tam jinak existuje... hlavně, že se občas kvůli celkové koncepci práce se streamy a soubory kopírují větší bloky dat sem tam po paměti, když by se to _teoreticky_ dalo udělat jinak, apod.)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Jak s nim chces pracovat, s ohledem na jeho umisteni v pameti? Bude mas predalokovanej mrak pameti do ktery ho sosas (a pak muzes mit fixed length), nebo to reallocujes jak to jde, a pak s nim nemuzes delat vubec nic, protoze ti skace pameti jak nadmuta koza.
    XCHAOS
    XCHAOS --- ---
    (je to opět odbočka k mému filosofování o tom, že algoritmy pracující s případy, kdy "víme, kolik toho bude", jsou úplně jiná kategorie, než algoritmy třídy "nevíme, kolik toho bude...)
    XCHAOS
    XCHAOS --- ---
    jako já jsem o tomhle přemýšlel docela hodně, a musím se null-terminated stringů v některých ohledech zastat. především: ve chvíli, kdy se string začíná zpracovávat, vlastně ještě vůbec nemusíme vědět, jak bude dlouhý !

    dnes si všichni představují, že string na začátku vždycky musí být _někde_ v paměti... ale to prostě není pravda. null-terminated string může vznikat a být spracováván on-fly, a jeho zdrojem může být nějaké sériové zařízení (dnes nejčastěji TCP stream, historicky třeba sériový port...). V podstatě díky koncepci null-terminated stringu můžeme např. pracovat se stringem, jehož začátek už dorazil v prvních packetech - zatímco konec je pořád ještě na cestě.
    REDGUY
    REDGUY --- ---
    Co takhle misto off-topic spamu o historii DOSu od nejmenovaneho trolla neco k veci? 8)

    The Most Expensive One-byte Mistake - ACM Queue
    http://queue.acm.org/detail.cfm?id=2010365
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: jak říkám, nejsem windowsolog, ale můj obecný pocit byl, že to stálo za hovno.

    chápej, zkus si něco vyhrabat, jak se programovalo v Borland C++ 3.1 pro Windows 3.1 ... co všechno bylo potřeba inicializovat, apod.

    a pak ti někdo ukáže Unix, ve kterým je stdin, stdout a stderr, a hudba se dá hrát tak, že pošleš obsah souboru na /dev/audio ... v polovině 90tých let prostě nebylo těžké rozhodnout se pro Unix.

    později se použitelnost woken diskutabilně zlepšila, ale prostě programátorsky jsem to už nijak zvlášť neřešil: elegance základní unixové architektury je značná, i když uživatel-neprogramátor to bude mít potíže ocenit. (blbý je, že v dnešní událostma řízený době to už není taková sláva, no..)
    ANT_39
    ANT_39 --- ---
    ANT_39: A ten strom odkazu, co od tam vede, taky neni spatnej, btw.
    REDGUY
    REDGUY --- ---
    JACHYMKO: Ono obecne The Old New Thing je drobne cteni. Pro me nejzajimavejsi tam je ten neustalej (az do nedavna?) duraz Microsoftu na zpetnou kompatibilitu skoro za kazdou cenu a dusledky, jaky to ma. Sice to neni pristup kterej bych zvolil ja, ale plne je chapu.
    ANT_39
    ANT_39 --- ---
    JACHYMKO: Dik za odkaz.
    XCHAOS
    XCHAOS --- ---
    ANT_39: preemptivní multitasking v DOS boxech začínal jakž-takž fungovat pod Windows 95... ale pořád byly problémy (nebo složitosti) s grafikou a komunikačními drivery pro modemy... paradoxně nejčastějším zadáním multitaskingu tehdy ale bylo "chci stahovat něco přes modem a u toho gamesit svojí oblíbenou DOSovskou hru" :-) (mluvím o roce 1995)
    ANT_39
    ANT_39 --- ---
    JACHYMKO: Zajimavy, mel jsem o tom podobny predstavy jako XCHAOS... v te dobe jsem programoval v basicu na atari, takze jsem o tom dohromady nic nevedel, ale vzdy jsem mel za to (hlavne na zaklade toho, co jsem slysel), ze tam preempce nefungovala.
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: ehm, no tak kdo tehdy zkoušel trochu víc to multitaskování ve Windows 3.x, tak právě radši rychle přešel na to Desqview, nebo tak něco :-)

    jsem myslel, že 32bitový byly až Windows 95 ... nevím, nejsem windowsolog, pouze si pamatuju, že to bylo třeskutě nepoužitelný, a pro skutečně produkční účely se na běžně dostupných konfguracích (typu 4 MB RAM, apod.) používal MS-DOS ještě hluboko v polovině 90tých let.
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: tak Windows 3.x samozřejmě byly DOS, že jo. a tím bych tuhle offtopic debatu fakt ukončil.
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: co je "původní PC" ?

    krátce jsem měl přístup k více či méně obskurním 286kám, ale moje první vlastní PC byla 386ka. v té době jsem Linux neznal - ale faktem je, že na stejné architektuře (486ky, Pentia) šlo s pomocí vyzrálejšího Linuxu s jádrem 2.x postavit vcelku stabilní, na dálku administrovaný internetový server.

    to bych nenazval jako "bastl určenej primárně na hraní" - ve skutečnosti, na konci 90tých let v době dot com boomu vydělal ten "spíchnutej" bastl nainstalovanej na secondhand PC připojený do netu leckomu miliony, šťastlivcům jako Google pak rovnou miliardy.

    a naproti tomu - hlavním argumentem pro nasazení MS-DOSu a později Windows byla dostupnost kvalitních her :-) s vyděláváním peněz to bylo složitější (ano - šlo je vydělat tím, že si prodal spoustu PC s MS-DOSem a později Windowsy nějaké rozsáhlé kancelářsky-orientované firmě: ale vydělat peníze koupí této platformy - to už byla jiná kapitola...)

    takže při posuzování toho, co přesně v 90tých letech naplňovalo kategorii "bastl na hraní" bych byl opatrný. ano - na desktopu možná, a v 90tých letech málokoho napadlo použít PC jinde než na desktopu. Ale někteří z těch, které to napadlo, jsou dnes multimilionáři. I díky Linuxu.
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: jo, a nezapomínej taky na nutnost držet kompatibilitu s psacím strojem. té se i v 90tých letech přikládal velký význam, a co teprve v 80tých... :-)
    XCHAOS
    XCHAOS --- ---
    BLAMI: co to je "počítačový panic" ? dnes se malé děti učí zacházet s poměrně složitými mobily dříve, než vůbec jdou třeba do školy, nebo tak... předvést dětem příkazovou řádku bude něco jako mě ukázat ten telefon rozmontovaný (konkrétně starý, klasický mechanický telefon - jo, v tom jsem uměl "spravit" mechanicky zaseklé zavěšovací vidlice a možná seřídit zvonění :-)

    opravdu jednoduchý systém pro začátečníky byl 8bit CP/M, když jsme u toho. oproti MS-DOSu neměly diskety ani adresáře, a hodně logické bylo i zavádění programů do paměti (vše tam stačilo staticky zlinkovat a spouštět od adresy FFH :-)

    každá další éra byla více jednodušší pro toho, kdo chtěl počítače jen používat jako uživatel - případně používat pro vývoj (jednoduchých) aplikací nějaké hotové (složité) vývojové prostředí. ale jiná věc je pochopit, jak věci fungují: a tady skutečně pochopit sekačku na trávu může být jednodušší, než pochopit motor ze stíhačky.

    problém je, že MS-DOS používal motor ze sekačky na trávu pro pohon seriózně se tvářícího sportovního letadla. zatímco Linux by spočátku jen ten motor ze stíhačky -ale bez té stíhačky okolo, dalo se s ním max. jezdi dokola po runwayi na kolečkách od sekačky na trávu :-)
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: to jsem taky zkoušel - a měl jsem aspoň 6 virtuálních konzolí, které se nekousaly :-)

    jasně, nebyly pro to tehdy aplikace... tak jsem v 90tých letech nějaký čas používal kombinaci MS-DOS + Desqview (takový pseudo-multitasking). na svou dobu - resp. proti všemu, co bylo k dispozici jako alternativa - to nebylo špatné - ale prostě už tehdy bylo patrné, že Linux je opravdový operační systém, a tamto jen narychlo spíchnutý bastl.
    BLAMI
    BLAMI --- ---
    XCHAOS: ja teda nevim ale jsem za DOS dost vdecnej. V dobe kdyz jsem byl malej a vicemene uzivatel, byl natolik jednoduchej ze jsem ovladani pocitace rychle ovladl a mohl se vrhnout na slozitejsi ukony. Predstava ze bych jako pocitacovy panic usedl za Linux me trochu desi. A pak i z ty edukativni stranky jsem za nej rad. Kdyz jsem se ucil chapat co takovej operacni system a potazmo celej pocitac jak dela, DOS byl zase natolik jednoduchej, ze jsem pomerne rychle ziskal naivni predstavu :)
    XCHAOS
    XCHAOS --- ---
    MS-DOS byl stupidní systém, že jo... prostě co se hudby týče, měl jsem se asi narodit tak o 20 let dříve... ale co se osobních počítačů týče, tak o 20 let později.
    XCHAOS
    XCHAOS --- ---
    offtopic, ale stejně určitě pro leckoho zajímavé:

    MS-DOS is 30 years old today | ExtremeTech
    http://www.extremetech.com/computing/91202-ms-dos-is-30-years-old-today

    jo... kdybych býval měl v -nácti přístup k Linuxu, a nemusel se potýkat s MS-DOSem ... :-)
    XCHAOS
    XCHAOS --- ---
    Sacred language - Wikipedia, the free encyclopedia
    http://en.wikipedia.org/wiki/Liturgical_language
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Shell tim neco (nevyjimkovyho) handluje, napriklad. Ale co ja vim, ja sem windowsak :-)
    XCHAOS
    XCHAOS --- ---
    heleďte jedu na dovolenou, asi ode mě budete mít chvíli klid. čau.
    XCHAOS
    XCHAOS --- ---
    ISTEVE: tedy, to moje try { } je implementované právě pomocí setjmp/longjmp - takže těžko říct. na co se to používá jiného kromě odchytávání chyb hlouběji ve funkcích, to fakt nevím.
    ISTEVE
    ISTEVE --- ---
    XCHAOS: Dovol mi vypichnot jeden bod: "goto a setjmp/longjmp is right out. | Místo toho je k dispozici struktur try { fail() } except() { } vzdáleně podobná C++, Javě nebo Pythonu, která jejich funkčnost plně nahrazuje,"

    Opravdu si myslis, ze v C plne nahradis setjmp/longjmp pomoci try/fail/except ala exception handling v C++?
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Hele, koukals na ten link na pure C implementaci toho auto-release poolu? Podle mne to resi vesmes vsechno co se snazis vyresit ty, akorat to neni tak leaky abstraction.
    REDGUY
    REDGUY --- ---
    XCHAOS: napíšeš kód, který to vůbec neřeší - a když pak potřebuješ ten kód z nějakého důvodu zasmyčkovat (např. z CGI skriptu uděláš FastCGI skript, u webové aplikace) - tak tu smyčku celou dáš do jednoho velkého forget - Normalni clovek by si v takovehle situaci (kdyz uz by to chtel resit hnusnym hackem a ne spravne) napsal jednoduchej wrapper nad malloc, kterej by kazdej alokovanej blok pridal do nejakyho spojovyho seznamu a funkci, ktera by pak na konci te smycky vsechno v tom seznamu uvolnila. Jak to resi XChaos? Napise necitelny makra(*), ktery zmrzacej C a prinutej ho ridit se spoustou omezeni a vyjimek. Takhle vypada ta "inovace" ktere se tolik branim? 8)))

    (*) samozrejme, ne "napise", ale "vysni si", protoze skutecna implementace neexistuje a dlouho existovat nebude. Kolik dalsich problemu se objevi az/pokud to napise, to je uplne jina kapitola. Ostatne, je to legracni kolik problemu jsem ti nasel v kodu, ktery jeste neexistuje 8))

    XCHAOS
    XCHAOS --- ---
    REDGUY: éééééé... ty jo, asi takhle: napíšeš kód, který to vůbec neřeší - a když pak potřebuješ ten kód z nějakého důvodu zasmyčkovat (např. z CGI skriptu uděláš FastCGI skript, u webové aplikace) - tak tu smyčku celou dáš do jednoho velkého forget { } (a předtím inicializace proměnných té aplikace bude pochopitelně před tím forget { } ).

    víceméně kdybys viděl desing-patterns pro které je to určené, tak by ti vše bylo jasnější (doufám). a neříkám, že nemáš svůj díl pravdy ! (představ si typicky načítání ze souboru - potřebuješ typicky většinu věcí zahodit, ale to co hledáš, ponechat v paměti, a neztrácet čas kopírováním.. já uvažuju o nějakém recycle(), které by dokázalo uvolnit paměť z kontextu ... jako že plošná dealokace by byla rychlá, ale existovala by možnost vyhodit i dílčí flák paměti, byť ne vždy by to bylo efektivní...)
    REDGUY
    REDGUY --- ---
    XCHAOS: jednoduše se paměť uvolní na konci programu ROFL. Cili tvoje oblibene leaky. Na co v tom pripade potrebujes vlastni knihovnu kdyz presne to same umi malloc sam ale fakt nechapu.

    Prosim, neutikej od otazky: proc by kdokoliv krome tebe mel pouzivat alokaci pameti pres tve kontexty? Jak bys to propagoval? Je to slozitejsi, omezuje to, mrzaci to C, kde je vyhoda? (krome velmi osobniho "nemuzu pred Redguyem priznat ze to je na nic", samozrejme)
    XCHAOS
    XCHAOS --- ---
    BTW precedentem pro "registraci něčeho, co se má udělat nakonec", je funkce atexit() které se předávají handlery na funkce které se mají zavolat při exit() .. v C prakticky každou slepou uličku už někdo prošlapal.

    pokud udělám obecné queue() na zařazení čeho si do fronty, tak to bude velké dobro, protože pak by se to vykonalo při každém escape() z jakéhokoliv scope - v podstatě v céčku chybí nějaké "atbreak" a "atreturn", které by bylo ekvivalentní tomu atexit()
    Kliknutím sem můžete změnit nastavení reklam