Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2015-11-15

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

All times shown according to UTC.

Time Nick Message
09:09 xstill mornfall: tak buď opravit, nebo smazat, nemá moc smysl to tam mít takhle a tvářit se, že je to v pořádku. Nebo se alespoň netvářit, že ten destruktor volá join
09:12 xstill aj ten mixin je navíc blbě, protože zdestruuje potomka zatímco mu běží vlákno
09:12 xstill takže jediné jak to udělat je dát tam lambdu, ale to z toho uděláš spátky std::thread
10:06 xstill hm, clang nám zrovna nepomáhá s čitelností protipříkladů tím, že inlinuje i na -O0
10:11 xstill on inlinuje i s -fno-inline
10:33 mornfall zpátky* ... a nemá smysl to mazat dokud se to používá a přepisovat kvůli tomu kód kterej se i tak smaže
10:34 mornfall ono to zmizí časem samo a tam kde se to používá je to OK
10:34 mornfall std::~thread prostě volá terminate() když ten thread ještě běží, může se to udělat stejně
10:35 mornfall std::thread::~thread
10:41 xstill no, i když zavoláš terminate tak je to pořád špatně, protože ten thread běží nad zdestrovaným objektem (pokud si ten potomek definuje něco dynamicky), jen rozdíl je, že to možná stihne dřív spadnout na terminate než na segv
10:42 xstill víš že se ti pořád weakmem patche válí na maillistu? ty do mainline
10:54 mornfall no ne, ten terminate znamená že nesmíš volat ~thread když ještě ten thread běží, to nemá být 'korektní' ukončení
10:56 mornfall nevim sice proč přesně to tak je, ale má to stejný chování (pokusít se zničit běžící thread je undefined behaviour, asi, i když je to std::thread)
10:56 mornfall pokusit*
10:58 xstill ok, stejně bychom se toho brick::Thread měli časem zbavit…
11:01 mornfall jaj, ono je to s těma vláknama ještě mnohem horší, protože ~thread se může volat protože ti rámcem kde vznikl prolítne výjimka
11:02 mornfall takže jakmile máš cokoliv co něco dělá ve funkci která vyrobila vlákna (jinýho než join()), tak musíš chytat úplně všechno
11:02 mornfall (a v catch udělat join)
11:04 mornfall std::async to nějak řeší
11:06 mornfall jo, používá detachovaný thready
11:07 mornfall (a synchronizaci na ukončení si řeší interně)
11:07 mornfall to skoro vypadá že joinable thready jsou v C++ úplně nepoužitelný
11:07 xstill to je docela veselý, zas ono je otázka co jinýho by to mělo dělat když tam prolítne výjimka, ten thread nemusí být úplně dočkatelnej
11:08 xstill tak jsou použitelný pokud je máš v objetu a ten si to nějak řeší
11:08 xstill jen ten objekt musíš udělat lím než my v bricsu
11:10 mornfall no to právě moc nejde :) resp. nejde z takovýho objektu dědit
11:10 mornfall a final v C++ jaksi není
11:11 xstill ale je http://en.cppreference.com/w/cpp/language/final
11:13 mornfall ha
11:13 mornfall to jsem si vůbec nevšim že se tam dostalo
13:43 xstill mornfall: máme možná chybu v atomických sekcích: řekměme, že foo zavolá __divine_interrupt_mask, a následně provede viditelnou akci a zavolá bar a po jeho skončení provede další viditelnou akci, bar zavolá __divine_interrupt_unmask a skončí (neprovede žádnou viditelnou akci), pak si myslím, že obě viditelné akce v foo budou splácnuty dohromady, přesto, že mezi nimi byl volán unm
13:43 xstill ask
13:46 mornfall no nevim... to se ti povedlo realizovat, nebo to je hypotéza?
13:46 xstill to se tě v podstatě ptám jestli to chápu správně jak to funguje, ale tak můžu to zkusit.
13:47 mornfall ale jo, stát by se to možná mohlo
13:48 xstill existuje vlastně dneska ještě nějakej důvod v userpsace, kde by vadilo aby ty masky byly rekurzivní (ve smyslu slušnýho rekurzivního mutexu, kterej pokud n-krát zamkneš, tak ho musíš n-krát odemknout)
13:49 mornfall krom toho že to nejde implementovat asi ne :)
13:50 mornfall je teda otázka proč by ten reference counting neměl řešit userspace
13:51 mornfall pokud to má nějak smysluplně fungovat, bude interrupt_mask asi stejně muset vyrobit nějakej objekt kterej se bude muset předávat všem kdo s tou maskou chcou nějak manipulovat
13:53 xstill jop, property holds: http://pastebin.dqd.cz/gnoR/
13:54 mornfall možná by bylo dobrý sepsat požadavky na to maskovací API
13:54 mornfall refcounting v systemspace to asi umět nebude, ale to by mělo být celkem jedno
13:54 mornfall používat se může userspace api
13:55 xstill no, já jsem na to přišel tak, že sepisuju co naše intrinsiky dělaj do diplomky
13:55 mornfall možná by bylo nejlepší to udělat tak, že bude prostě jeden globální bit a hotovo
13:56 mornfall a když se něco zapomene odmaskovat tak se to prostě rozbije :-)
13:56 mornfall aspoň se to rozbije hodně a předvídatelně
13:57 mornfall s tím že mask v masce bude error
13:57 xstill zas to že to odmaskuješ při opuštění funkce docela chceš, ne? Jinak bude hroznej poděl vyřešit to slušně s výjimkama (i když je otázka proč by někdo měl pod maskou házet výjimky…)
13:58 mornfall no to jsem si kdysi taky myslel že chceš, proto to tak funguje
13:58 mornfall ale pak moc nejde zabránit tomu abys odmaskoval tu poděděnou masku
13:58 mornfall (a dědit se to taky musí, jinak to asi fungovat nebude)
13:58 xstill asi se budu muset podívat jak je to teď implementovaný
14:00 mornfall jako 'vyřešit' tohle jde tím, že krom BuiltinMask se bude generovat stav aj na ret/resume/unwind (za podmínek kdy se generuje na mask)
14:01 mornfall pokud to bude globální bit, mělo by jít udělat maskovací RAII případně
14:01 mornfall pro potřeby implementace userspace věcí
14:01 mornfall (které se chcou maskovat)
14:02 mornfall s tím že implementace vláken teda bude muset trochu spolupracovat (vyrobit per-thread počítadlo na rekurzi)
14:04 xstill ono ani nemusí být per-thread ne? vždycky může být nenulový jen v jednom vlákně
14:04 mornfall jo to je asi pravda
14:05 mornfall stačí je mít per-proces (a to taky jen proto že je to na nedosažitelné adrese)
14:05 mornfall takže obyč globální proměnná
14:07 mornfall jinak s hashdagem to vypadá tak, že si bude muset LLVM držet někde ve stavu strukturu haldy (nějak chytře zakódovanou, vychází mi to na ~2 bajty na haldovej ukazatel overheadu)
14:08 mornfall ono totiž hashdag samotnej tuhletu informaci nedokáže uchovat, stačí si vzít haldu s 2 identickými podgrafy
14:08 mornfall a kdybys to chtěl rozlišovat, musela by se kanonizovat celá halda
14:09 xstill takže místo těch obj ID bude "obraz haldy" někde ve stavu, jo?
14:09 mornfall tak něco
14:09 mornfall když se vytáhne struktura ven, je rozumná šance že ta kanonizace na tom bude rychlá (protože to neobsahuje žádná data, jen objid z ukazatelů)
14:10 mornfall nicméně to znamená že ukazatele budou muset být relativně magický
14:10 mornfall což teda stejně chceme, abychom detekovali přetečení objektu spolehlivně
14:10 xstill v jakém smyslu?
14:10 mornfall spolehlivÄ›*
14:11 mornfall no, ten ukazatel na kterým se provede nějaká operace se musí seskládat z objid který je uložený někde venku a offsetu kterej je uvnitř
14:11 mornfall stejně add, sub a podobně můžou operovat jen s offsetem (legálně)
14:12 mornfall všechno ostatní by mohlo být InvalidArgument (aspoň dokud se nedořeší asymetrický ukazatele, pak se tam prostě transplantuje nějaká stabilní varianta objid)
14:12 mornfall nicméně icmp který dostane pointer musí srovnávat objid nikoliv blob
14:13 mornfall a to že nějaká operace dostane pointer se musí rozlišovat dynamicky (ne podle llvm typu)
14:18 xstill hmmm… co když někdo castne pointr na něco menšího a to pak bude porovnávat… i když to je asi dost velká prasečina na to aby to muselo fungovat. BTW, definuje standard, že static_cast< char * >( size_t( p ) + 1 ) == p + 1 (za předpokladu char *p)? Tj. je možné dělat pointr aritmetiku nad castnutým pointrem?
14:19 mornfall jestli to definuje nevim, ale fungovat by to mělo tak jako tak
14:20 mornfall a 'vyrobit' heap ukazatel z něčeho co ukazatel není v divinu beztak nejde, takže to je snad jedno
14:20 mornfall (když tam storem vlepíš třeba novej bajt, tak to ztratí statut ukazatele)
14:20 mornfall hm, venku sice furt chčije, ale asi si jdu vyvětrat hlavu a pak to zkusim naimplementovat...
14:58 xstill mornfall: ten článek na propojení divine a prismu šel nakonec do koše?
15:37 mornfall hm, někam se to tuším posílalo
15:38 xstill já měl za to, že na MUSEPAT, ale v easy chairu to nevidím a to co je v svnce má zakomentované autory a nejde přeložit
15:40 mornfall autory to má zakomentované protože double blind review, asi
15:40 mornfall Jiřík s tím něco kutil
15:40 mornfall a v easychairu to nevidíš protože musepat ho nepoužívá
15:40 mornfall softconf.com
15:40 xstill aha
15:41 xstill aha už jsem to našel v mailech
15:42 mornfall 23. je notifikace
15:42 xstill OK, to je vlastnÄ› to co jsem hledal :-)
17:20 xstill spito: pamatuješ si jestli je zítra nakonec něco na paradise semináři?
17:21 spito xstill: nepamatuju
17:21 spito je program následující?
17:21 spito "
17:21 spito :
17:21 spito --
17:21 spito takžýe nic není
17:21 spito safra...divný prsty
17:21 xstill co to píšeš? :-D
17:22 xstill já mám matný pocit, že Jiřík s něčím přišel, ale nepamatuju si to jistě

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