Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2016-03-21

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

All times shown according to UTC.

Time Nick Message
12:21 xstill mornfall: další vylepšení tau redukce: pokud k přerušení došlo jen kvůli control flow (tj. není tam observable akce) tak z výsledku může táhnout jen to vlákno, které téhlo teď (akorát to má problém, že to potřebuje součinnost visitoru už asi)
12:32 mornfall hm, ale to asi nebude fungovat ne?
12:32 mornfall když tam bude jen selfloop tak to už nic jinýho nevyrobí
12:32 mornfall nikdy
12:33 mornfall (nebo to je to co myslíš součinností visitora, že pozná že to je selfloop a pak řekne generátoru že má vyrobit ten zbytek?)
12:34 mornfall hm, jen to nemusí být selfloop, může to být klidně neviditelnej cyklus o nějakém počtu hran
12:35 xstill aha, tak nic
12:36 mornfall nicméně mě to přivedlo na myšlenku, že by to mohl realizovat scheduler (ne visitor), ale pak jsem narazil na tohle
12:36 mornfall teď je otázka jestli z toho (realizace schedulerem) jde vymlátit nějaké jiné zlepšení :-)
12:38 mornfall (ještě teda k tomu původnímu problému, to control flow proviso co tam je je statická obdoba C3, kdybys tam měl 'skutečný' C3 s detekcí cyklů tak ho můžeš vynechat ale ta součinnost co to vyžaduje od visitora je dost netriviální)
12:48 xstill teď mě asi nic dalšího nenapadá
12:49 xstill padl tu dotaz proč používáš patkové písmo na slidy
12:53 mornfall kdo se ptá? :)
12:55 mornfall (je to cambria, dobře se čte, je úzká takže se toho na řádek vejde relativně dost a přesto dobře drží linku)
12:56 mornfall navíc teda computer modern sans je fakt hroznej font :-)
13:01 mornfall aleo je taky hodně hezkej font, jen je asi trochu širší
13:07 mornfall jen teda aleo nemá matematiku, nebo o tom aspoň nevim
14:42 mornfall xstill: btw. tys říkal žes objevil nějakej případ kdy neviditelnej zápis invaliduje mapu viditelnosti?
14:56 xstill mornfall: to asi ne, ale viditelnej jo, a ty děláš typicky dva viditelné (a pod maskou libovoně mnoho)
14:57 mornfall já nedělám nic :P
14:58 mornfall (ale jo, chápu problém, s maskama to dává smysl... celkově je detekce viditelnosti pod maskou peklo...)
14:59 xstill no, ne jen s maskama
14:59 mornfall to že jsou dva bez masky se vyřeší lehce
15:00 xstill ale nevím jestli to řešení nepovede k zhoršení redukce
15:00 mornfall mírnému asi jo, ale ber to čert
15:01 mornfall ono to bude potřeba aj z jiných důvodů takže to je asi jedno
15:01 xstill co bude potřeba? ta změna nebo to cachování?
15:02 mornfall přestat lepit to druhý tau^* k přechodu s ne-tau
15:07 xstill proč to bude potřeba?
15:08 mornfall protože chci rozumně jednoduše reprodukovatelný protipříklady
15:09 xstill hm, asi nevidím takhle hned jak to souvisí
15:11 mornfall že chci udělat interrupt pointy explicitní, tzn. nalepit za každej load/store intrinsic call 'maybe interrupt'
15:11 mornfall ale zcela jistě to nechci lepit za každou instrukci :)
15:11 xstill aha
15:21 mornfall (pak se můžeš ve volném čase potrápit nad statickou optimalizací pozic kam ty maybeinterrupty dát :)
15:23 xstill no to půjde docela dost případů vyhodit staticky
15:23 xstill (s pointr analýzou obvzlášť)
19:15 xstill mornfall: ona ta tau může klidbně vypadat stejně jak teď, jen ty maybeinterrupt dáš před manipulace s pamětí a musí si pamatovat, jestli to byla první, nebo druhá observable akce
19:15 xstill ale bude jich pořád stejně
19:16 mornfall ono to si právě pamatovat nechceš
19:16 xstill navíc by to mělo tu výhodu, že když budou před, tak poběží nad stavem před tou instrukcí (viditelnost to sice nemění, ale dává to větší smysl)
19:16 xstill proč ne?
19:17 xstill stejně si interpret nebo program musí pamatovat nějakej stav redukce, kvůli cyklům
19:17 xstill a pokud chceš zachovat to co jsem udělal s loady (co by bylo fajn, protože to má efekt) tak i kvůli loadům
19:18 mornfall protože bys musel mít jednoznačné mapování mezi maybeinterrupt a 'viditelnou akcí'
19:19 mornfall s vnitřním stavem redukce to nemá nic moc společnýho
19:19 xstill to prosím rozveď
19:19 xstill maybeinterrupt přechází/je za možná viditelnou akcí, ne?
19:20 mornfall může a nemusí
19:20 mornfall taky potřebuješ aspoň jeden na každým cyklu
19:20 mornfall (může to být některý z těch co jsou tam kvůli viditelné akci, ale taky nemusí)
19:21 xstill to stejně musíš rozlišit abys poznal jestli máš interruptovat, ne?
19:21 mornfall redukce jistě stav má a ten stav rozhoduje jestli nejbližší interrupt bude nebo nebude
19:22 mornfall tzn. máš nějakej příznak kterej říká jestli maybeinterrupt udělá nic nebo interrupt
19:22 mornfall ten příznak se počítá dynamicky (když modelcheckuješ) nebo se dodá jako sekvence true/false z protipříkladu
19:23 xstill minimálně control flow intrerrupt by měl vědět jestli jestli je control flow, aby divine poznal, jestli si má uložit PC a pokut ho vidí podruhé tak interruptnul (protože mi dává smysl, že pokud budeme schopní poznat terminující cyklus, tak na něm nebude control flow interrupt)
19:24 xstill to je jedna z věcí kterou bych tam docela rád viděl, a cykly se stejně budou řešit kvůli symdivine, takže bych toho chtěl využít i pro divine
19:24 mornfall jediný co musíš zaručit je, že když je nastavenej na true tak určitě potkáš maybeinterrupt dřív než další viditelnou akci
19:24 xstill navíc si pak nemusíš pamatovat tolik PC
19:24 mornfall no, PC ti stačí pamatovat si ty od maybeinterrupt
19:25 xstill to jo, já říkám, že by stačilo od některých maybeinterrupt, těch které značí cyklus o kterém jsme nepoznali, že terminuje
19:26 mornfall to jsou potenciálně všechny
19:26 mornfall nebo teda nevim jak chceš poznat že něco *nemůže* být na cyklu
19:27 mornfall (umíš poznat že něco určitě na cyklu je)
19:27 xstill dokud nemáš tail rekurzi tak nic co není na cyklu v control flow jedné funkce není na cyklu, ne?
19:28 xstill s tail rekuzí je tail call potenciálně taky na cyklu
19:32 mornfall bez tail rekurze taky, prostě každej call
19:32 xstill ne, call ti cyklus neuzavře, protože i kdyby tam byl opakující se PC tak se liší zásobník
19:33 mornfall jako jo, když je ten cyklus skrz funkce tak divinu dojde paměť ať už se zacyklí s provisem nebo bez provisa
19:33 xstill (cyklus ve stavovém prostoru)
19:34 mornfall ale v obou případech chceš aby to generovalo nový stavy a ne aby to zůstalo týden viset na jednom přechodu
19:35 xstill dobře, klidně si tu mojí původní věc rozšiř i na call, ale pořád tvrdím, že ty místa kde to má smysl dokážu staticky poznat
19:35 xstill a je jich relativně málo
19:36 mornfall jestli někdy bude nebo nebude zero-overhead tail call nevim
19:36 xstill aj těch callů dokážu spoustu staticky poznat že nejsou potřeba řešit
19:39 mornfall nevim, přijde mi to složitější a bez výrazné výhody
19:39 mornfall na spoustě míst zase budeš potřebovat oba typy, takže budeš mít víc instrukcí
19:40 mornfall (nebo tomu budeš muset dát parametry a ty se budou muset zpracovávat, to taky není zadarmo)
19:42 mornfall pokud chceš šetřit ukládání PC, tak je asi lepší mít na to extra intrinsic kterej jen uloží PC ale nedělá interrupt, jen zvedne příslušnou vlaječku (takže další maybeinterrupt vyskočí)
19:44 xstill to by asi šlo, i když to výjde podobně jako dva typy maybeinterruptů podle mě
19:46 mornfall podobně, ale můžeš to bezpečně ignorovat (maybeinterrupt musíš interpretovat vždy)
19:47 xstill takže to chápu tak, že interpret si řeší viditelnost a ukládá si flag podle instrukcí a podle savepc a maybeinterrupt udělá interrupt pokud ten flag je nastavený?
19:48 mornfall jo, interpret si řeší viditelnost a interrupt se může stát jen na maybeinterrupt
19:48 xstill přičemž maybeinterrupt se dává za potenciálně viditelné instrukce a vedle savepc, pokud v tom cyklu žádný není
19:48 mornfall savepc jsem kdysi chtěl dělat jako anotaci (metadata) btw. :)
19:49 mornfall ještě dávno před divine 4
19:49 xstill to je mi asi celkem jedno
19:49 mornfall ale nějak na to nikdy nedošlo
19:49 xstill jen mi to příjde užitečné
19:50 mornfall no, mně spíš právě přišlo že když máš maybeinterrupt, kterých není mnoho a na každým cyklu je nějaký, tak už je to skoro zbytečný řešit
19:50 xstill já bych docela rád zkusil jestli z toho vyždímu větší redukci
19:51 mornfall no to by nemělo jít ne? :) jestli jo tak to zní dost jako bug
19:51 mornfall jediný na co by to mělo mít vliv je kolik toho držíš v tom pc setu
19:52 mornfall jo vlastně, když dokážeš najít staticky terminující cyklus kterej nemůžeš staticky dát celej pod masku
19:52 xstill no ne, cyklus v kontrol flow neimplikuje cyklus ve stavovém prostoru, a poznat staticky, že cyklus terminuje na to nástroje existují
19:53 xstill + pro rekurzi je to často ještě jednodušší
22:35 mornfall haha teď jsem si všiml, někdo se snaží použít ten náš uppaalovej generátor
22:47 xstill jsem to nečet, se bojím že budou mít blbej dotaz, a nebo přišli na to, že to vůbec nefunguje
22:47 mornfall dotaz je smysluplnej
22:47 mornfall ale to že to nefunguje je klidně možný

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