Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2015-03-03

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

All times shown according to UTC.

Time Nick Message
16:43 spito hmm, neumíme Céčkové hlavičkové soubory v hávu C++
16:43 spito cstring.h a podobný
16:44 spito mornfall: nějaký tip, jak to opravit, než jen nakopírování těch douborů?
16:45 xstill spito: mělo by to být cstring, ne (bez .h)?
16:46 spito hmmm, trapas :D
16:46 xstill myslím že je to +- ten C soubor zabalený v extern "C"
16:46 spito no nic, zdrhám do školy
16:47 xstill do? není na to trochu pozdě?
16:47 mornfall xstill: no, asi chce stihnout cviko v 6
16:47 xstill aha :-D
16:48 spito mornfall: přesně ;)
21:47 spito mornfall: platí v Céčku nějaká jiná pravidla pro počítání s typem (void *)?
21:47 mornfall jiná než jaká?
21:48 spito no va_list je typedef na void *
21:48 spito a mám problém s tím, že mi clang nahlásí "arithmetic on a pointer to void" v momentě, kdy použiju va_arg
21:49 spito takže moje otázka je - jak to, že se _PDCLIB_print.c zkompiluje
21:49 mornfall přepiš si void na char
21:49 spito to taky udělám
21:51 spito jenom prostě nechápu, jakto, že se ty věci v pdclibu přeloží
21:51 mornfall necpeš si tam nějaký -Werror nebo něco?
21:51 xstill void* tuším neumí pointrovou aritmetiku vůbec
21:51 mornfall nebo nějaký divný -std?
21:51 mornfall xstill: to záleží
21:52 spito mornfall: cpu tam std=c++11
21:52 spito a třeba naše pthready s tím nejde přeložit
21:52 xstill tak ono je to celkem rozumné, není úplně jasné jak by měla fungovat
21:52 mornfall jo, protože c++11 vypíná extensiony
21:52 mornfall xstill: no, mně to je jasný dost :-)
21:53 mornfall teda -std=c++11 (místo třeba -std=gnu++11 nebo něco...)
21:55 mornfall ale dověděl jsem se zajímavou věc teď: pointer arithmetic is only defined on a pointer to an element of an array object and only if the result of the operation would be a pointer to an element in that same array or one past the last element of that array. If those conditions are not met, it is undefined behavior. (From C99 standard 6.5.6.8)
21:57 mornfall spito: hm, beru zpět, nepřepisuj ale přetypuj ;-)
21:57 mornfall spito: v tom va_arg
21:57 mornfall hm, přetypování je lvalue?
21:57 spito nn
21:58 spito rvalue
21:58 spito proč to nechceme mít defaultně jako char*?
21:58 mornfall takže *(char**)(&x) jo? :P
21:59 mornfall i když to je trochu chromý
21:59 spito mornfall: ale ne, to funguje
21:59 spito ale nejde z toho vzít reference
21:59 spito teda...adresa
22:00 mornfall teď jsi mě zmátl
22:00 spito no, tak to nefunguje :D
22:01 mornfall můžu napsat (char *)x = y?
22:01 mornfall to je divný ne? :)
22:01 mornfall možná vůbec nejlepší by bylo vyrobit jednobajtovej struct
22:02 mornfall já nevim...
22:02 spito a proč to nemůže být prostě char *?
22:02 mornfall tak může
22:02 mornfall ale optimální to není
22:02 spito a teda *(char**)(&ap) zatím funguje
22:02 spito ale to je nehezké
22:03 mornfall no nehezké to je, a možná to ani není úplně dobře
22:03 spito dobře to není proč?
22:03 mornfall teda ve smyslu že to možná vynutí nějaký zbytečný loady
22:03 spito jo tak
22:04 mornfall nevim jak se s tím popere překladač
22:04 mornfall asi tam napiš char * a budeme žít s tím že to je matoucí
22:04 xstill co to vůbec řešíte?
22:05 mornfall xstill: va_arg v external/pdclib/_PDCLIB_config.h
22:05 mornfall :372
22:05 mornfall :297 actually
22:06 xstill hm, neměl by se va_arg převádět na ten llvm krám rači? funguje tohle vůbec v divine? I když to je možná va_start vlastně…
22:07 mornfall xstill: jakej llvm krám? :-)
22:07 mornfall tohle funguje *jen* v divine
22:10 xstill no llvm má na to nějakej intrinsic ne?
22:12 mornfall má, ale není mi jasný čemu by to mělo pomoct
22:13 spito hmm, potřebuju definovat vlastní operátor new a delete
22:13 xstill tak já už vůbec ne, nevím jak to má fungovat
22:13 xstill spito: to proč?
22:13 spito nemůžu je nacpat do anonymního namespace, ani jim dát static
22:13 spito a když je poznačím jako inline, tak si překladač stěžuje
22:13 mornfall xstill: no, fungovat to má tak že by něco muselo ty implementace z těch maker vzít a zainlinovat je při načítání do divinu
22:14 mornfall spito: a k čemu to chceš?
22:15 spito protože malloc
22:15 mornfall jestli na __divine_malloc, tak void *mem = __divine_malloc(...); new (mem) typ
22:15 mornfall případně si to zabal do nějakýho construct
22:15 mornfall (Å¡ablony)
22:16 spito jo a přepisovat u toho celý libc++
22:16 spito to tak
22:16 mornfall ?
22:16 mornfall třeba poznáš k čemu je dobrej ten druhej šablonovej parametr u std::vector ... a tak
22:17 xstill tak v libc++ asi většinou chceme aby to new padalo, jinak by nemusel ten malloc padat nikdy
22:20 spito mornfall: to už mám implementovaný
22:20 spito ale potřebuju ještě opravit new
22:20 mornfall tak co se ti zase nezdá?
22:21 mornfall jaký new?
22:21 spito protože třeba shared_ptr
22:21 spito new totiž normálně volá malloc
22:21 mornfall co s tím má shared_ptr?
22:21 mornfall jistě, a tak to má být
22:21 spito no a ja nechci __divine_choice
22:21 mornfall do shared_ptr si dáš co chceš
22:22 mornfall mám trochu podezření že nemáš úplně jasno v tom jak new funguje :-)
22:23 spito std::make_shared
22:23 mornfall no, tak nevolej make_shared
22:23 mornfall když nechceš aby to umíralo
22:24 xstill no i tam asi chceš aby to simulovalo padnutí normálně
22:26 mornfall xstill: no však ano
22:27 mornfall ale on chce __divine_malloc
22:27 xstill no to chápu, jen nevím proč
22:27 xstill teda vím asi i proč ale nedává to smysl obecně
22:27 mornfall protože se mu nechce kontrolovat výsledek a nastavovat errno
22:27 mornfall (počítám)
22:28 spito mornfall: fs.cpp ;)
22:28 spito errno se nastavuje všide
22:28 spito *všude
22:29 spito jenom mi přijde zbytečný, aby to simulovalo umírání každý třetí příkaz
22:32 xstill no to záleží, pokud jsou to implementační detaily vfs tak to je zbytečný no, ale pokud by to mohlo nastat i normálně tak asi ne
22:32 xstill ale já jdu spát
22:32 spito já též
22:32 mornfall tak
22:39 spito error: rvalue reference to type 'unsigned int' cannot bind to lvalue of type 'unsigned int'
22:39 spito co mi to sakra říká?
22:39 mornfall rvalue *reference*
22:40 mornfall int &&x = y;
22:40 spito divná
22:40 spito *divný
22:41 mornfall test.cpp:3:11: error: rvalue reference to type 'int' cannot bind to lvalue of type 'int' int &&x = y;
22:41 mornfall to říkám ne? :P
22:42 spito ale jo, jenomže já nikde tyhle věci nemám
22:43 xstill tak to může být i parametr
22:43 spito problém je všude, kde volám std::make_shared
22:44 mornfall nesnažíš se to cpát do move konstruktoru?
22:44 spito fs-manager.cpp:13
22:45 mornfall std::shared_ptr< X > x = &y není to stejný co auto x = std::make_shared( y )
22:45 spito deklarace: fs-inode.h:151
22:45 spito co jsem přehlédl?
22:47 spito a hlavně proč mi to při přímém překladu (tj vně divine) fungovalo
22:51 mornfall nevim (ale fakt jdu do postele :-)
22:51 spito tak zítra

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