• ú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í
    REDGUY
    REDGUY --- ---
    XCHAOS: wtf? Jak to myslis, "prochazejici vsechny kombinace"? Proc si to myslis?
    XCHAOS
    XCHAOS --- ---
    REDGUY: to je docela působivé, akorát nevím, o jakou jde optimalizaci, když evidentně jde o dotaz procházející všechny kombinace - bez ohledu na počet záznamů v jednotlivých tabulkách se mi to jeví tak nějak že složitost je pokaždé stejná :-) nicméně jako důkaz, že MySQL dělá pokaždé něco jiného to pochopitelně dostačuje.

    akorát, že jsem asi jediný moderátor klubu na NYXu, která se nechává od přispěvatelů beztrestně urážet. no ale snad časem i NYXáci dospějí/dozrají... kdo ví.
    REDGUY
    REDGUY --- ---
    ALMAD: Protoze mi to prijde jako naprosto zbytecny. Pokud se vejdu do pameti, tak mi relace mezi datama prijde mnohem jednodussi vytvorit v normalnich datovejch strukturach a rovnou tak s nima pracovat, nez mapovat data na tabulky, pak psat sql prikazy a pak doufat, ze to SQL engine vymysli dobre. Proste vyjadrovaci schopnost high-level jazyku je mnohem vyssi, nez SQL, u kteryho jsem omezenej tim ze musi byt relativne snadno mapovatelny na nejaky v podstate jednorozmerny tabulky.

    Jasne, muzeme se bavit o nejakem datovem/query metajazyce kterej by za me generoval C/C++/Perl. Ale je hloupost stavet ho na SQL.
    ALMAD
    ALMAD --- ---
    REDGUY: Tak jako proc ne.

    Jak vidis na xChaosove prikladu, SQL optimalizatory jsou chytrejsi, nez interprety a kompilatory (sql dotaz trva 0.00, php parsing 0.5, QED), takze proc je nevyuzit na preklad SQL -> pametove struktury?
    REDGUY
    REDGUY --- ---
    XCHAOS: teď teda nezbývá počkat, než mi nějaká SQL databáze ukáže různé DESCRIBE pro různé obsahy tabulek - a jako obvykle, obecni idiot radsi tlacha o vecech kterejm nerozumi, pripade "ceka" az az se mu neco "ukaze", misto toho aby si neco nastudoval nebo vyzkousel. A pritom je to tak snadne.

    Nu co, v Uzbekistanu dnes slavi Den Kdy Kazdy Pravy Uzbek Musi Byt Hodny Na Vesnickeho Idiota, proc se nepripojit k oslavam, i kdyz nejsem uzbek, ze?

    mysql> describe users;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(8)      | YES  | MUL | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    
    mysql> describe posts;
    +---------+--------------+------+-----+---------+-------+
    | Field   | Type         | Null | Key | Default | Extra |
    +---------+--------------+------+-----+---------+-------+
    | user_id | int(8)       | YES  |     | NULL    |       |
    | text    | varchar(255) | YES  |     | NULL    |       |
    +---------+--------------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    
    mysql> show index from users;
    +-------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table | Non_unique | Key_name     | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | users |          1 | idx_users_id |            1 | id          | A         |        NULL |     NULL | NULL   | YES  | BTREE      |         |               |
    +-------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    1 row in set (0.00 sec)
    
    
    # Ruzne vysledky describe pro ruzne obsahy tabulek:
    
    # hodne radku v posts i users
    
    mysql> describe select users.id, posts.text from users, posts where posts.user_id = users.id;
    +----+-------------+-------+------+---------------+--------------+---------+---------------------+------+--------------------------+
    | id | select_type | table | type | possible_keys | key          | key_len | ref                 | rows | Extra                    |
    +----+-------------+-------+------+---------------+--------------+---------+---------------------+------+--------------------------+
    |  1 | SIMPLE      | posts | ALL  | NULL          | NULL         | NULL    | NULL                | 4096 |                          |
    |  1 | SIMPLE      | users | ref  | idx_users_id  | idx_users_id | 5       | rtest.posts.user_id |   11 | Using where; Using index |
    +----+-------------+-------+------+---------------+--------------+---------+---------------------+------+--------------------------+
    2 rows in set (0.00 sec)
    
    
    # Hodne radku v posts, jeden radek v users
    
    mysql> describe select users.id, posts.text from users, posts where posts.user_id = users.id;
    +----+-------------+-------+--------+---------------+------+---------+------+------+-------------+
    | id | select_type | table | type   | possible_keys | key  | key_len | ref  | rows | Extra       |
    +----+-------------+-------+--------+---------------+------+---------+------+------+-------------+
    |  1 | SIMPLE      | users | system | idx_users_id  | NULL | NULL    | NULL |    1 |             |
    |  1 | SIMPLE      | posts | ALL    | NULL          | NULL | NULL    | NULL | 4096 | Using where |
    +----+-------------+-------+--------+---------------+------+---------+------+------+-------------+
    2 rows in set (0.00 sec)
    
    # jeden radek v posts i users;
    
    mysql> describe select users.id, posts.text from users, posts where posts.user_id = users.id;
    +----+-------------+-------+--------+---------------+------+---------+------+------+-------+
    | id | select_type | table | type   | possible_keys | key  | key_len | ref  | rows | Extra |
    +----+-------------+-------+--------+---------------+------+---------+------+------+-------+
    |  1 | SIMPLE      | users | system | idx_users_id  | NULL | NULL    | NULL |    1 |       |
    |  1 | SIMPLE      | posts | system | NULL          | NULL | NULL    | NULL |    1 |       |
    +----+-------------+-------+--------+---------------+------+---------+------+------+-------+
    2 rows in set (0.00 sec)
    
    
    # posts i users prazdne
    
    mysql> describe select users.id, posts.text from users, posts where posts.user_id = users.id;
    +----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
    | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                               |
    +----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
    |  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Impossible WHERE noticed after reading const tables |
    +----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
    1 row in set (0.00 sec)
    
    
    # hodne radku v posts, nekolik v users
    
    mysql> describe select users.id, posts.text from users, posts where posts.user_id = users.id;
    +----+-------------+-------+-------+---------------+--------------+---------+------+-------+---------------------------------------------+
    | id | select_type | table | type  | possible_keys | key          | key_len | ref  | rows  | Extra                                       |
    +----+-------------+-------+-------+---------------+--------------+---------+------+-------+---------------------------------------------+
    |  1 | SIMPLE      | posts | ALL   | NULL          | NULL         | NULL    | NULL | 14496 |                                             |
    |  1 | SIMPLE      | users | index | idx_users_id  | idx_users_id | 5       | NULL |     8 | Using where; Using index; Using join buffer |
    +----+-------------+-------+-------+---------------+--------------+---------+------+-------+---------------------------------------------+
    2 rows in set (0.00 sec)
    
    
    # hodne radku v posts, dva v users
    
    mysql> describe select users.id, posts.text from users, posts where posts.user_id = users.id;
    +----+-------------+-------+-------+---------------+--------------+---------+------+-------+--------------------------------+
    | id | select_type | table | type  | possible_keys | key          | key_len | ref  | rows  | Extra                          |
    +----+-------------+-------+-------+---------------+--------------+---------+------+-------+--------------------------------+
    |  1 | SIMPLE      | users | index | idx_users_id  | idx_users_id | 5       | NULL |     2 | Using index                    |
    |  1 | SIMPLE      | posts | ALL   | NULL          | NULL         | NULL    | NULL | 14496 | Using where; Using join buffer |
    +----+-------------+-------+-------+---------------+--------------+---------+------+-------+--------------------------------+
    2 rows in set (0.00 sec)
    
    ISTEVE
    ISTEVE --- ---
    XCHAOS: "... errr, protože v PHP omáčka okolo trvá 0.5 sekundy?" [citation needed]
    REDGUY
    REDGUY --- ---
    XCHAOS: já se ale nechtěl omezovat na datové struktury SQL - šlo mi vysloveně o to, že bych napsal jednořádkový SQL dotaz, který by mi pre-compiler rozexpandoval třeba na 10 řádků volání knihovních C funkcí - coze? To myslis vazne? Takze ty misto toho abys proste rucne napsal kod kterej bude pouzivat struktury, objekty, hashe, linked listy, stromy a janevim co jeste bude psat SQL ktery o nicem z toho nema ani paru a budes doufat ze optimizer to nejak zazracne vymysli? HAHAHAHAHAHAHA. Cim dal tim lepsi.
    REDGUY
    REDGUY --- ---
    XCHAOS: což jsem u svých projektů elegantně chtěl řešit použitím makro-wrapperů, - HAHAHAHAHAHA. No nic.

    norma POSIX se právě snažila striktně definovat i kompatibilitu hlavičkových souborů k běžným knihovním funkcím jo, a "bezne knihovni funkce" jsou plne a naprosto dostacujici pro real-world projekty.

    Jen tak pro legraci, jak dobre by dneska fungoval tvuj slavnej prometheus kdybys ho napsal v roce 1994? (a nez napises nejakou pitomost, zamysli se nad tim, jak vypadaly linuxove firewally v roce 1994).

    ALMAD
    ALMAD --- ---
    XCHAOS: jasně, že bych mohl trochu optimalizovat i v PHP... ale člověk tam instinktivně píše co nejsrozumitelněji... a navíc ani není jasné, která feature jazyka tam zdržuje kolik a tak...

    kthx, neat: :D anyways:

    Ad 1) No, v SQL taky clovek pise normalnizovane a pekne a srozumitelne a instinktivne. A pak potka vykonovou realitu. Nejak nevidim duvod, proc by to v php melo bejt stejny.

    Ad 2) Neni jasne? Protoze...errr...protoze to neznas a nemeris?

    A vytvarim 3): Z bodu 1) mi teda vyplyva, ze nejvetsi ficura prepisu do C je ta, ze v C clovek instinktivne nepise co nejsrozumitelneji, ale co nejvykonneji.

    XCHAOS
    XCHAOS --- ---
    REDGUY: ... což jsem u svých projektů elegantně chtěl řešit použitím makro-wrapperů, které by pomohly obcházet případné dílčí nekompatibility knihoven či platforem ... :-) (což je nápad, který se výrazně osvědčil např. u javascriptové knihovny JQuery ...)

    jinak máš pravdu částečně - norma POSIX se právě snažila striktně definovat i kompatibilitu hlavičkových souborů k běžným knihovním funkcím, a v řadě přídů se toto opravdu už 10 a více let nezměnilo.

    REDGUY: já se ale nechtěl omezovat na datové struktury SQL - šlo mi vysloveně o to, že bych napsal jednořádkový SQL dotaz, který by mi pre-compiler rozexpandoval třeba na 10 řádků volání knihovních C funkcí... možná je to celé blbost, ale rozhodně mi místo toho nepodsouvej vlastní hloupé nápady, které nějak automaticky předpokládáš i u mě :-)

    ALMAD: ... errr, protože v PHP omáčka okolo trvá 0.5 sekundy? přesto, že není jediný důvod, proč by měla?

    třeba proto, že v PHP se na sloupce ve výsledku odkazuji pomocí $vysledek['klic'] - zatímco libmysqlclient mě trochu spartánštěji vede k použití číselných indexů do pole reprezentujícícho jeden řádek z výsledku dotazu? jasně, že bych mohl trochu optimalizovat i v PHP... ale člověk tam instinktivně píše co nejsrozumitelněji... a navíc ani není jasné, která feature jazyka tam zdržuje kolik a tak...
    ALMAD
    ALMAD --- ---
    BTW můj typický jednoduchý dotaz do tabulky trvá 0.00 sekund(...)
    to beru jako finální argument, proč chci bastlit webové aplikace v Céčku místo v PHP(....)


    Cely svet je plny jednoduchych dotazu co trvaji 0.00 sekund (ano, nejspis proto ze se index vejde do pameti a na jednom nodu), takze chceme bastlit v Ccku, protoze...err...to dava smysl.


    XCHAOS: Mel bych takovy dotaz...kdyz si delas tu predstavu...jakej ze tam byl vlastne engine?

    Me ponekud desi ze tu hazes "nenavidim externi enginy, mam rozbitou tabulku a haze mi to chybu" hlasky a pri tom ani nenapises, co za engine v mysql si pouzil.

    Jakoze vzhledem k tomu, ze mysql engines jsou od sebe tak daleko, ze jsou to de facto separatni databaze (maj jiny vlastnosti, jiny zpusoby optimalizace, jiny modely zamykani, ...), tak to je podobna kravina, jako kdyby na zaklade toho ze mu pro nejakej pripad maly appky zralo vic parsovani na frontendu nez pristup k datum a vubec neresil nejaky skalovani (tj. jak moc muze pridavat dalsi fe vs. db stroje) vyvozoval, ze ma cenu to psat v rychlejsim fe jazyce, co bude radove pomalejsi na vyvoj.

    Oh wait.
    REDGUY
    REDGUY --- ---
    XCHAOS: ale já právě počítal s tím, že by se v takovýchto tabulkách pak místo číselných primárních klíčů používaly přímo pointery - nejde jen o pouzivani pointeru. Jde o to, ze pokud mas primej pristup do pameti, muzes pouzivat mnohem sirsi skalu datovej struktur nez nabizi SQL a tudiz je pitomost se na nej omezovat.
    REDGUY
    REDGUY --- ---
    XCHAOS: Výrazným rysem samotného jazyka C je zpětná kompatibilita - Hello, Captain Obvious. Coz je bohuzel tvrzeni v podstate o nicem. Jednak proto, ze podobne zpetne kompatibilnich je i spousta dalsich jazyku, druhak proto ze samotna kompatibilita jazyka je ti uplne na houby, kdyz se ti knihovny meni pod rukama a tu a tam se dokonce zmeni i format executable.

    ale upřímně: nevím, jak to tam je se zpětnou kompatibilitou reálně - my vime 8))

    Pokud vím, tak javové aplikace ani nebyly přenositelné mezi mobilními telefony a webovými browsery) - coz je podobne pitome tvrzeni, jak rikat ze Cckove programy nejsou prenositelne mezi Arduinem a Linuxem. Viz vyse, problem neni v jazyce, ale v knihovnach a v tom ma C problem jako vsichni ostatni.
    XCHAOS
    XCHAOS --- ---
    REDGUY: ...ale já právě počítal s tím, že by se v takovýchto tabulkách pak místo číselných primárních klíčů používaly přímo pointery... přesto by ale kód vznikl kompilací "human readable" SQL dotazu. akorát by např. to id v takovéto tabulce pochopitelně byl vždy přímo pointer, a relace by byly přímo do paměti.
    XCHAOS
    XCHAOS --- ---
    REDGUY: to je samozřejmě zajímavá teorie... teď teda nezbývá počkat, než mi nějaká SQL databáze ukáže různé DESCRIBE pro různé obsahy tabulek. zatím mě vždy přišlo, že na to má vliv jen struktura dotazu a struktura klíčů u tabulek.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: připouštím, že nemám představu, jak uvnitř vypadá databáze... ale na základě chyb, které mi hází MySQL, si postupně nějakou dělám :-)
    XCHAOS
    XCHAOS --- ---
    TENCOKACISTROMY: kvůli té životnosti jsem se přeorientoval na Linux/POSIX - víceméně, rozkoukávám se v unixovém světě cca od roku 1994, a i když nějaké použitelné výsledky mám teprve tak asi tak maximáně posledních 10 let, tak to, co bych naprogramoval v roce 1994 např. v Bashi (nebo i v Céčku, možná v Perlu), to by mi běhalo (šlo přeložit) nejspíš i letos. Tedy důvodem proč jsem se přeorientoval, byla právě potřeba nadčasové platformy, která přežije i výměnou generací hardware (takových výměn hardware/OS jsem v té době měl za sebou už několik - a pochopitelně mi naštvalo, že cokoliv jsem do té doby naprogramoval, se vždy stalo bezpředmětné...)

    Výrazným rysem samotného jazyka C je zpětná kompatibilita - specifikace C99 je podle mých zkušeností zpětně kompatibilní s C89, a to zase bylo víceméně kompatibilní s původním K&R C

    Něco podobného slibovala Java - ale upřímně: nevím, jak to tam je se zpětnou kompatibilitou reálně. (Pokud vím, tak javové aplikace ani nebyly přenositelné mezi mobilními telefony a webovými browsery)
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: A me jednou neco jinyho spadlo na segfault! Hruuuuza!
    XCHAOS: Ano, resit zivotnost SW v desitkach let v prostredi/obdobi, kdy po deseti letech mas problem sehnat HW na kterym to muze bezet mi prijde absolutne mimo. Neco jinyho by bylo, kdyby si byl i vyrobce dotycnyho HW, tak by to davalo smysl.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Nemam. Pokud mas data natolik jednoduchy ze je muzes mit ve vlastni pameti ve vlastnim procesu, nemas pouzivat SQL.
    Pokud je nemas natolik jednoduchy, tak si ten pointer nevymyslis.
    Mne to cim dal tim vic zni jako ze bud pouzivat MySQL na neco na co to je zbytecny, nebo nemas predstavu jak vypada uvnitr databaze (a tudiz si to stylem sobe vlastnim predstavujes jak hurvinek valku).
    REDGUY
    REDGUY --- ---
    XCHAOS: fakt mě přijde, že toto jsou tak samozřejmé věci, že o nich prostě nemluvím. - me spis prijde ze o tom nemluvis proto, ze to je problem 8))

    tam samozřejmě kapituluju - no slava.

    ovšem o tomto typu optimalizace mi např. DESCRIBE u MySQL neříká nic - jak, nerika? Rika. Tedy, nevim jestli MySQL pri optimalizaci bere do uvahy velikosti a obsahy tabulek, ale pokud ano, tak vysledek DESCRIBE ti rika, jak bude dotaz vypadat pro AKTUALNI data. Neni duvod proc by ti rikal, jak by se dotaz provadel kdyby v tabulkach byly uplne jiny data.
    REDGUY
    REDGUY --- ---
    XCHAOS: ale dostat rovnou pointery do paměti - podivej, pokud mas rovnou pointery do pameti, tak se fakt nemusis srat se SQL datovym modelem kde jsi omezenej na hejno tabulek. Kdyz to mas v pameti, tak proc delat nejakou bizarni relaci mezi tabulkama Users, Posts a UserPosts, kdyz muzu proste muzu mit objekt User kterej bude mit pole/list/whatever pointeru na objekty Posts. Proste pouzijes normalni datovy struktury urceny pro praci s datama v pameti.
    Kliknutím sem můžete změnit nastavení reklam