• ú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í
    WILD_A
    WILD_A --- ---
    REDGUY: Ja reagoval na to ze si napsal, ze to je to v zasade vyjmecna vec potrebovat vykon, ja si to nemyslim, to je cely. Mozna proto, protoze se temahle vecma zabejvam castejs nez vetsina a tenhle problem mne pali vic nez ostatni.
    REDGUY
    REDGUY --- ---
    WILD_A: Tak si prosim jeste jednou precti co jsem psal. Nikde nepopiram, ze C ma svoje misto, naopak, explicitne to zminuju. Jen rikam, ze to misto neni nejak extra velky, i s ohledem na to, ze C++ nabizi bohatsi vyjadrovaci schopnost za nulovou nebo velmi nizkou cenu (podle toho jakej subset se rozhodnu pouzivat). A to uz vubec nemluvim o jazycich, ktery mi poskytnou moznosti, o kterejm se C/C++ ani nezda, i kdyz me to treba stoji nejakou cast vykonu (ale nekdy ani to ne).
    WILD_A
    WILD_A --- ---
    REDGUY: Nevim kolik jich to vi a kolik nevi a kolik jich to resi. Vzal jsem to jako priklad. Priznam se, ze ani netusim co vetsina programatoru resi za problemy. Jen rikam, ze C ma furt svoje vyznamny misto, protoze je fura situaci, kde te vykon velmi zajima a napr. moznost ovlnit jak je co ulozeny v pameti hraje roli. Navic je C lingua franca a ma ohromnou code base, z ktery lze cerpat. Jak uz jsem tu jednou psal ja vetsinu veci co delam delam v kombinaci C + Python nebo aktualne pouzivam jeste Go, hracky a experimenty v lispu nepocitam. V obou pripadech mam moznost prejit lehce do C abych mohl ty kriticky casti resit v detailech.
    XCHAOS
    XCHAOS --- ---
    REDGUY: myslím se dostáváme k otázce, co to znamená v dnešní době "programátor". (a o tom byl i ten vtip s operátory a dynamickým typováním v javascriptu...)
    REDGUY
    REDGUY --- ---
    WILD_A: Kolik procent programatoru pravidelne programuje TSP o 10000 bodech a o rad vejs a pridava k tomu dalsi podminky? Nebo i kolik programatoru vi (bez googlovani) jak to efektivne resit? Heh, kolik programatoru vubec hned z hlavy vi co ta zkratka znamena?

    Samozrejme ze najdes specialni pripady kdy ten vykon potrebujes, o tom zadna. Ale pro naprostou vetsinu situaci a naprostou vetsinu programatoru je hrubej vykon sekundarni, primarni je jak snadno se pisou a udrzujou slozite programy. A pokud se bavime o uceni se, jak spravne programovat, tak je lepsi si TSP implementovat v jazyce, kterej ti umozni soustredit se na algoritmus i za cenu o neco nizsiho vykonu. Ostatne, viz [ FLEGMA @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ] .
    FLEGMA
    FLEGMA --- ---
    WILD_A: S tim algoritmem pro grafy jsi mi pripomel, jak jsem cetl knizku Struktury dat od Berztisse, docela obsolete - rok 1979 a u algoritmu pro hledani cyklu v orientovanem grafu bylo doporuceni, at se nepousti pro graf s prilis velkym poctem uzlu kvuli vypocetni narocnosti a to cislo bylo uplne smesne - ted si nepamatuju jestli 20 nebo 50 :-) V praci jsem tentyz problem resil lepsim algoritmem (vytuneny Tarjan) a na modernim hw, grafy do 1000 uzlu a vysledky v radu milisekund. Kolega prede mnou resil ulohu bruteforcem a u mensich grafu se cekalo na vysledek minuty, u vetsich padalo na pamet, tam by nepomohl ani lepsi hw :-)
    WILD_A
    WILD_A --- ---
    REDGUY: Nepotrebujeme vetsi vykon? Jak rychle vyresis TSP o 10000 bodech a jak rychkle kdyz to bude o rad vejs? A kdyz tomu pridam dalsi podminky? Jasne je svet aplikaci pro vice nebo mene BFU a tam s vykonem uz moc neziskavame, ale NLP, computer vision a podobny veci by z lepsiho vykonu taky dokazali tezit i pro beznyho uzivatele. Ale hlavne i nadale existuje velkej balik NP problemu, kde lepsi vykon dost pomaha. Kdyz jsem uz zacal s TSP tak pred nedavnem bylo TSP o par tisicich bodech velka vec, dneska to zvladnu na svym laptopu do minuty a neni toho dosazeno paralelizaci ani lepsim algoritmem, ten se od 90tych let nezlepsil.

    Takze ja bych s tebou nesouhlasil, dost zalezi v jakym svete se pohybujes.
    FLEGMA
    FLEGMA --- ---
    JANFROG:
    Kdyz uz jsme u tech zavadejicich vyroku:
    napriklad (muj oblibeny a v mnoha smerech prukopnicky :-) Self ma pouze delegovani a jen velmi tezko lze zpochybnit, ze to je OO jazyk.

    Ehm, otevrel jsem si dokument Self Power of Simplicity z roku 1987 a cituji:
    In SELF too, everything is an object. But, instead
    of a class pointer, a SELF object contains named slots which may store either state
    or behavior. If an object receives a message and it has no matching slot, the search
    continues via a parent pointer. This is how SELF implements inheritance. Inheritance
    in SELF allows objects to share behavior, which in turn allows the
    programmer to alter the behavior of many objects with a single change.


    Prototypes combine inheritance and instantiation to provide a framework that is simpler and more flexible than most object-oriented languages. Slots unite variables and procedures into a single construct. This permits the inheritance hierarchy to take over the function of lexical scoping in conventional languages.


    Nebo handbook k poslednimu releasu:
    Parent slots can be omitted from an object’s full
    name, since the slots in a parent are visible in the child via inheritance.


    Nebo z paperu "Inheritance and encapsulation in SELF":
    We believe there are two reasons to include inheritance in a dynamically typed language like SELF: malleability a reusability. Inheritance allows the behaviour common to set of objects to be factored into a single shared object...

    Inheritance encourages the reuse of code and data by allowing the programmer to write new abstractions in terms of existing abstractions. Programmers need only write the differences from existing code when defining new abstractions, the rest of the code may be shared among the old abstraction and
    the new abstraction. Improvements to one abstraction automatically propagate to every abstraction that shares the behaviour, further amplifying programmers power.


    Lepe bych to nenapsal aneb krasna definice dedicnosti jakozto principu.


    The common theme in malleability and reusability is sharing: one object is
    shared by other objects, promoting malleability and providing for reusability.
    Inheritance is just a declarative way of specifying which objects are shared by
    which other objects. One guiding principle of our design for inheritance in SELF,
    then, is that an object’s parents are treated as shared subparts of the object.


    atd. atd.

    Jiny typ dedicnosti, stale vsak dedicnost - to ze se misto volani metod/funkci nebo pristupu k atributum/fieldum parent tridy deleguje zprava parent objektu + to ze jde sdilet parent sloty je jen odlisnost v implementaci dedicnosti. Uz jen to, jak casto se pouziva v te specifikaci slovo parent na vysvetleni parent-child vztahu je dost vymluvne... Kdyz se vratim k pozadavku dedicnosti jako zakladnimu kriteriu OOP, tak plati dokonce i pro prukopniky/exoty jako Self, jako bonus k tomu maji stejny nazor na zakladni principy OOP prekvapive i autori ucebnic OOP programovani, nastesti v tom nejsem sam :-)

    Ze se v nasi pri na jedne strane objevil jako podpurny argument umirajici, archaicky a temer nepouzivany jazyk s nejakou roli v historii garbage collectoru a JITu a nulovou roli v soucasnosti je vec druha. A ano, existuji i objektove jazyky, kde nejsou atributy a pouziva je mene nez 1% programatoru. Muzeme je tedy s klidem nazvat mrtvou/slepou vyvojovou vetvi, za 20 let o nich mozna ? bude jednoradkova zminka na wikipedii - historii pisi vitezove ;-)
    REDGUY
    REDGUY --- ---
    XCHAOS: Promin, ale kdyz se ti bez chyby prelozi C program, tak nemas jistotu vubec zadnou. Nevim na co presne narazis zminkou o "skriptech", ale jestli ti jde o typovou kontrolu, tak prekvapive existuji jine jazyky nez C ktere ji maji, v rade pripadu i mnohem lepsi.
    XCHAOS
    XCHAOS --- ---
    REDGUY: já nejsem nijak striktní. poslední zásahy do nějakého kódu, co jsem udělal, se týkaly drobných oprav skriptů v shellu nebo php ... pár řádek jsem spáchal i v Pythonu... V C bych dělal rád, ale jaksi ... bez nějakého toolkitu a vůbec základní odvahy k tomu není motivace.

    ale když už jsem pochochopil, co je potřeba k napsání robustního a stabilního C kódu (tedy, nesnažit se přistupovat k NULL pointerům, což se člověk na druhou stranu naučí po čase téměř automaticky a dává to i do každé podmínky a tak), tak je mu to líto zahodit. je to jako by si už jednou zvládl salta na snowboardu (tam je teda nezvládám, ale umím si představit, jaký by to byl pocit), ale nebylo by pro to uplatnění a všichni by ti vysvětlovali, že jezdit na sáňkách je daleko lepší, protože to můžou dělat všichni.

    prostě jistotu, kterou mám, když se mi bez chyby přeloží nějaký C program (a vím, že jsem v něm nedělal zásah do modulů, které už jsou prověřené jako stabilní), tu mi žádný skript prostě nedá.
    REDGUY
    REDGUY --- ---
    JANFROG: No prave. Proto mi XChaosovo striktni trvani na C prijde smesny. Navic pokud (aspon jak to chapu) mu jde o to ucit se.
    XCHAOS
    XCHAOS --- ---
    UETOYO: úplně nesmyslné porovnání to nebylo. kromě toho to byl vtip. (ale potrefená husa se holt ozvala...)
    JANFROG
    JANFROG --- ---
    UETOYO: Dobra otazka. Hlavni duvod je historicky. Ale i kdybych mel moznost to napsat cele znovu (ach, krasna predstava :-) tak bych se asi dele rozmyslel. OS API je C tak jako tak, semantika C++ je o dost slozitejsi a fakt ze C++ nema definovan mangling, tudiz linkovani je problematictejsi take nenahrava.
    Pokud C++ pak striktne definovanou podmnozinu.

    Ale je fakt ze jedna z cest kterou bych rad zkusil je hybridni implementace v HLL jazyku s "pluggable" typovym systemem "transpiled" do C++. (sakra, asi zacnu psat anglicky, tohle je fakt hrozny).
    Kazdypadne jsem zatim neudelal dost experimentu timto smerem abych mel jasno.
    JANFROG
    JANFROG --- ---
    XCHAOS
    XCHAOS --- ---
    JANFROG: jenže to je je přesně to: mě třeba memory management zajímá. nějaké nápady ohledně toho mám, ale zkušenosti jsou v podstatě z 16bit DOSu (kde se řešily fakt psí kusy) a v Linux jsem se na to vykašlal, protože paměti bylo dost, a já psal spíš "skripty", než rozsáhlejší aplikace (prostě jsem neřešil dealokaci paměti, protože se jí zabralo trochu a program pak stejně brzo skončil)

    možností v C je několik, jsou tu různé náhrady za malloc/free, je tu Glib, jsou tu různé hračky... ale ne, místo toho se tady budeme bavit s trolem, který nám vysvětlí, že C je celé špatně a nemá cenu tyhle věci studovat (kromě toho, že tu tuším právě REDGUY, pokud si ho s někým nepletu, před časem navrhoval např. alloca(), které když jsem si pořádně nastudoval, tak jsem zjistil, že je pro věci, které mi zajímají naprosto nevhodné - paměť alkovanou na stacku nejde vrátit pomocí return, například... takže mi ta rétorika čím dál tím víc připadá jako "já jsem nepřišel na to, jak některé věci udělat v C, takže C je tím pádem celé špatně!")
    REDGUY
    REDGUY --- ---
    JANFROG: Nejdriv jedna otazka: ted ty interpretry a generatory kodu pises v C nebo C++?
    XCHAOS
    XCHAOS --- ---
    REDGUY: protože když nějakej jazyk znám 20 let, tak řeším, k čemu dalšímu ty znalosti použít - místo toho, abych se učil od nuly něco dalšího a seznamoval s neočekávaným chováním apod.

    prostě z nějakého důvodu ti stojí za to úsilí bojkotovat klub, určený pro lidi, který baví/zajímá spíš C než C++. Nebo pro lidí, které baví/zajímá kromě C++ i C. prostě nechápu proč: pod Linuxem je v tom pořád napsaná většina knihoven (když ne aplikací), je to obrovská resource base, nad kterou lze s minimem úsilí udělat něco vlastního. mě zajímá, jaký má kdo názor na to, jak to "něco vlastního" udělat správně. A C++, navzdory názvu, nemá v některých ohledech s C společného o moc víc, než ten JavaScript (tzn. složené závorky :-) a teda konkrétně navíc je taky kompilované, ale tím to fakt končí.

    na většině jiných míst na NYXu by tě s přístupem "tenhle klub je celý špatně" už dávno zabanovali...
    JANFROG
    JANFROG --- ---
    Psat interpreter/generator kodu v C proto, ze driv to tak lidi delali a chci si to vyzkouset stejne jako experimentali archeologove zkousi zivot v hlinenych chatrcich, dava smysl. Ale pokud to delam proto, ze se chci naucit jak dobre psat interpretr/generator kodu, tak C je jedna z nejhorsich moznosti.
    - LOL!

    (nepripada vam reagovat v odborne diskuzi stylem "LOL" ponekud detinske? Ale k veci)
    To co uvadis je dost silne tvrzeni a - dle meho nazoru - prinejmensim zavadejici.
    psanim (dobrych) interpreter, generatoru kodu se se zabyvam delsi dobu (rekneme nekdy od 2005) vice ci mene intenzivne (t.j, delam to temer kazdy den, zivi me to). Po tech letech si naopak myslim C, potazmo C++ je jedina moznost, jak se naucit to delat poradne.
    V tomto "oboru" je hodne veci, ktere si pri praci v Java/Pythonu/LISPu proste clovek nenauci, nevyzkousi.
    Veci ohledne datove lokality, skoku, cache spill, triky s mprotect() / madvise(), memory alignment...
    Problem je, ze pokud to chces delat "dobre", pak "Performance matters!" (Lars Bak)
    REDGUY
    REDGUY --- ---
    XCHAOS: A ja se prave snazim naznacit, primarne tedy tobe, ze je fakt dobrej napad zamyslet se nad tim, jestli "necitim potrebu resit proc C" je dobry pristup a jestli, kdyby ses otevrel jinym jazykum, by to z tebe treba neudelalo lepsiho programatora.
    XCHAOS
    XCHAOS --- ---
    REDGUY: tenhle klub je pro lidi, kteří mají nějaký důvod programovat v C a necítí potřebu ho řešit. uznávám, že v záhlaví to mám formulované trochu divočeji :-)
    REDGUY
    REDGUY --- ---
    XCHAOS: Samozrejme, zalezi ceho chces dosahnout. Pokud si svuj cil natvrdo nadefinujes jako "jak tohle dobre programovat v C", tak ano, nema smysl se bavit o jinych jazycich. Ale podle me, mnohem zajimavejsi otazka je "proc bych to vubec mel chtit programovat v C".

    proč? protože v minulosti se to právě nezřídka dělo! - LOL! Zase: pokud to myslis podobne jako ti, pro ktere studium vojenstvi znamena reenaktovani bitev obcanske valky, tak ano. Psat interpreter/generator kodu v C proto, ze driv to tak lidi delali a chci si to vyzkouset stejne jako experimentali archeologove zkousi zivot v hlinenych chatrcich, dava smysl. Ale pokud to delam proto, ze se chci naucit jak dobre psat interpretr/generator kodu, tak C je jedna z nejhorsich moznosti.

    Btw, prijde mi, ze uz zase prubezne posouvas branku jak se ti zrovna hodi. Myslis ze bys mohl nejak explicitne specifikovat, PROC vlastne chces C? Je to proto, ze chces iluzi kontroly? Proto, ze driv se v nem psali veci a chces byt neco jako experimentalni historik? Nebo proto, ze si myslis, ze tak "vymacknes" z pocitace co to da?
    Kliknutím sem můžete změnit nastavení reklam