Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2017-01-17

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

All times shown according to UTC.

Time Nick Message
00:01 divine-buildbot Hey! build divine-current-release #43 is complete: Failure [finished]
00:01 divine-buildbot Hey! build divine-current-debug #47 is complete: Failure [finished]
00:01 divine-buildbot Hey! build divine-nightly-debug #54 is complete: Failure [finished]
01:02 divine-buildbot Hey! build divine-current-website #44 is complete: Failure [finished]
02:48 ilbot3 joined #divine
02:48 Topic for #divine is now DIVINE | http://divine.fi.muni.cz | http://irclog.perlgeek.de/divine/
07:37 xstill mornfall: existuje nějaký důvod, pro je libc v seznamu zdrokjáků 2x? jednou ve STRINGIFIED a jednou manuálně?
08:48 xstill_ mornfall: mám u sebe patch který opraví čistý build (to kvůli čemu padá buildbot)
08:50 xstill_ (ten pdclib patch před ní by měl být bezpečný)
09:49 divine-next 2 new patches validated [xstill]
12:17 yaqwsx joined #divine
12:45 yaqwsx mornfall: Jak si představuješ DiOS-lite? Je to druhý OS (tzn. jiný boot) anebo je to něco do čeho se DiOS přepne pomocí přepínače? (tzn. -omode:lite)
13:03 mornfall yaqwsx: dobrá otázka
13:03 mornfall yaqwsx: chvíli jsem uvažoval jak to realizovat, jedna možnost by byla komponentizace stejným modelem jako jsou teď monitory
13:04 mornfall yaqwsx: tzn. každá komponenta by měla třídu s vlastníma datama a stav by byl vektor/seznam/... komponent
13:04 mornfall pak by dios-lite byl jen nějaká minimální konfigurace
13:04 mornfall ale nevim jestli to není zbytečný
13:05 mornfall (možná lepší by byl std::tuple a compile-time instanciace, ale zase to nechceme zatáhnout do extrému jako divine 3...)
13:14 yaqwsx joined #divine
13:14 yaqwsx mornfall: Nad obojím jsem přemýšlel.
13:14 yaqwsx Komponenty mi přijdou nejhezčí, ale zase při vývoji DiOSu jsi tlačil na minimální runtime overhead.
13:15 mornfall jo no, na horkých cestách ten overhead fakt bolí
13:15 yaqwsx Což je ale vlastně jenom scheduler, ne?
13:16 mornfall scheduler především, některý syscally asi taky
13:16 yaqwsx Které?
13:16 mornfall hm, get thread id už vlastně ani není syscall co
13:16 yaqwsx N
13:17 mornfall nicméně teda syscally jde vyřešit relativně elegantně tak, že tabulka se seskládá v boot-u z komponent
13:17 mornfall takže se nemusí hledat v scheduleru
13:18 mornfall jen pak každej syscall musí hledat 'svoje' data
13:18 yaqwsx Co si mám představit pod tabulkou syscallů?
13:18 yaqwsx Ta se řeší v době kompilace, ne?
13:18 mornfall _DiOS_Syscalls nebo jak se to jmenuje
13:18 mornfall teď jo
13:19 mornfall (jen boot umí přepínat dvě statický verze, passthrough a simulate)
13:19 mornfall nebo virtual nebo jak to bylo
13:19 mornfall ale stejně dobře by šlo tu tabulku sestavit v __boot-u podle toho co je a co není
13:20 mornfall a nakonec by vlastně nemusel ani nikdo hledat, ukazatel na příslušný data by mohl být uložen tamtéž
13:24 yaqwsx Nějak teď nevidím, jak bych mohl zkonstruovat tabulku syscallu v bootu - nemůžu měnit čísla syscallů, protože už jsou natvrdo zadrátovaná z doby kompilace v různých částech kódu.
13:25 mornfall jistě, ale můžeš měnit funkci na kterou to ukazuje
13:26 mornfall tzn. začneš tabulkou která má všude nullptr, pak vezmeš tabulku příslušnou VFS a nakopíruješ do master tabulky všechno co VFS nemá jako nullptr
13:26 mornfall stejně pro scheduler a spol.
13:26 yaqwsx Jo takhle...
13:26 mornfall a nakonec všechny nullptr nahradíš za nějakej univerzální syscall not available handler
13:27 yaqwsx Jak moc drahý je ukzatel ve stavu?
13:27 mornfall to záleží jestli se mění to kam ukazuje
13:28 yaqwsx Nemění. Jde mi o to mít "kompletní stav", který obsahuje pointery na jednotlivé komponenty (tak, jak je to teď), ale některé prostě neinicializovat
13:28 yaqwsx Přijde mi to jako nejjednodušší řešení.
13:28 mornfall pokud budou ve stavu jen konsatntní ukazatele tak je to jedno
13:30 mornfall mít tam null sice ničemu nevadí, ale taky se mi zdá že to moc neřeší situaci
13:30 yaqwsx V čem to přináší problém?
13:30 yaqwsx Mít tam null + změněnou tabulku syscallů
13:31 mornfall jo tak
13:31 mornfall no ten null je tam trochu zbytečnej v tom smyslu, že to asi bude beztak muset být void *
13:32 mornfall takže jestli to je přímo v tabulce syscallů nebo ve stavu je asi jedno
13:32 mornfall (lite scheduler a normální scheduler bude mít komponentu ve stejným 'slotu' ale jinýho typu)
13:32 yaqwsx Teď nerozumím. Mám struct Context{ Scheduler* s; VFS* vfs; Something ss; } - což je stav DiOSu.
13:32 mornfall jo, jenže ten typ Scheduler závisí od konfigurace
13:33 mornfall když nemáš vlákna nemá smysl táhnout celej velkej typ Scheduler, když stačí jeden ukazatel na rámec
13:34 mornfall taky je teda možnost narvat tam všechny možnosti, dokud je to konstantní tak to skoro nevyrábí overhead
13:34 mornfall tzn. ThreadScheduler *ts; LiteScheduler *ls; a používá se vždy jen jeden
13:36 yaqwsx Chtěl jsem navrhnout to šablonovat, ale to by do budoucna moc dobře neškálovalo.
13:37 mornfall to vyjde nastejno jako ten tuple
13:38 yaqwsx Pokud ale konstatní pointery nevadí, přijd emi lepší do stavu narvat všechny možnosti a inicializovat sktuečně jen ty žádané.
13:38 mornfall ale v podstatě jde jen o typovou (ne)korektnost
13:39 mornfall yaqwsx: no je otázka kolik syscallů potřebuje hrabat do víc než jedné komponenty
13:39 mornfall pokud takové nejsou, nebo jich je minimum, tak nemít globální 'stav' ale jen ty komponenty mi přijde jako lepší kompromis
13:40 yaqwsx Jak si mám představit komponenty?
13:40 mornfall pak nemusí každá implementace dělat ctx->moje_komponenta->... ale komponenta->...
13:41 mornfall (přetypování by pak bylo ve výrobě tabulky syscallů, kde by položka tabulky byla ... handler( void *, ... ) a skutečná fce by byla handler( Komponenta *, ... )
13:41 mornfall )
13:42 mornfall yaqwsx: momentálně tam vidím VFS, Scheduler a Fault
13:42 mornfall nevim jak velkej smysl má vynechávat nebo měnit Fault
13:42 mornfall ale nemít VFS nebo mít jinej Scheduler určitě nějakej smysl má
13:43 yaqwsx mornfall: A kde vezme volající handleru tu komponentu?
13:43 yaqwsx mornfall: S tím VFS, Schedulerem i Faultem souhlasím.
13:44 mornfall tabulka[ i ] = { .handler = fce, .data = komponenta }; ... tabulka[ i ].handler( tabulka[ i ].data, ... )
13:44 yaqwsx To je rozumnější než mít pointer jenom jdnou?
13:45 mornfall v tom smyslu že nemusí být v každém handleru zapečený offset (název) komponenty ano
13:48 yaqwsx Ok. Takže když to vztáhnu na skutečný kód, tak budu mít class __dios::Module s virtuálním destruktorem. Pokud v bootu zjistím, že komponenta má být inicializována, tak vytvořím instanci, naplním tabulku a zapamatuji si ji (abych při exitu mohl zavolat destruktor).
13:49 mornfall destruktory se můžou asi taky zavolat podle tabulky... (furt uvažuju jak tu tabulku udělat víc C++ a míň C)
13:50 mornfall (member function pointer / delegate hack možná?)
13:50 yaqwsx Scheduler by vlastně potom také volal nějaký "syscall handler" z tabulky.
13:53 yaqwsx ...a stavem DiOSu by pak byla tabulka syscallů.
13:53 mornfall jo, tak něco
13:53 yaqwsx Teda "syscall handlerů"
13:53 yaqwsx Tohle se mi začíná líbit.
13:57 mornfall vyvstává otázka jak drahý je mít tabulku syscallů jako pole std::function...
13:57 mornfall kde by to šlo nabindovat typově korektně
13:58 mornfall (případně rovnou std::array)
13:58 yaqwsx Nevím jestli je to relevantní (zatím jsem nedočetl) - https://www.codeproject.com/Articles/11015/The-Impossibly-Fast-C-Delegates
14:15 yaqwsx Nevím, jak je drahé volání std::function, ale delegate se podle mě dá napsat na 2 dereference.
14:17 mornfall delegate bude skoro určitě rychlejší než std::function
14:17 mornfall a nakonec asi aj lepší
14:17 mornfall a ještě si zaprogramuješ něco zajímavýho ;-)
14:17 yaqwsx V čem by std::function mělo být lepší/horší?
14:17 yaqwsx Ok, zkusím to po volných chvílích realizovat.
14:18 mornfall lepší je že je hotový a otestovaný a pro tenhle usecase bude fungovat, horší že na to není úplně optimální
14:18 yaqwsx Ok, takže nic překvapivého
14:23 xstill_ volání std::function je v podstatě jen jedno virtuální volání (+ možná nějaké nevirtuální) myslím
14:25 xstill_ + nějaký check že je to neprázdné
14:26 mornfall hm, v libc++ je tam klasickej 'small value' hack, takže by to nakonec nemuselo být tak zlý, pokud se ta lambda vejde do 3*sizeof(void*)
14:26 mornfall ale pokud by to mělo alokovat z haldy tak to bude zatraceně bolet
14:27 divine-buildbot Hey! build divine-next-debug #417 is complete: Success [finished]
14:28 mornfall (ta výsledná tabulka musí určitě být monolit)
14:30 xstill_ tak můžeš si napsat vlastní std::function s limitem velikosti no
14:31 xstill_ jako bonus bude moct být přesně tak velká jaké je to maximum
14:31 xstill_ std::function je ještě o pointer větší
14:31 xstill_ proč by byl problém kdyby to bylo na haldě?
14:31 xstill_ napsat std::function není až tak těžk
14:31 xstill_ *těžký
14:32 mornfall protože by to znamenalo objekt ve snapshotu pro každej syscall
14:33 xstill_ aha jo to by mohlo bolet
15:46 divine-next validate failed, 4 patches pending [mornfall]
15:47 mornfall bam
16:09 divine-next validate failed, 2 tests failed, 5 patches pending [mornfall]
16:39 divine-next 7 new patches validated [mornfall]
16:45 yaqwsx joined #divine
16:48 divine-next 2 new patches validated [mornfall]
16:51 xstill_ mornfall: mám u sebe generovátko tabulky z results/ functional testů
16:59 xstill_ (je to klikatelná html tabulka s odkazy na logy testů)
18:09 xstill_ hm, je někde definované co má být ve stat struktuře pokud stat selže?
18:10 xstill_ prtože pdclib z nějakého důvodu předpokládá, že mode bude fungovat i pokud soubor neexistuje asi
18:11 xstill_ respektive používají remove na potenciálně neexistující soubor
18:24 mornfall řekl bych že pokud stat hodí ENOENT tak v tý struktuře může být víceméně cokoliv
18:25 mornfall xstill_: až na to, že ten stat tam přidal spito
18:32 xstill_ a?
18:32 xstill_ no to bych právě taky čekal, ale pdclib na tom padá, tak nevím jestli mají chybu oni nebo spito
18:34 xstill_ hm, hlavně do toho remove hrabal jak spito tak Milan
18:35 xstill_ aha, on to implementoval spito
18:35 spito :)
18:36 xstill_ takže to opravím
18:37 spito já měl za to, že když ti funkce vrátí chybu, tak se nemůžeš spolehnout na žádná další vrácená data
18:37 xstill_ no, ty se právě spoléháš na to, že struct stat bude čitelný i když stat vrátí chybu
18:37 xstill_ což není
18:37 xstill_ on teda není definovaný
18:38 mornfall dyť to říkám ne? :)
18:40 xstill_ jo, ty jo
18:41 mornfall aj to s tím že to spito implementoval
18:44 spito xstill_: kde se tohle děje?
18:45 xstill_ spito: v pdclib testech
18:45 xstill_ (které jsou zatím jen u mě)
18:45 yaqwsx My máme nového vývojáře DIVINu?
18:45 spito no tak ty testy jsou asi špatně
18:45 xstill_ yaqwsx: ?
18:45 spito jinak nechápu, kde se na co spoléhám...
18:45 xstill_ spito: testy ne, remove je špatně
18:46 spito yaqwsx: to se ti zdá...
18:46 xstill_ (pdclib/posix/remove.c)
18:46 yaqwsx xstill_: Kdo je Milan?
18:46 yaqwsx spito: Tebe nepočítám
18:46 spito ex
18:47 xstill_ yaqwsx: https://openhub.net/p/divine/contributors/3071642499255234
18:47 xstill_ hm, až na to, že tam není ani seznam pathců
18:48 xstill_ prostě bývalý vývojář, co napsal iniciální verzi pthreads
18:48 spito xstill: no jasně, že tu implementaci remove mám špatně, to ses tu ani nemusel ptát :)
18:48 yaqwsx Ah, takhle.
18:49 divine-next 3 new patches validated [xstill]
18:49 xstill_ spito: jsem původně myslel, že je to upstream
18:50 spito rename je na tom stejně....no možná hůř, to nebylo vůbec testovaný
18:52 xstill_ wat, rename má jen test a nemá implementaci?
18:52 xstill_ tak jsem opravil remove a failnulo stejně testů jen na něčem jiném
18:52 xstill_ takže zítra no…
19:06 spito rename má implementaci, ve fs.cpp
19:06 spito jenom není vůbec otestovaná
20:31 mornfall xstill_: vytvořil jsi dost zapeklitý problém ... můj linker chce to runtimový libc.a použít jako -lc
20:32 mornfall (protože to je ve složce která je v -L...)
20:34 mornfall zkusím to schovat / zneškodnit nějakým prefixem, snad to nic nerozbije
20:49 xstill mornfall: hm, mělo by stačit to nagenerovat do nějaké podsložky
22:28 mornfall xstill: nebylo by lepší tu tabulku formátovat složka = řádek a jednoznakové passed/failed/... s tooltipem kterej to byl soubor za tím?
22:30 mornfall pak by se to třeba i smysluplně vešlo do status-u (místo toho textovýho skipped: ... co tam je teď)
23:31 divine-next 5 new patches validated [mornfall]
23:43 divine-next 1 new patch validated [mornfall]
23:56 divine-buildbot Hey! build divine-nightly-release #52 is complete: Success [finished]

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