Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2014-11-17

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

All times shown according to UTC.

Time Nick Message
10:23 mornfall xstill: tomu s tím EXCLUDE_FROM_ALL moc nerozumim a skoro mi přijde že by bylo jednodušší napsat do toplevel CMakeLists set_target_properties( test-bricks benchmark-bricks PROPERTIES EXCLUDE_FROM_ALL )
10:23 xstill hm to by asi bylo
10:23 xstill tak ty 2 patche ignoruj
10:24 mornfall stejně tak by mělo smysl to udělat jako default, stejně kdo to bude chtít pouštět v make-u tak to bude mít jako závislost make check nebo tak něco?
10:24 xstill hm taky pravda
10:25 mornfall plánuješ nějaký další tuple-related utility?
10:27 spito joined #divine
10:27 mornfall (jen uvažuju jestli by to nešlo zařadit do nějaký větší kategorie, resp. je-li to žádoucí)
10:28 mornfall hm
10:28 mornfall to moc dlouho nevydržel ;D
10:28 spito joined #divine
10:29 mornfall :-)
10:29 spito ale copak, snad jsem vám nechyběl?
10:29 spito a spletl jsem si command
10:29 mornfall 11:28 (@ mornfall ) to moc dlouho nevydržel ;D
10:29 spito "/quit" dělá něco jiného, než jsem si myslel
10:29 mornfall co by to ještě tak mohlo dělat? ;)
10:29 spito ale tak....já logy občas číst umím
10:29 mornfall hm, nějak se mi nejde strefovat do shiftu
10:30 xstill mornfall: možná, pokud bude něco zajímavého potřeba (třeba mě napadl forEach ale ten nemá moc smysl bez generických lambd)
10:31 spito mornfall: máme to pořád nějak rozbitý
10:32 xstill tak už jsem to s tím brick test udělal pořádně
10:40 mornfall spito: hm, už to jen segví a neassertí
10:40 mornfall to je taky radost zase
10:40 spito blbý je, že to nejsem schopný reprodukovat
10:40 mornfall aj divine combine vesele segví
10:40 mornfall no já taky ne
10:41 mornfall ale nedivil bych se kdyby byla ještě někde závislost na pořadí destruktorů
10:42 spito a opravdu musí být tolik objektů statických?
10:43 mornfall nemusí... jak to chceš dělat jinak?
10:44 mornfall já teda úplně nevidim tu velkou výhodu toho že se tyhlety objekty destruujou celkově, nealokujou nic co by nemělo dobře definovaný chování při ukončení procesu
10:44 mornfall já taky singleton pattern nemam zrovna v lásce
10:45 mornfall ale C++ jaksi nemá aspektový programování
10:45 mornfall přepisovat to do AspectJ kvůli tomu nebudem :P
10:45 spito ...aspekty....Java
10:46 mornfall no, to je paradigma, není to nutně vázaný na javu
10:46 mornfall :-)
10:46 spito ale to tak nějak taky tuším
10:47 spito jinak ta snaha mít uvolnění paměti je taková ta věc....slušnosti, která se učila na FI
10:47 mornfall .NET to taky nějak umí třeba
10:47 mornfall spito: hej, to je blbost :)
10:48 mornfall ale je pravda že žádnou jinou závislost nevidim
10:52 mornfall hm, ale řekl bych že bude něco špatně v brick::process
10:53 mornfall protože padá combine a draw :-)
10:59 mornfall co se třeba stane když se na stejnej thread volá join() 2x?
10:59 mornfall Joining with a thread that has previously been joined results in undefined behavior.
11:00 mornfall žeby tohle?
11:00 mornfall hm, ale proti tomu se join() chrání
11:01 spito na to jsem v Thread myslel
11:02 mornfall zajímavý třeba je že na ubuntu to vůbec nepadá
11:03 mornfall ale na fedoře zase jo
11:04 mornfall a taky to padá dost nedeterministicky, takže race
11:05 mornfall teď mi to třeba vytuhlo
11:06 mornfall ale dost blbě teda
11:07 mornfall v signal handleru :)
11:07 mornfall waaa,   what():  /home/mornfall/dev/divine/mainline/divine/utility/output.h: 22: assertion `!!_output' failed;
11:07 spito :D
11:07 spito a co to bylo za signál?
11:08 mornfall no to nevim
11:08 mornfall asi segv ne?
11:09 xstill hm, segv se dá vůbec chytit?
11:09 mornfall jo jasný
11:09 mornfall už tomu rozumim :-)
11:09 mornfall jasně že se segv dá chytit
11:09 xstill aha vlastně ho i chytáme
11:09 spito a co pak můžeš dělat?
11:09 mornfall takže to je takhle, padá to proto že počas shutdown-u dostaneme SIGCHLD
11:09 mornfall spito: cokoliv :-)
11:10 mornfall SIGCHLD zavolá handler, kterej hrábne na Output, kterej už ale neexistuje
11:10 mornfall kabum
11:10 mornfall takže je potřeba zrušit handler ještě než se zruší output
11:10 mornfall komu se to chce naprogramovat? :-)
11:10 spito a SIGCHILD je co?
11:11 mornfall SIGCHLD   20,17,18    Ign     Child stopped or terminated
11:11 mornfall když ten child proces kterej forkujeme skončí tak dostaneme SIGCHLD
11:11 mornfall (abychom věděli že máme zavolat wait a neleakovali PIDy)
11:12 mornfall (to je teda separátní problém, že ChildProcess by měl volat waitpid)
11:13 spito a teda SIGCHLD opravdu chytáme?
11:13 spito divine.cpp:202
11:13 mornfall to bychom teda taky nemuseli
11:13 mornfall ale ten bug tím nevyřešíš, jen to bude padat víc obskurně
11:14 mornfall (a teda míň často)
11:17 spito a měl by čekat PipeThrough nebo ShellCommand/Exec?
11:17 spito (co je návrhově lepší?)
11:17 mornfall no, z těchhle asi zrovna žádnej :-)
11:18 mornfall to by měl řešit ChildProcess
11:26 spito co mi udělá volat wait4 dvakrát na ten samý proces?
11:28 mornfall pokud ti to už jednou řeklo že skončil, podruhé to může být jinej proces
11:29 mornfall (protože je míň různých PIDů než může existovat procesů za život systému)
11:29 spito jo, jasný....jenom mě trochu zaráží, že tyhle věci ve wibble fungovaly
11:29 spito a to na sebe taky nečekaly
11:30 mornfall no, „fungovaly“
11:30 mornfall dělo se to stejný žejo
11:30 mornfall jen teď trvá shutdown dýl a máme ty destruktory, takže se to začlo projevovat
11:50 spito kolik že je těch /tools/draw.sh testů?
11:51 mornfall nevim
11:51 mornfall proč? :)
11:51 spito running: [vanilla] tools/draw.sh 600
11:52 spito ha, teď to zdechlo na časovým limitu
11:52 xstill to je čas myslím
11:52 spito no já vím, limit 10 minut
11:53 mornfall to znamená že ti to zadeadlockovalo
12:10 spito takže - dostanu signál 17 a v divine.cpp:41 to usne při vytváření sysinfo::Info
12:10 spito wait na pid nepomáhá
12:11 spito (a #define POSIX na antee není)
12:49 mornfall backtrace?
13:02 xstill hm, znáte nějakou funkci v std:: co má šablonované i nešablonované overloady a nepoužívá sfinae?
13:04 mornfall operator<< možná
13:07 xstill hm, asi udělám příklad na konstruktor shared_ptr, tam je to celkem pěkný
13:07 xstill když jim neukážu všechno
13:09 xstill u toho << je trochu blbý, že má jak member tak non member verze, i když to by zrovna z hlediska overloadingu moho být jedno u operátoru
13:10 xstill hm, to jsem netušil, že takový věci jako overload (8) z http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr vůbec existují
13:11 mornfall nojo :)
13:12 mornfall je to složitý jak rádio
13:23 xstill hm, lze nějak clangu zakázat aby inlinoval jakékoli funkce
13:23 mornfall to asi úplně nejde... zkus -fno-inline
13:23 mornfall ale myslím že se to na explicitně inline fce nevztahuje
13:24 xstill hm, to nestačí, ale to je asi jedno, přežiju bez toho
13:28 xstill jak je možný, že se A( NULL ) snaží chytnout na overload A( std::nullptr_t )?
13:28 mornfall actually, nad -fno-inline vyhraje jen __attribute__((always_inline))
13:28 mornfall jak máš definovaný NULL?
13:28 xstill to nevím úplně jak zjistit
13:29 mornfall co se stane když tam napíšeš 0?
13:29 mornfall ne že by 0 neměla magický vlastnosti pokud jde o pointry
13:29 xstill totéž
13:31 mornfall A null pointer constant is an integral constant expression (5.19) prvalue of integer type that evaluates to zero or a prvalue of type std::nullptr_t. [...] A null pointer constant of integral type can be converted to a prvalue of type std::nullptr_t.
13:31 mornfall takže jo, “null pointer constant” může být nullptr_t když chce
13:31 mornfall (a 0 je null pointer constant)
13:32 xstill hm
13:43 xstill což ovšem nevysvětluje proč shared_ptr< int >( NULL ) funguje ale kyž si zadefinuje strukturu s konstruktoryu A( T * ); A( std::nullptr_t ); tak A< int >( NULL ) nefunguje
13:43 xstill aha
13:44 xstill protože tam je typename< Y > shared_ptr( Y * ) takže ten nullptr má přednost
14:06 xstill spito: cos je nechával programovat u těch variadických šablon?
14:17 xstill tohle je truchu úchylný http://www.boost.org/doc/libs/1_57_0/libs/phoenix/doc/html/phoenix/modules/operator.html
14:20 mornfall tak, to je zhruba jako boost lambdy (c++98)
14:21 mornfall http://www.boost.org/doc/libs/1_57_0/doc/html/lambda.html
14:25 xstill hm, ještě potřebuju vymyslet nějakej pěknej příklad na přetěžování
14:29 spito xstill: jenom printf
14:30 spito nic víc nedali
14:30 xstill tak to docela stačí asi
14:34 xstill hm, problém je, že mě připadá, že pravidla pro přetěžování funkcí zhruba vysvětlím za pár minut, ale nedokážu odhadnout, kolik budou studenti potřebovat aby to dali
14:34 xstill takže nevím jestli je rozumné k tomu něco přidávat zajímavějšího
14:36 xstill aha ještě odvozování typů parametrů jsem tam chtěl dát
14:36 xstill ale to mi s příkladem taky moc nepomůže asi…
14:43 spito hele, stačí jim dát něco malýho, oni to stejně za tu hodinku nedají
14:43 mornfall to je optimismus teda
14:44 xstill koukám
14:49 spito to je realita
15:24 spito za jaké situace dostanu SIGCHLD?
15:33 spito muhehe, ono to prostě nemůže takhle fungovat
15:33 spito takže - je tam deadlock
15:33 spito zamrzne to ve funkci __lll_lock_wait_private
15:34 spito a to celé, protože malloc není signal-safe (aspoň co jsem se dočetl)
15:35 xstill nojo, ono skoro nic není signal safe :-(
15:35 spito a tohle se stane jednoduše když zrovna, když někdo něco alokuje, tak si dítě dovolí zdechnout
15:35 spito takže tak
15:36 spito a vůbec, my nemáme SIGCHLD vůbec nikdy chytat, ne jenom v případě POSIX
15:36 xstill hm, aha za to teda může ten _report->final předpokládám, ten bude asi celkem alokovat
15:37 spito nope, stačí sysinfo::Info::Info()
15:37 spito to je celkem jedno
15:37 xstill jo no, otázka je co s tím teda
15:38 spito nechytat SIGCHLD
15:38 spito protože my si ho pak vyzvedneme pomocí wait4
15:38 xstill tak totéž může nastat i při jiném signálu
15:38 xstill ale nechytat SIGCHLD je asi celkem rozumné
15:39 spito jenže to je v #define POSIX preprocessor-bloku
15:39 spito a teď - kdy je definován POSIX?
15:39 spito můžu to jen tak oddělat?
15:39 xstill v brick nikdy, mělo by se tam používat něco jako __unix nebo tak
15:40 spito ale tohle je tools/divine.cpp:202
15:40 xstill oddělat ne, pochybuju, že na windows bude wait4
15:40 spito v bricks se to dělí na _WIN32 a na jiné
15:41 spito (aspoň co jsem zahlédl)
15:41 xstill hm, to je ovšem pozoruhodné, že POSIX se nedefinuje a rozbilo se jen toto
15:41 xstill #ifdef __unix bych řekl
15:42 xstill totéž nahoře u resurce
15:46 mornfall jasně, ten #ifdef tam zůstal omylem žejo :)
15:46 mornfall preprocesor
15:47 mornfall ten má chránit to že ta fce co to volá jinde neexistuje
15:47 spito mornfall: předělat POSIX na __unix, nebo spíš oddělat?
15:47 mornfall no, na windows to bez toho #ifdefu neprojde
15:48 spito jj, jsem ještě projel celý divine a ještě jsem našel jeden ifdef POSIX v brick-mmap.h
15:48 spito to je ještě relikt z wibblu
15:48 mornfall ano
15:49 mornfall no, správně by to bylo tak (ten signal handler) že to někde nastaví praporek
15:49 mornfall a někdo ho bude kontrolovat
15:49 xstill nojo, tam je problém kdo a kde
15:50 spito jako třeba resource guard?
15:50 spito teda...někdo jako resource guard
15:50 mornfall ne
15:50 mornfall ono to tak udělat nejde
15:50 xstill no problém je, že pokud nastavíš praprek tak ten program pokračuje vesele v běhu
15:50 mornfall já jen říkám správně ve smyslu že to je jediný jak zaručíš že to bude vždy fungovat
15:52 xstill jako šlo by udělat to, že divine se na začátku forkne a jen ten druhej bude počítat a ten první chytat signál až ten druhej umře, ale to je taky pěkně nepraktický (pro debug a navíc by report musel být ve sdílené paměti)
15:52 mornfall to nefunguje
15:52 xstill proč?
15:53 mornfall kdyby se předělalo Info tak snad
15:54 xstill však neříkám, že se to dá jednoduše udělat, už mít report ve sdílený paměti není triviální
15:55 xstill a asi to za to nestojí
15:56 mornfall to už dává mnohem větší smysl mít v reportu alokovanej char * na kterej můžeš zavolat write( 1, ... )
15:57 mornfall a periodicky updatovat ten v „normálním“ (ne-signal) kontextu
15:58 spito mornfall: ten poslední patch (reorder catch caluses) jsi přijal, nebo ho mám poslat znova?
15:59 mornfall mám ho ve stromě ale nedělal jsem push ještě
15:59 spito tohle by to mělo snad opravit
15:59 spito pačéééé
16:00 mornfall ginxýýý
16:01 spito parse error
16:03 mornfall spito: no, hrajeme si na webservery bez prvního písmenka ne? :P
16:07 spito a co ta věc s tím lcov?
16:07 spito a ještě abych byl rýpavý - gcc_hashcomp asi taky úplně nepotřebujeme
16:08 mornfall co s lcov?
16:09 spito make: *** No rule to make target `lcov-report'.  Stop.
16:10 mornfall kde to vidíš?
16:10 mornfall jsem myslel že to xstill už opravil
16:10 spito http://divine.fi.muni.cz/hydra/build/8287265/log
16:10 spito například
16:14 mornfall i když je pravda že to opravil dost blbě :P (type error)
16:15 mornfall asi to musím víc kontrolovat
16:16 spito (jako bys byl dokonalý, ó nejvyšší)
16:16 spito (to jsem ti chtěl dneska celý den napsat...a teď se mi to povedlo, juchů)
16:16 mornfall wat
16:52 xstill jak blbě?
17:30 xstill // ??/
17:32 mornfall no říkám, type error :) DEV_GCOV je bool
17:32 mornfall ale ono to i tak nefunguje
17:32 mornfall pushnu opravy až budou
17:33 mornfall (soon)
17:33 spito hej, tady se to shromažďuje, nejdřív "ginxýýý" (co to jako má být), teď kouzelné "// ??/"
17:33 spito asi si taky něco vymyslím
17:33 mornfall no, tohle vypadá jako bug
17:34 xstill mornfall: aha, byl jsem trochu mimo asi když jsem ten patch dělal
17:34 xstill spito: http://en.cppreference.com/w/cpp/language/operator_alternative
17:34 spito xstill: ten stav znám :)
17:34 xstill :-D
17:34 mornfall pf
17:34 mornfall já to mam furt :-)
18:02 spito mornfall: a co ten wibble?
18:53 xstill hm, clang nemá limit na počet kroků constexpr evaluace
18:54 xstill a segví
19:00 xstill ale zase umí i C++14 constexpr s for cyklama a tak
20:13 xstill tyjo druhej s 256, to je fakt už moc na mě
20:14 mornfall jakých 256?
20:14 mornfall sockety?
20:15 xstill jo
20:16 xstill nojo, protože strcpy, žejo
20:16 xstill ach jo
20:16 mornfall jistě
20:18 mornfall ale tak spito minule vyrobil stejnou chybu
20:18 xstill hm,tak já je teda za to nezabiju
20:19 mornfall tak, spito by nám mohl chybět
20:19 spito :P
20:22 xstill tak spita bych za to nezabíjel :-D
20:35 spito no tak jasně, já jsem přeci úplně vadnej
20:36 spito nenosím vousy
20:36 spito jím maso
20:36 spito hrabe mi
20:36 spito a nemám rád moc teorie
20:36 spito takže sem tam malé zabití přeci nemůže uškodit :P
20:37 xstill spito: nojo, fakt ti hrabe :-P
20:37 xstill ale mě už dneska taky
20:37 xstill a možná nejen dneska
20:37 spito a ty si vymysli, v kolik chceš v sobotu vyjíždět
20:37 spito jo a taky bych rád věděl, jak si nainstaluju Boost
20:37 spito a jak ho pak použiju pro divine
20:38 spito a taky jak použiju ncurses, který jsem si už nainstaloval
20:38 xstill na antee? nix-env -i boost nejspíš?
20:39 xstill nebo -Dboost_INCLUDE_DIR=$(nix-build -A boost "<nixpkgs>")/include
20:39 xstill na cmake
20:43 spito tak a jak na curses?
20:44 spito protože těm je potřeba nastavit 3 proměnný a asi bych rád věděl, jak se to liší
20:47 xstill nevím, budeš muset zjistit, co tam ten cmake chce
20:51 spito cmake .. -DBoost_DIR=$(nixový nesmsl) nefunguje
20:51 spito vůbec to tam neuloží
20:52 spito tak nic....
20:52 spito už to funguje...možná
20:52 mornfall fakt musíš nastavovat INCLUDE_DIR
20:53 spito a ta možnost Boost_DIR tam je pro srandu králíkům?
20:53 mornfall to se zeptej nějakýho vývojáře cmake-u (nebo boost-u, nevim kdo ten modul psal)
20:54 xstill aha to je přímo detekce z cmake?
20:54 xstill to dává smysl, on boost má i kompilované části ne všechno jsou hlavičky
20:54 xstill jen my ty kompilované krámy nepoužíváme
20:58 spito zpátky k ncurses
20:59 spito co je všechno potřeba nastavit, aby to cmake našel?
21:10 spito ten cmake, to je porod
21:11 xstill tak existují i horší věci, ale naštěstí jsem se v nich nikdy nemusel moc hrabat (ale jestli jsi někdy viděl obsah průměrného configure skritpu…)
21:11 xstill a teda jak to donutit najít curses si nepamatuju
21:12 spito no tak nakonec se mi to povedlo
21:12 spito ale boj
21:15 mornfall život je boj, ano
21:15 spito zrovna konfigurace by nemusela být boj
21:15 spito zvlášť když to mají používat i jiní lidé
21:16 spito (a když se do toho vloží nixos, tak to teprve začíná)
21:17 xstill jiní lidné nemusejí používat nixos většinou, ale když už musí tak se jim to z nějakého důvodu moc nelíbí
21:32 spito mornfall: proč jsou testy poznačeny jako [vanilla]?

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