Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2015-04-28

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
01:56 ilbot3 joined #divine
01:56 Topic for #divine is now DIVINE: A Parallel LTL Model Checker (http://divine.fi.muni.cz) | http://irclog.perlgeek.de/divine/
06:12 mornfall xstill: hm, to nový hasher API je dost divoký
06:25 mornfall spito: já tento týden asi taky nemůžu
06:51 mornfall (jinak teda hashser a hashsing v tom komentáři...)
06:51 mornfall xstill: proč je to vlastně rychlejší takhle?
06:52 xstill mornfall: no rychlejší je to proto, že nekopíruješ listy který už tam jsou do extra blobu
06:53 xstill to API je divoký no, ono by se dalo trochu uklidit
06:53 xstill ty překlepy jsou v tom examples patchi?
06:53 mornfall ty první jo, ty druhý v tom brick-hashset
06:54 xstill jo ty druhý jsem pochopil, opravím to po volbě
06:59 mornfall xstill: proč to nejde řešit konverzním konstruktorem?
07:03 mornfall je teda pravda že by uvolňování tý paměti mohlo dost bolet
07:03 mornfall celkově to freeTempValue je ten nejhorší kus toho celýho
08:02 xstill mornfall: ten allocator v LLVM je doufám před tím tagem ve skutečnosti
08:29 xstill mornfall: konverzní konstrukto/cast operátor by teoreticky šel, ale to zase potenicálně přidává další těžko předpokládatelné konverze. A ono stejně freeTempVal je potřeba, takže si moc nepomůžeš
08:30 xstill dalo by se udělat to, že ty identické konverze se tam doplní "samy"
08:33 mornfall není, jak by se tam dostal?
08:34 xstill co není?
08:34 mornfall před tagem
08:34 xstill to je docela chyba
08:34 mornfall jakto?
08:34 xstill tak protože by bylo hezký mít opravu toho segv už v tomhle release no
08:35 mornfall takových věcí co by bylo hezký
08:35 mornfall zítra může být další release, však je to jedno
08:35 xstill aha teď koukám, že ten tag je podstatně dřív
08:38 mornfall jako ideální by bylo kdyby se ta konverze provedla 'in-place' až po úspěšném vložení, ale ono se to do toho místa nevejde
08:39 xstill no to nejde v concurrent
08:39 mornfall druhá možnost by byla vrazit insert-u jako (volitelný) parametr funkci
08:40 mornfall v concurrent to jde; nejde to kvůli místu
08:40 xstill no nejde, když máš AtomicCell tak ti na to může okamžitě někdo hrábnout, není tam zámek
08:40 mornfall to nevadí
08:40 xstill jakto?
08:41 mornfall protože se to může chovat úplně stejně a vyměnit buňku je atomický
08:41 xstill asi nechápu jak bys chtěl udělat aby se to chovalo stejně
08:43 mornfall to je jedno, stejnÄ› se to tam nevleze
08:44 mornfall (jedině že by se ten leaf vždycky alokoval ale jen někdy kopíroval, potřeboval by ale ještě jeden bit z pointru a pak je teda otázka jestli se může stát že se ten původní blob dealokuje moc brzo)
08:45 mornfall ale to už asi zase není o moc lepší než ten freeTempVal hack
08:46 mornfall s konverzním konstruktorem bys teda nutně freeTempVal nepotřeboval, ta hodnota se může se chovat jako auto_ptr
08:47 mornfall tzn. reálně ten blob drží jen poslední zkonstruovanej Leaf (to je ten kterej skončí v tabulce)
08:47 mornfall pokud se tohle neprovede tak ho destruktor uvolní
08:47 mornfall *ale* to stejně nejde protože CAS
08:47 mornfall hm, vlastně CAS by možná nemusel nutně vadit
08:48 mornfall když se povede CAS tak se destruktor zavolá na prázdnej Leaf, když se nepovede tak se zavolá na 'plnej' Leaf
08:49 xstill hm, teď na přednášce se nad tím asi nedokážu dostatečně zamyslet
08:50 mornfall pokud do insert-u pošleš MemorySlice kterej se v momentě volání cell.store(...) konvertuje na Leaf a ~Leaf bude uvolňovat paměť tak by to mělo fungovat
08:51 mornfall (asi by bylo dobrý zakázat kopírovací konstruktor Leaf-u)
08:51 mornfall (tzn. tohle bude fungovat pokud se někde nevolá ~Leaf)
09:00 xstill ale jak ten ~Leaf pozná, jestli CAS prošel?
09:07 mornfall no, když prošel tak bude null
09:07 mornfall a když neprošel tak nebude null
09:08 xstill a jak ho vynuluješ? budeš požadovat aby ten typ definoval operator=( nulltpr_t )? a navíc tak, že neuvolní paměti? to mi příjde o dost úchylnější než freeTempVal
09:08 xstill krom toho Leaf se nemůže umět uvolnit, sám protože na to nemá pool
09:09 xstill (proto je tam celá ta šaráda s prvním parametem freeTempVal)
09:10 mornfall jo, ten pool je horší... null bude proto že se tam ten null swapne z prázdný buňky žejo
09:12 mornfall ale v podstatě to znamená že freeTempVal je jen divnej název pro destroy()
09:13 mornfall a to čistě proto, že ~T nemá pool
09:19 xstill asi nechápu kdo ho tam swapne
09:19 xstill a teda jestli se to má jmenovat freeTempVal nebo jinak, to je mi celkem jedno…
09:19 mornfall compare_exchange_strong
09:19 mornfall hm, až na to že se to teda bere hodnotou a ne referencí
09:20 mornfall a ještě se to možná navíc kopíruje
09:20 mornfall ale to je lehce řešitelný
09:21 xstill jak?
09:21 mornfall v podstatě bych asi přidal destroy do hasher-u a zbytek bych řešil konverzníma konstruktorama, s tím že se musí typově parametrizovat insert/has/...
09:22 mornfall tak že tryStore dostane referenci
09:22 mornfall místo hodnoty
09:22 mornfall ale není to potřeba řešit protože destroy musí být explicitní tak jako tak
09:22 mornfall (kvůli pool-u)
09:23 xstill proč by tryStore musel dostat referenci?
09:24 mornfall protože by se tím pak v insertCell vynulovala hodnota
09:24 mornfall vezmeš nějaký T t, nacpeš to do tryStore, pokud tryStore prošel v t je T(), jinak se t nemění
09:24 mornfall tzn. ~T by se chovalo správně
09:25 xstill ale tak to destroy se dá volat pořád tak jak teď freeTempVal?
09:25 mornfall dá (ale má to tu nevýhodu že destroy() by muselo explicitně volat ~T, pro T který mají destruktor a nejsou svázaný s pool-em)
09:26 mornfall tzn. lepší asi bude udělat to tak aby ~T fungovalo normálně a destroy() existuje pokud ~T nejde rozumně napsat (=> pool)
09:26 xstill ale pořád mi není jasný jak chceš to t nahradit za T() pokud CAS projde, když on to neudělá
09:27 mornfall takž tryStore OK -> nic, tryStore !OK -> destroy( t ), t.~T() (to druhý implicitně)
09:27 mornfall jakto že on to neudělá?
09:27 mornfall není to podstata swap-u, že ty hodnoty swapne?
09:28 mornfall (jo, leze do toho to Tagged, to je co jsem myslel tím kopírováním, a to by mohl být problém)
09:30 mornfall nicméně to vlastně ničemu nevadí, z hlediska konstruktorů a destruktorů je to čistě o tom že se jich volá víc než je nutný
09:33 xstill no ale CAS bere desired hodnotou, takže to jaksi nemůže swapnout
09:37 xstill navíc teda to co se má dávat do atomic by mělo být TriviallyCopyable, což mimo jiné znamená, že má triviální destruktor
09:38 xstill a kontroluje se to (_Atomic cannot be applied to type 'B' which is not trivially copyable)
09:39 mornfall nojo, z toho TriviallyCopyable teda taky plyne že sice compare_exchange_* sám od sebe desired nevynuluje ale nic ti nebrání udělat memcopy z T() do desired
09:39 mornfall ale je to hlavně celý jedno
09:41 mornfall řešit ty destruktory má smysl jen pro FastAtomicCell
09:41 mornfall (kde T není v atomic-u a může být teda žádoucí nekopírovat to víc než je nutný)
09:43 mornfall a tam se do toho ani nemotá Tagged (protože vlastně ani nemůže)
09:43 mornfall takže v tryStore v FastAtomicCell by místo value = v mělo být std::swap( value, v )
09:43 xstill jenže FastAtomicCell používat nechceme
09:43 mornfall no my ne, ale to neznamená že nemá fungovat dobře
09:44 xstill jako podle mě je ten destroy nejrozumnější řešení
09:44 mornfall (jinak rovnou smazat)
09:44 xstill tak to jistě může fungovat dobře
09:45 mornfall furt teda platí 11:26 (@ mornfall ) tzn. lepší asi bude udělat to tak aby ~T fungovalo normálně a destroy() existuje pokud ~T nejde rozumně napsat (=> pool)
09:46 mornfall až na to že ~T nejde rozumně napsat ani když Cell == AtomicCell
09:46 mornfall (nejen protože pool)
09:46 mornfall (teda určitě je spousta typů kde ~T = nic je OK a destroy nemusí taky udělat nic)
09:47 xstill ok, já se na to podívám
10:22 xbarnat joined #divine
10:23 xbarnat preklad na aure mi skoncil takto: /home/xbarnat/divine-3.3.2/external/nanodbc/nanodbc.cpp:29:17: fatal error: sql.h: No such file or directory
10:24 xbarnat kdyz jsem vypnul sql v configuraci, preklad prosel, nechybi tam nejakej test v configure?
10:33 mornfall spíš chybí include_directories v ODBC_FOUND větvi
14:03 xstill hm, na auře nás dost utlačujou
14:04 xstill zabili mi to po alokování 160G :-/
14:12 mornfall nic moc no
16:36 xstill hm, jsem netušil, že můžu napsat něco jako void foo( B const& ), což jestli dobře chápu je něco jiného než foo( const B & ) ačkoli teda úplně nechápu čím se to liší významově
16:39 xstill hm, to nechápu
16:41 xstill prej to není totéž, ale podle šablonové instanciace to zase je totéž (http://pastebin.dqd.cz/uOrs/), WTF
16:54 xstill hm, ono jde vytvořit explicitně rvalue referenci: B &&rtb = B();, to je taky lehce divný
16:57 xstill spito: to store v AtomicCell je dost divní (aj to použití v konstruktoru)
17:12 mornfall divný*
17:13 mornfall počítám že B const & existuje kvůli konzistenci s B const *?
17:13 mornfall (ale všechny reference se chovají jako B const &, protože stejně není operátor kterej by je uměl měnit)
22:14 xstill no ne, problém je že B const& se chová jako const B&, kdyby se chovala jako B &, tak bych to ještě dokázal pochopit (jak říkáš kvůli té konsistenci s pointry)

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary