• ú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: 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.
    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/
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no... asi dělání webu jak v čem :-) existující nástroje/knihovny použitelné přímo na úrovni C (námatkou FastCGI, knihovna pro práci s CGI query stringy a POSTy formulářů ... ale třeba i curl, parsery XML) by tady určitě ontopic byly.

    ono se to málo ví - ale spousta webové funkčnosti ve "vyšších jazycích" jsou jen wrappery pro systémové knihovny, které lze použít i přímo z C - interpretr "vyššího jazyka" často neudělá většinou nic nedělá nic jiného, než že přijde s nějakým bindingem na knihovnu napsanou v Céčku.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Ono je ontopic delani webu? To mne mates, to tam nemas napsany ani naznakem.

    XCHAOS: njn, kdyz mne proste prijde rozdil mezi "Ccko neumi refcounty", a "Ccko neumi pocitat reference automaticky, a tak to je pro single threaded single process aplikace nanic pro spravu automatickou spravu pameti, pokud nemas podporu v prekladaci ala gcc" vetsi nez 10-20%.
    REDGUY
    REDGUY --- ---
    XCHAOS: Skvele. Muzes nam nejakou takovou aplikaci predvest? Jakym zpusobem jsi toho dosahl?
    XCHAOS
    XCHAOS --- ---
    REDGUY: nemusím hned všechno na světě napravovat - mě postačí, když ty aplikace, které napíšu já, nebudou vyžadovat hromady serverů jen proto, že k nim přistupují tisíce lidí najednou...
    REDGUY
    REDGUY --- ---
    XCHAOS: spousta webových aplikací byla zřejmě napsána neefektivně - a jak bys to napravil?
    XCHAOS
    XCHAOS --- ---
    REDGUY: bla bla bla. nechci nic - je mi to jedno, chci jen přiměřeně exhibovat, až bude s čím (což zatím bohužel není)

    víceméně řeším, co všechno tady je a co není offtopic. a je fakt, že třeba od programátorů počítačových her (nic proti nim) asi nemá smysl nechat si vysvětlovat, v čem se vyplatí nebo nevyplatí programovat webové aplikace (všechny hromady serverů v klimatizovaných skříních dnes a denně dokazují, že spousta webových aplikací byla zřejmě napsána neefektivně...)
    REDGUY
    REDGUY --- ---
    XCHAOS: cca první rok existence tohoto klubu byl především o tom čelit argumentům "kdo by dnes ještě chtěl programovat v C ??" - ja si to spis pamatuju "Proc chces pouzivat C (nebo dokonce tu hruzu co z nej delas v Cll1) na veci na ktere se nehodi?" Ale to je asi subjektivni 8)

    někteří z těch tehdy aktivních to dnes dělají takovou skrytější podobou. - LOL. Temne sily konspiruji 8)

    předveďte ekvivalent v C ve stylu "pod kapotou se ve skutečnosti děje tohle". Ať už jde o pole indexovaná textovými či zcela obecnými klíči - wut? Ty chces aby ti lidi predvadeli jak implementovat dictionary v C? Fakt?
    XCHAOS
    XCHAOS --- ---
    ANT_39: no, vidělo to dost lidí (a zděsilo se :).

    Když se to ještě jmenovalo cll1.h tak to vyděsilo opravdu hodně lidí a i v tom šlo přeložit řadu příkladů. ale od těch počátků se teď sám dost distancuju... zvlášť verze 0.6 byla mimo (ale jediná byla reálně použitá... ale ta zase ještě nebyla tak extra vzdálená jiným makro-praktikám v GNU světě...)

    přejmenování na crl1.h má být taková "tlustá čára" za těmi trochu hektickými začátky, kdy jsem měl pocit, že předělat přece musím úplně všechno. od té doby uplynulo pár let, seznámil jsem se s pár novými programátorskými technikami (i celými programovacími jazyky) - a taky se trochu posunuly měřítka toho, co mi ještě přijde vtipné a co už ne.

    dnešní commit vypadá pro zajímavost takhle:
    https://dev.arachne.cz/svn/cll1h/changeset/133

    přesunul jsem se od milionů maker k tomu, aby to bylo víc v "Céčkovském duchu" - čisté C má jen několik málo klíčových slov, a mělo by to asi tak zůstat i u jeho nadstavby. víceméně se chci soustředit na makra for_each() {} a count() pro co největší množství primitivních typů. Ostatní vychytávky asi dost zredukuju - určitě tam nechám ošetření vyjímek ve stylu vyšších jazků - tedy try {} a except() implementované pomocí setjmp()/longjmp(). a samozřejmě to bude mít vlastní správu paměti. ale celkový počet maker co bude opravdu nutné si zapamatovat bych rád snížil třeba na 10.

    taky to celé bude podporovat jen C99 compilery (tím se sice vzdám kompatibility s Tiny C compilerem - ale zato si zachovám zdravý rozum, vyhnu se #ifdef;m... a možná přispěju k většímu akceptování této normy, která mi jako člověku, co C zná celkem už skoro 20 let přijde rozumná).

    (proboha, nezkoušejte s tím nic přeložit - adresář "demos/" je teď úmyslně prázdný - a budu tam postupně portovat jen ty věci z branches/fork-07 , které mě budou připadat elegentní..)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: tedy "refcounty dělané ručně" jsou přesně to, o čem píšu v [ XCHAOS @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ] - je možné samozřejmě předvést, jak to celé funguje, jenže nemůžeš současně tvrdit, že do C je možné refcounty dát jako nativní metodu správu paměti.

    fakticky je úžasné, jak vám záleží na každém jednotlivém slovíčku a jeho přesné definici - ale nezajímá vás širší smysl nějakého výroku, který přitom může mít třeba z 80-90% smysl i bez toho slovíčkaření...
    XCHAOS
    XCHAOS --- ---
    REDGUY: budiž... ale cca první rok existence tohoto klubu byl především o tom čelit argumentům "kdo by dnes ještě chtěl programovat v C ??". no a někteří z těch tehdy aktivních to dnes dělají takovou skrytější podobou.

    přitom je tady strašně jednoduchá věc, kterou můžou udělat: vemte všichni ekvivalent vaší oblíbené "vyšší abstrakce" - a pokud to lze, tak předveďte ekvivalent v C ve stylu "pod kapotou se ve skutečnosti děje tohle". Ať už jde o pole indexovaná textovými či zcela obecnými klíči (asociativní pole v PHP, slovníky v Pythonu), nebo třeba o obyčejnou metodou .append() u pole proměnné délky (zase - viz Python): každý takovýhle postup tady má svoje místo, pokud ho člověk pojme "a tohleto je ve skutečnosti implementované takhle a takhle"... na což je C dost ideální nástroj (na to předvedení..)
    Kliknutím sem můžete změnit nastavení reklam