• ú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
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: tak jako sorry, ale tohle je zase flejm pro flejm... úplně zbytečný.

    pochopitelně se o počítadle referencí (reference counter) mluví vždy v souvislosti se syntaktickými konstukcemi jazyka, ve kterém jsou ony reference na cosi vytvářeny a v souvislosti s okolnostma, kdy se tím počítadlo hejbá nahoru nebo dolů - vykládat o tom, že se v tom nemusí mluvit v souvislosti s takovými konstrukcemi, je bohapustý flejm - potom samozřejmě v každém jazyce můžeš použít jakoukoliv konstrukci, a samozřejmě je vymalováno, že jo.

    Pokud jsou počítadla odkazů v C++ v zásadě špatně, pokud nepoužiješ nějaký speciální typ pointerů, u kterého se při opuštění aktuální scope zavolá destruktor, který by stav počítadla snížil - pak sorry, tohle je problém, který si musí C++ programátoři nějak vyřešit sami a mě do toho netahat. v žádném jiném vyšším jazyce se takový pojem pokud vím nepoužívá (protože je to tam jaksi automatické, to snížení toho reference counteru, když reference opustí scope, že ...). (Příkladem jazyků, kde očekávám, že je tohle řešené automaticky, je Python nebo Java - pokud se mýlím, tak mě TEĎ opravte, teď to nebude chytání za slovíčko...)

    O tom je to "ne nutně C++" které je uvedené v názvu - o některých programátorských konstrukcích lze diskutovat, aniž by člověk nutně věděl, jak je to udělané v C++ a jak se tomu tam říká.

    ... a u té složitosti BINÁRNÍHO B+ stromu (diskutovaná datová struktura byla BINÁRNÍ B+ strom, ne obyčejný) šlo o složitost přidávání prvku - ne procházení. procházení musí být pochopitelně logaritmické. A přidávání je jediné, co na té datové struktuře nebylo jasné, a proč jsem se v první řadě chtěl s někým radit (a opět - složité na tom vlastně bylo jen to, že pro to přidávání nechci použít rekurzi...).
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: A je to tu zase, nemuzu si pomoc. Vsichni na svete rikaj refcounty jen mechanismu ze se pocitaj reference (nejak jakkoliv) a kdyz se dojde na 0, tak se objekt automaticky smaze. A ty, tapajici v terminech a hledajici upresneni, se tu aktivne hadas ze to je blbost a ze se tim mysli vlastne neco jinyho. Nema cenu se s tebou bavit, jakkoliv o cemkoliv, sorry.


    XCHAOS: Ne, tim se (ted sem koukal) maskuje to, ze ty rikas B+ strom necemu, co neni B+ strom a vesmes to tak ani nevypada. Ale usmyslel sis ze to je B+ strom. Redguy zareagoval podobne jako ja na refcounty, at probuh nepouzivas zavedeny terminy pro neco JINYHO nez sou zavedeny a rikas tomu klidne Maruska a ne B+ strom, protoze to B+ strom neni. Refcounty jsou jen veci alokatoru, a B+ strom nema "primerenou slozitost O(N)" protoze by to nebyl B+ strom. Howg.
    REDGUY
    REDGUY --- ---
    A neco trochu konstruktivniho - mas nejaky navrh jak budou fungovat tvuj novy alokator, ten s "remember" a "forget"? Fakt by me zajimalo jak si to predstavujes. Nemusis ukazovat implementaci, staci popis funkce pro uzivatele?
    REDGUY
    REDGUY --- ---
    XCHAOS: v podstatě to tady všichni zahráli do autu, že je to nepodstatné a nudné téma, a že by taková datová struktura stejně byla skoro nanic - ale prdlajs. Prosim, neprepisuj historii. Jestli doslo k nejake shode, tak ze Maruska, v te podobe jak jsi ji prezentoval, by byla nanic. Mimochodem, jak to s ni vypada? Uz jsi ji dopsal, abys nam, nevericim tomasum, ukazal jak svele funguje a jak hluboce jsme se mylili kdyz jsme tvuj uzasny design kritizovali?

    a nevím, kdo tu prezentoval, že refcounty jsou zdaleka nejlepší strategie správy paměti, a že C++ je nejlepší prakticky na všechno - ja to taky nevim. Kdo to tady prezentoval? Konkretne, kdo a kdy? Nebo se jen oponentum snazis podsunout neco co nikdy nerekli?
    REDGUY
    REDGUY --- ---
    XCHAOS: hloupý kdo neví, blbější, kdo se nezeptá - bezpochyby. Ale kdyby situace byla "XChaos nevi co jsou refcounty, mysli si ze to je neco jineho, napise svuj nazor, ostatni mu reknou ze to chape spatne a XChaos rekne aha, tak takhle to je!" nereknu ani slovo a fandim ti. To co se ale deje je neco uplne jineho: placnes nejaky nesmysl (at uz skutecny, nebo plynouci ze zmatene terminologie), nekdo ti rekne ze to tak neni, ti reknes ze je, nekdo ti rekne ze ne a ukaze ti na dokumentaci ukazujici ze nemas pravu, ty znova vykrikujes ze nenene, ze pravdu mas ty a cele tohle kolecko se nekolikrat zopakuje az konecne, mozna, po x-te iteraci uznas ze jsi placal nesmysly. Mozna. To neni "Zvidavy clovek, ktery se chce naucit veci co nezna", to je "Trouba, co nedokaze uznat ze neco spatne chapal a trva minimalne tejden nez se mu vtluce do hlavy ze mele nesmysl a stejne za pul roku prijde znovu s tim samym nesmyslem". Tohle je pattern kterej se znovu a znovu a znovu opakuje ve vetsine diskusi, kterych se vidim te ucastnit. Chapu ze mas emocialni blok akceptovat cokoliv co ti pisu (i kdyz pravda, odmitnout radu "podivej se jak to funguje v OSX" slovy "to nepotrebuju, protoze vim jak to fungovalo v neexistujicim 16-bitovem pra-MacOS" je extrem s jehoz chapanim mam docela problem), ale to neni jen o me, presne to same predvadis ohlede rad od lidi, kteri na rozdil ode me maji silu ty to znovu a znovu vysvetlovat aniz by si z tebe zaroven delali srandu, jako treba Davidowitch.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no tedy POUŽITÍ refcountů V RÁMCI MECHANISMů nějakého jazyka skutečně vyžaduje, aby o počítadle referencí věděl operátor přiřazení - ano, na tom trvám. Nestačí, aby to řešil např. alokátor.

    Samozřejmě, pokud mluvíš o RUČNÍM, explicitním použití nějakých abstrakcí, tak potom samozřejmě v každém jazyce můžeš použít cokoliv, to samozřejmě :-) tady se ale bavíme o tom, které mechanismy jsou přímo zabudované do kterého jazyka (resp. jeho kompileru/interpreteru) nebo alespoň já se o tom domníval.

    (To bys potom mohl mluvit o tom, že nějaký ten pra-fortran vlastně uměl pracovat se stringy, protože uměl pracovat s poli integerů, takže tam samozřejmě šlo vytisknout string, apod. :-)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: nic jako Maruška neexistuje, především :-) je to nějaký vás výsměšný pojem, kterým maskujete, že jste v podstatě ani vy nedostali nápad, jak sestavovat binární B+ strom s přiměřenou složitostí - třeba O(n), ale ideálně daleko lepší. v podstatě to tady všichni zahráli do autu, že je to nepodstatné a nudné téma, a že by taková datová struktura stejně byla skoro nanic (což rozhodně není pravda - i když je fakt, že jsem o ní přemýšlel hlavně předtím, než jsem se dozvěděl, že na současných PC architekturách je realloc() zřejmě implementovaný bez nutnosti zdlouhavě kopírovat rozsáhlé bloky paměti - což rozhodně mění situaci, když se bavíme o dynamických datových strukturách)

    a nevím, kdo tu prezentoval, že refcounty jsou zdaleka nejlepší strategie správy paměti, a že C++ je nejlepší prakticky na všechno.... takže jsem bral jako hotovou věc, že je to součástí většiny implementací... ale teď se dovídám, že je na to potřeba použít nějaký rozšiřující toolkit, jinak tam k dispozici nejsou... takže ono to je celé složitější.

    skutečně mi to připomíná situaci v řadě jiných klubů, kde třeba 2-3 roky mluvím o něčem, o čem se v té době běžně nemluví, a ani přesně nevím, jakým buzzwordem to média označí, když o tom mluvit začnou - viz např. "smart grid" v energetice, apod.

    chápu, že ustálené odborné pojmy a "buzzwordy" provařované v médiích jsou něco trochu jiného - ale zrovna "smart pointer" mě přijde spíš jako buzzword, než nějaký ustálený odborný termín - všechny reference na objekt např. v Pythonu jsou tím pádem (nejspíš) "smart pointery" - ale určitě tomu tak nikdo nebude říkat - jsou to prostě reference na objekt a tečka, že jo.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: No, hmm.. ja bych ti to s tim upresnenim terminu a tak veril, ale to bys nesmel po dvojim upozorneni ze nemas pravdu a pletes dve veci dohromady potreti trvat na tom, ze refcounty potrebujou operator =, vis.
    XCHAOS
    XCHAOS --- ---
    REDGUY: ve skutečnosti - chápat nějaký koncept a netušit přesně, jakým pojmem je označován, to podle mě není žádná ostuda.

    a to, že bych nějaký pojem přiřadil chybně, to se zas tak často nestává. (Rozhodně se to nemůže stát někomu, kdo jen trolluje a sám se prezentuje tak, že je především chytřejší než všichni nebo většina ostatních, a tak ani nic přispívat nemusí).

    (nenapadlo tě někdy, že net obecně (a NYX zvláště) používám jako prostředí k ověření svých různých koncepcí a nápadů, či právě k ověření a upřesnění používané terminologie ? hloupý kdo neví, blbější, kdo se nezeptá... a já tedy nikdy nepracoval s internetem tak, jako že publikované příspěvky jsou nějaké zjevené pravdy, ke kterým se už nikdo nesmí vyjadřovat a opravovat ostatní, když se mýlí, nebo tak... právě naopak... pro mě je většina debat otevřených...)
    XCHAOS
    XCHAOS --- ---
    REDGUY: dobrá, byl to 32bitový procesor - ono to je fakt dlouho a já si negooglím všechny detaily předtím, než něco napíšu - jenže zřejmě neměl mechanismy ochrany paměti při multitaskingu, či co - prostě měl kooperativní multitasking, a aplikace musely ze všech smyček volat nějakou službu systému - a hlavně: při práci s většími bloky paměti se snad prý musely volat nějaké funkce pro aktualizaci obsahu bloku v paměti (podobně jako v DOSu).

    prostě navzdory honosnému GUI byly první Macintoshe programátorský prý dost hrozné. Já o tom bližší informace nemám - nikdy jsem pro tu platformu neprogramoval - ale min. ten kooperativní multitasking bývá často zmiňován
    REDGUY
    REDGUY --- ---
    XCHAOS: alokační strategii v původním 16ti bitovém Mac OS (tedy před Mac OS X), sám jsem tady na to odvolával - mimochodem, ted mi to doslo - na preOSX Macy nejsem ani zdaleka expert, ale pokud mluvis o " 16ti bitovém Mac OS", neni to jen dalsi dukaz ze opet placas o necem cemu nerozumis, protoze uz prvni Macintosh bezel na 68000, tudiz je pitomost mluvit o nem jako o 16bitovem? LOL. Tohle je cim dal tim lepsi 8)
    REDGUY
    REDGUY --- ---
    XCHAOS: ale nechápu, jak bys mohl nějakého programátora donutit dělat to manuálně: vznikaly by v tom obtížně debugovatelné chyby, když by někdo zapoměl ten kód pro snížení nebo zvýšení refcountu připsat, nebo naopak při změně kódu umazat, apod - HAHAHAHAHAHAHAHAHAHAHA. Kdybys nebyl nepoucitelnej trouba odmitajici jakoukoliv dobrou radu, misto HAHAHAHAHAHAHAHAHAHAHA bych ti tady napsal "Podivej se na OSX a iOS, tam presne tohle maji a funguje jim to velmi dobre, diky rozumnemu designu, zahrnujiicimu X, Y a Z." Ale protoze jsi trouba ktery se nepotrubuje koukat na OSX protoze "prece vi jak to fungovalo v původním 16ti bitovém Mac OS", tak si to necham pro sebe 8))
    REDGUY
    REDGUY --- ---
    XCHAOS: takže kde je celou dobu problém ? - v tom ze, jak se prave ukazalo, XChaos _zase_ nevi jak se rika ruznym vecem a vymysli si vlastni terminologii - a aby to bylo zabavnejsi, tak nevymysli vlastni slova, ale svym predstavam nahodne prirazuje existujici terminy ktere zahledl z rychliku a pak se divi, ze mu nikdo nerozumi.

    Cili, normalni situace ve vetsine klubech kam prispivas 8)
    REDGUY
    REDGUY --- ---
    XCHAOS: Objektive C ovšem není C/C99, takže celé je to dost mimo mísu. - ale houbelec. Jasne jsem v te zprave psal, ze rozdily mezi O-C a C/99 se netykaji toho jak tam funguje refcount a ze to co podle tebe brani pouziti refcountu v C/99 plati na O-C taky - a presto tam funguje. Ze ty jsi ji necetl a tvoje neustale obvinovani ostatnich ze "nectou tvoje zpravy" je jen projekce vlastniho problemu? 8)

    Refcounty nejsou záležitost alokátoru, ale operátoru přiřazení - HAHAHA.

    jinak ano, moje alokační strategie se už kdysi v DOSu nápadně podobala alokační strategii v původním 16ti bitovém Mac OS (tedy před Mac OS X), sám jsem tady na to odvolával - takže nevím, proč mi najednou povýšeně radíš, ať si to "nastuduju" - Chapu spravne ze rikas "Nemusim se koukat jak funguje alokace v OSX, protoze si myslim ze vim jak fungovala pred dvaceti lety v sestnatibitovem pra-MacOSu"? ROFL. Krapet podcenujes vyvoj JabkOSU 8)

    Jednou za cas jsem konstruktivni a dam ti dobrou radu, podivat se jak lidi co tomu fakt rozumej resi problemy ktery se snazis resit ty a pro tebe je to skoro urazka? No, dost to o tobe vypovida.
    REDGUY
    REDGUY --- ---
    XCHAOS: myslím, že ani nemáš moc představu, jaký design jsem zahodil a jaký chystám - mam velmi dobrou predstavu co jsi zahodil pokud je to to, o cem jsme se tady pred par rokama hadali. Jasne si pamatuju ty bugy co jsem ti v tom onehda nasel 8) A pokud jsi od te doby vymyslel a zahodil jeste neco jineho? Bah.
    A co chystas? Ano, to nevim. Uz dvakrat jsem se te na to ptal a vypadlo z tebe cosi velmi, velmi neurciteho. Proto mi nezbyva nez extrapolovat na zaklade minulosti. Samozrejme, budu velmi rad kdyz nam tvuj novy vynalez podrobne vysvetlis. Takze?
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Hele, mne je to relativne burta, mne zaujalo prohlaseni ze Ccko neumi refcounty, a pak teda to ze si evidentne pod refcountama predstavujes neco jinyho nez ja. Shodli sme se, doufam, ze Ccko refcounty umi, akorat zpusobem kterej tobe prijde nanic (manualne). Jestli to budes zkouset osrat nejakou makro magii tak have fun, ale dokud z tebe nevypadne alespon alfa verze nejaky specifikace, tak se o tom nebudu bavit. Debata o Marusce mne zcela vycerpala.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no a tady se dobíráme k tomu, že o co se snažím, je naučit C něco, co "nemá v základních knihovnách".

    jako to dělá boost pro C++, JQuery pro JavaScript, apod. - nic nového pod sluncem.

    jeden takový pokus pro C byla knihovna Glib (nezaměňovat s libc / glibc). mě osobně ten pokus přišel zmatený a nedotažený.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: No, nevypadalo to tak.

    C++ to umi, jen proste nema smartpointery v zakladnich knihovnach. Casto se pouziva boost.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no ano, já vím co je to refcount.

    ale nechápu, jak bys mohl nějakého programátora donutit dělat to manuálně: vznikaly by v tom obtížně debugovatelné chyby, když by někdo zapoměl ten kód pro snížení nebo zvýšení refcountu připsat, nebo naopak při změně kódu umazat, apod.

    a překvapuje mi, že C++ neumí samo počítat reference na objekty: tím v mých očích zase mizí jedna ze (zjevně domělých) předností... jak říkám, C++ pořádně neovládám, tak mu možná přisuzuju nějaké mýtické vlastnosti, které vůbec nemá
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    Podivej, refcounting je proste technika kde si nejak pocitas reference a kdyz dojdou na 0, tak ten objekt na kterej to pocitas smazes. Jestli se to dela manualne nebo automaticky je naprosto nerelevantni. Ja sem mel z tve poznamky pocit, ze nejak nejde udelat to smazani (nevim proc, proto sem se ptal).
    A jako priklad knihovny, ktera pouziva manualni pristup jsem daval COM, ktery opravdu ma AddRef a Release metody, ktere se daji explicitne volat. Pochopitelne, pro implementaci single threaded aplikace to neni az tak uzitecny, ale to neznamena, ze to "nejde".

    To co myslis ty, ze se to pocita automaticky, je typicka implementace neceho cemu se rika smart pointer. Ty pak, v typicky implementaci, pocitaj reference za tebe a na konci to smazou za tebe. (A to logicky v C++ nejde, o tom se nikdo nebavi).
    Kliknutím sem můžete změnit nastavení reklam