Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2017-03-17

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

All times shown according to UTC.

Time Nick Message
02:48 ilbot3 joined #divine
02:48 Topic for #divine is now DIVINE | http://divine.fi.muni.cz | http://irclog.perlgeek.de/divine/
08:52 yaqwsx mornfall: blurry: Co si myslíte o tom, co jsem včera nadhodil k tomu projektu? Mám to rozvíjet nebo to napsat jinak?
08:52 mornfall vypada to fajn
08:52 mornfall jen vyskocila otazka jestli si nerozdelit praci vic rovnomerne :)
08:53 yaqwsx Do toho projektu je třeba psát, kdo co bude dělat?
08:54 yaqwsx Tam nejde napsat "Tihle dva se do toho pustí a basta"?
09:14 mornfall myslim ze nestaci, ale jeste se podivam
09:14 mornfall kolem 12 mi konci prednaska
09:14 yaqwsx Ok, do té doby bude mít v mailu novou verzi textu.
10:18 xstill_ mornfall: já s Heněm jsme tuším měli nespecifikované rozdělení minule
10:34 xlauko hej v zadaní projektu je, že na tom budeme robiť spoločne
12:02 xstill_ joined #divine
12:11 blurry yaqwsx: "Je třeba jasně uvést, jakou formou se jednotliví členové týmu do projektu zapojí a jaký je předpokládaný objem jejich práce."
12:42 blurry yaqwsx: a etapy (/3 mes) boli navrhnute 1) modularizacia+procesy 2) implementacna cast simulatora+fairness 3) synchronni 4) evaluace, dokumentace
13:19 yaqwsx blurry: Tak co si chce vzít na starost? :D
13:19 yaqwsx *chceš
13:47 yaqwsx mornfall: Tak co s tím projektem? Co je třeba ještě upravit? Co za blbosti, které je třeba přepsat, jsem tam napsal?
13:48 mornfall yaqwsx: nevím, blurry to má pevně v ruce
13:48 yaqwsx blurry?
13:48 mornfall yaqwsx: co jsem četl se mi líbilo (plusminus nějaká formulace, ale to počítám že se nějak vyřeší)
13:55 yaqwsx mornfall: Než blurry zareaguje. Jak jsi to čera myslel s tím __unwrap?
14:04 apophis joined #divine
14:06 blurry yaqwsx: mno procesy a nejaku rozumnu podcast simulatora? (myslim nad ramec manualu :D)
14:14 mornfall yaqwsx: no __unwrap jsem pracovně pojmenoval ten kus kódu kterej vezme va_list a zavolá skutečnej syscall
14:14 mornfall yaqwsx: implementace syscallu má 3 části, a) libc wrapper: foo() b) __unwrap_foo() a c) skutečná implementace, Komponenta::foo()
14:15 mornfall yaqwsx: a) a b) chceme generovat, chápu-li správně
14:15 yaqwsx Jo, ale ten se vezme kde?
14:15 mornfall yaqwsx: prototyp __unwrap_foo je stejnej pro všechny syscally
14:16 mornfall yaqwsx: tzn. když mám makro SYSCALL( int, foo )( int x, int y ) tak můžu mít #define SYSCALL( t, n ) __unwrap_ ## n( parametry unwrapu ); t n
14:16 yaqwsx mornfall: Teď jsem to navrhl tak, že Komponenta::foo() už bere správné argumenty (nezabalené do va_list)
14:17 mornfall yaqwsx: to jo, ale někde se to musí z toho va_list rozbalit
14:17 yaqwsx Ano a to teď generoval ten perl script
14:17 mornfall yaqwsx: a to jak se to rozbalí záleží na prototypu toho syscallu
14:17 mornfall no implementaci může nadále generovat perlový skript
14:17 mornfall přímo by měl
14:18 yaqwsx Takže chápu správně, že Perl nageneruje hlavičkový soubor, ve kterém bude #define __unwrap_jméno ... ?
14:19 mornfall yaqwsx: když se pustí cpp -D'SYSCALL( t, n )=__SYSCALL__ ## n' header.hpp tak vypadne něco kde stačí najít __SYSCALL__([a-z]*)\(...\) a vyrobit pro každou takovou věc odpovídající implementaci
14:19 mornfall yaqwsx: ne #define, ale .cpp kde bude definice Komponenta::__unwrap_jméno pro každý SYSCALL(...) v daném .hpp
14:30 yaqwsx Takže Perl sežere z preprocesovaný soubor, transformuje je jej a ten se teprve zkompiluje? A všechno osatní se bude řešit preprocessorem. Chápu správně?
14:32 mornfall yaqwsx: not quite :) ten .hpp se použije jak je, toho se chytá jen preprocesor
14:32 mornfall yaqwsx: perl ten soubor přečte / prožene skrz cpp jen aby zjistil co má vlastně generovat
14:33 mornfall yaqwsx: a teď mám skoro dojem, že libc wrappery by mohl generovat podle prototypů z libc který by taky šlo nějak chytře označit
14:34 mornfall v podstatě stačí _PDCLIB_SYSCALL int write( int fd, ... ); kde #define _PDCLIB_SYSCALL
14:34 mornfall (tzn. smaže se to)
14:34 mornfall (a zase perl to může číst skrz cpp -D_PDCLIB_SYSCALL=__SYSCALL__ a vygrepovat to podle toho, tzn. nemusí řešit komentáře, #if 0 a podobně)
14:35 mornfall ale asi to jde generovat stejně dobře z těch .hpp z dios-u
14:36 yaqwsx Ok, zbavení se syscall.def se mi líbí.
14:36 mornfall (verze kde se libc wrapper generuje z libc include je asi trochu lepší)
14:39 yaqwsx Takže označím si makrem prototypy všech syscallů přes všechny možné hlavičky runtimu. Perl přečte hlavičky, posbírá prototypy a vygeneruje Cpp soubor, kde budou všechny implementace wrapperů. Hlavičky Komponenta::foo() budou muset být napsány ručně. Chápu správně?
14:39 mornfall yaqwsx: myslím že jo
14:39 mornfall yaqwsx: (perl bude teda generovat 2 .cpp, jeden v libc a jeden v kernelu)
14:41 yaqwsx mornfall: Jak ale generovat hlavičky kernel-wrapperů pro jednotlivé konfigurace? Ty preprocesrem nevygeneruji. Nebo že by Perl vyplivnul i soubor s hlavičkami, který se includne?
14:41 mornfall yaqwsx: však ten kernel wrapper má prototyp vždy stejný, ne?
14:42 mornfall pokud je wrapper definovaný uvnitř komponenty vedle actually syscallu, tak funguje ten trik s #define SYSCALL( t, n ) __unwrap_ ## n( parametry unwrapu ); t n
14:42 divine-next 2 new patches validated [xstill]
14:42 mornfall to z každýho SYSCALL( ... )( ... ) vyrobí dva prototypy, jeden pro __unwrap_foo a druhej pro foo
14:44 mornfall xstill_: bench-runexternal.cpp → bench-external.cpp ?
14:48 xstill_ mornfall: done
14:51 yaqwsx mornfall: Abych byl upřímný, trochu se ztrácím. Aby syscally fungovaly, je třeba těchto 9. věcí: http://pastebin.com/rHBwY2S2
14:51 yaqwsx Podle mě dává smysl psát jenom 1, 4, 3, zbytek by měl být generovaný.
14:53 yaqwsx blurry: Spácháš finální verzi textu?
15:05 mornfall yaqwsx: nechybí tam zrovna wrapper v kernelu?
15:07 mornfall yaqwsx: číslo 5 jde vygenerovat stejným procesem jako kernel wrappery, jen se projdou všechny .hpp za sebou
15:07 yaqwsx Wrapper v kernelu je číslo 8
15:07 mornfall yaqwsx: aha, proč to je součást configuration?
15:08 mornfall yaqwsx: ten wrapper je daný komponentou přece
15:08 yaqwsx Protože to musí mít ponětí o tom, jak vypadá stav, vybrat ze stavu správnou komponentu a zavolat z ní implementaci.
15:10 yaqwsx 8 obsahuje kód auto ctx = static_cast< ... >( context ); std::get< 1 >( *ctx )->open( fd );
15:11 mornfall jo chápu
15:14 xstill_ mornfall: co je v tom blbě /^(-I|-isystem)([^/].*)$/? Unmatched [ in regex; marked by <-- HERE in m/^(-I|-isystem)([ <-- HERE ^/ at /var/obj/xstill-divine-divine3/release/tools/divcheck line 144.
15:15 xstill_ má to matchnout include na ne absolutní cestu
15:24 yaqwsx mornfall: Stále více a více nabývám názoru, že nejjednoduší cesta je si perlem vygenerovat obdobu syscall.def, 7, 8 a tyto soubory pak includovat.
15:26 mornfall yaqwsx: jo to cesta určitě je
15:27 mornfall yaqwsx: ale třeba ta 8. stejně nejde generovat cpp-čkem
15:28 yaqwsx Proto ji chci generovat perlem (bez namespacu, použije se to pak jako namespace cfg { namespace myCfg { #include <syscallWrapper.gen> } }
15:29 divine-next 3 new patches validated [xstill]
15:31 mornfall yaqwsx: a nebylo by lepší kdyby ten cfg wrapper udělal jen std::get< 1 >( *ctx )->__unwrap_open( valist )?
15:31 mornfall yaqwsx: pak mu stačí název toho syscallu a nemusí řešit parametry
15:32 blurry yaqwsx: pozriem sa na to, az nieco zbastlim poslem
15:32 mornfall yaqwsx: (jasně, problém to jen přesouvá na jiný místo, ale asi mi to přijde jako lepší rozdělení)
15:33 yaqwsx mornfall: Podle mě tím přidávám navíc o jednu vrstvu wrapperů a neřím nic.
15:34 yaqwsx Druhá alternativa je - perlem posbírám syscally a nageneruji něco jako syscall.def na steroidech, kde mi poté bude stači pár maker na vytvoření všeho ostatního pomocí preprocesoru.
15:36 mornfall yaqwsx: je to víc wrapperů ale každej dělá jen jednu věc
15:37 mornfall yaqwsx: (a na ty per-config wrappery by stačil fakt jen seznam jmen)
15:38 mornfall hm, dvojic (komponenta, jméno)
15:39 yaqwsx yaqwsx: Ok, je to validní postřeh. A s tím, že stačí dvojice souhlasím.
15:40 mornfall asi jdu na vlak, budu o tom ještě přemýšlet
15:40 yaqwsx Ok, já si mezitím budu psát překladač a nadávat na Cčko... :D
16:02 yaqwsx blurry: Kdy je vlastně deadline?
16:18 blurry yaqwsx: 28
17:15 xstill_ mornfall: --instance 13143137 --instance 13148753
17:15 xstill_ D4 vs. D3
17:15 xstill_ je to skoro 10x rychlejší teď
17:15 xstill_ a produkuje skoro 4x méně stavů
17:15 xstill_ ale zas doběhlo jen 376 benchmarků což odpovídá 33 minutám běhu DIVINE 4
17:48 blurry mornfall: printf ale potrebuje vyskladat formatovaci retezec
18:05 mornfall blurry: to je asi pravda... je to problém?
18:14 xstill_ mornfall: čeho chceme vlastně dosáhnout tím unbuffered IO?
18:15 blurry mornfall: nemusim si to aj tak prv vyskladat v nejakom bufferi nez to vypisem?
18:20 mornfall blurry: hej, asi snprintf alebo tak čosi
18:20 mornfall blurry: ale nemusel by byť globálny
18:21 mornfall xstill_: 3/4 kilobajtu globálních dat, občas přebytečnou kopii do sdílené proměnné
18:21 mornfall no, možná spíš vždy
18:44 mornfall vida, svc-pthread kde jsou jinak asi docela malý stavy sfoukl divine 3 rychleji než divine 4
18:45 mornfall jen teda těch necelých 20s moc nezaváží protože na libcxx to prohrál o víc než 4 hodiny
18:45 mornfall třeba se to vyrovná až vyrobí blurry to unbuffered IO ;-)

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