dalek | arVM: 90b70eb | jimmy++ | src/core/coerce.c: Make MVM_radix return an array of integers |
01:19 | |
01:34
chipdude joined
|
|||
dalek | arVM: 05050fd | jimmy++ | src/math/bigintops.c: small fixes to MVM_bigint_radix |
01:37 | |
01:56
lue joined
06:48
woosley joined
07:28
woosley left
07:35
FROGGS joined
08:07
lizmat joined
08:10
nn8tr joined
08:11
lizmat_ joined
|
|||
dalek | arVM: fa49bd8 | jimmy++ | src/core/coerce.c: s/MVMnum64/MVMint64/ |
08:18 | |
08:37
odc joined
|
|||
nwc10 | jnthn: in assert_can_read() in serialisation.c, shouldn't this: | 08:53 | |
if (read_end > *(reader->cur_read_end)) | |||
be >= | |||
? | |||
oh wait, am I undercaffineated? | 08:54 | ||
I think both are exclusive bounds, not inclusive | |||
jnthn | nwc10: Yes, I've glanced that code before then concluded it's right as it is... :) | 10:09 | |
timotimo | before i continue work on the string stuff, i'll build a heap analyzer. | 14:06 | |
should be easy, since the objects all start with how big they are and have a pointer to the STable that tells me what the repr is at a fixed offset | |||
dalek | arVM/eieio: 598d1ab | jnthn++ | / (6 files): Preparations for refactoring I/O code. Adds a table of I/O operations, and starts preparing MVMOSHandle for working in this way. No functional changes yet. |
14:09 | |
arVM/eieio: 9f8b2f1 | jnthn++ | / (7 files): Start moving sync file I/O to new factoring. Goes far enough to pass NQP tests and Rakudo sanity tests, though some pieces are left to move over. |
|||
timotimo | oh yay! :) | 14:10 | |
old mcjnthn had a refarm | |||
tadzik | eieio sounds either like www.youtube.com/watch?v=ZZ5LpwO-An4 or www.youtube.com/watch?v=2h8569IrLgY :P | 14:13 | |
timotimo | I LOVE THAT SONG (heyyeyaaeyaaaeyaeyaa) | 14:14 | |
moritz had to think of www.youtube.com/watch?v=SQfMg0ejewk | 14:17 | ||
tadzik | wow, this guitar has two strings | 14:18 | |
timotimo | she took off all the other strings? | 14:19 | |
moritz | looks like it | 14:20 | |
tadzik | I think so, but I'd be super-impressed if she actually lost all the rest during the show and then improvised that song | ||
timotimo | really hard to make out in 240p | ||
moritz | she does lots of cool stuff | ||
timotimo | at one point the camera zoomb in pretty close and it does indeed look like that | ||
pretty cool | |||
tadzik | hello again, spotify | ||
moritz | she sings the background herself, records it and plays it back in a loop | ||
yes, the top two strings are still there | 14:21 | ||
tadzik | oh, the "Suddenly I see" hit is hers, nice | ||
moritz | I think "Black Horse and the Cherry Tree" is her best-known hit | 14:22 | |
timotimo shuffles all her stuff | 14:23 | ||
moritz | she's one of those artists where I get the impression that they really do it for the love of the music | 14:25 | |
tadzik | it feels that way | 14:26 | |
JimmyZ | jnthn++ | 14:31 | |
timotimo made a questhub quest for what he's doing | 14:32 | ||
JimmyZ | jnthn: I think we can flatten MVMIOOps too, same as MVMREPROps | ||
jnthn | JimmyZ: No. We're not. | ||
JimmyZ: There it made sense for performance. Here there's no need. | |||
JimmyZ | OK :P | 14:33 | |
jnthn | JimmyZ: One indirection is gonna be lost in the cost of IO, and all the memory is static anyway... | ||
FROGGS | jnthn++ | ||
JimmyZ | jnthn: I meant s/handle->body.ops->seekable->tell/handle->body.ops.seekable->tell/ | 14:37 | |
jnthn | JimmyZ: Yeah, but why do it? | 14:38 | |
JimmyZ: It makes it harder to maintain when you can't have something say "oh, I do none of that section" | 14:39 | ||
timotimo | i think i ought to get some more food so i can finish my breakfast ~_~ | 14:40 | |
JimmyZ is going to say good night :P | 14:41 | ||
timotimo | good night JimmyZ :) | 14:42 | |
jnthn | 'night, JimmyZ | 14:44 | |
dalek | arVM/eieio: 2b60c48 | jnthn++ | src/io/ (3 files): Move the rest of the file I/O into the new place. Except the logic in MVM_file_read_fhs, which is sufficiently wrong to just toss and do over. |
14:52 | |
arVM/eieio: a330d08 | jnthn++ | src/io/ (3 files): Refactor file handle case of standard streams. |
|||
arVM/eieio: f5d2313 | jnthn++ | src/ (2 files): Clean up most of old file I/O bits. Still can't quite get rid of fd in MVMOSHandle, as a few more things need moving first. 9a49896 | jnthn++ | src/io/ (3 files): Move truncate to new scheme. |
|||
15:29
FROGGS joined
|
|||
arVM/eieio: 14a7b99 | jnthn++ | src/ (4 files): Move file lock/unlock code. |
|||
arVM/eieio: fcb87b4 | jnthn++ | src/ (2 files): Final steps of moving file I/O out. With this, it's all now encapsulated in syncfile.c, and detangled from everything else. |
|||
jnthn | Well, that was step 1... | ||
FROGGS | of ? | 15:40 | |
jnthn | I/O cleanup/refactor | 15:41 | |
BinGOs | step 1 is admitting you have a problem | ||
jnthn | Oh, of how many... :) | ||
cognominal | There is no .ops for moarvm, does that mean, that all ops are generated from QAStOperationsMAST.nqp or am I confusing levels altogether? | 15:42 | |
jnthn | 7 more steps on my lsit here :) | ||
*list | |||
nwc10 | does that include the final beer? | ||
jnthn | cognominal: No, it just means we write interp.c directly in C ratehr than generating it | ||
cognominal: Though the meta-data is generated | 15:43 | ||
cognominal: See src/core/oplist | |||
nwc10: Hm, hadn't counted that, no :) | |||
cognominal | ok. thx. I am rereading you slides. So helpful. | ||
jnthn | cognominal: Which ones, ooc? | ||
nwc10 | jnthn: that was a bit of an oversight | ||
jnthn | nwc10: Well, I'm not sure I'll finish it today, so there may be multiple beer steps along the way... :) | 15:44 | |
cognominal | jnthn, these ones : github.com/edumentab/rakudo-and-nq...als-course | ||
jnthn | cognominal: ah, ok :) | ||
Seems we're at one new failing spectest as a result of the refactors so far, and it's clearly realted to me deleting one big chunk of code. :) | 15:45 | ||
(That I didn't put back yet.) | |||
cognominal | jnthn, btw, is there links to a video of the talk you gave at fosdem or to the slides? | 15:46 | |
15:47
d4l3k_ joined
15:52
japhb__ joined
|
|||
jnthn | cognominal: yes | 15:55 | |
t.co/11ZbReiKah | |||
is video | 15:56 | ||
jnthn.net/papers/2014-fosdem-perl6-today.pdf is slides | |||
cognominal | jnthn++ | 15:58 | |
16:03
ingy joined
|
|||
cognominal | jnthn it, is missing from www.jnthn.net/articles.shtml | 16:03 | |
jnthn | cognominal: Yeah, noticed that. :) Will add it. | 16:04 | |
timotimo | jnthn: wait, does this mean it's super easy to completely replace all IO functionality, for example if you're building a moarvm for a browser? | 16:06 | |
jnthn | timotimo: Well, it certainly isolates things a good bit more | 16:08 | |
timotimo | that's nice | ||
cognominal: i have made a "fixed audio" version of that video | |||
jnthn | timotimo: Not sure it's quite "super easy" in so far as we're likely missing hooks | ||
timotimo | it's not perfect, but it won't destroy your ears | ||
jnthn | timotimo: But shouldn't be hard to make happen. | ||
timotimo | easier than porting libuv to run on top of emscripten/NaCl? ;) | 16:09 | |
jnthn | Probably, yes ;) | ||
timotimo | <3 | ||
cognominal | timitimo, I can put up with a lot of noise to listen to jnthn :) But if you have an url for a fixed video, I would take it | 16:10 | |
jnthn | I'm currently working on a nice bytes => chars streaming thingy. I'll integrate that with file I/O first, and then will be in a good place to take on the tty, pipes, sockets, etc. | ||
16:10
jnap joined
|
|||
jnthn | cognominal: Does listening to me not imply noise? ;) | 16:10 | |
timotimo | t.h8.lv/Perl_6_what_can_you_do_toda...audio.webm | ||
cognominal | jnthn: meaningul noise is signal | 16:11 | |
timotimo | i can't find out which pieces of an object are pointers except by running the mark function, right? | 16:15 | |
jnthn | timotimo: Correct. | 16:16 | |
timotimo: All mark actually does is add to a worklist, though. | |||
timotimo | right. i could probably create a worklist from inside the gdb python plugin | ||
oh, not bad | 16:36 | ||
nqp-m -e 'say(1)' doesn't even run the gc once | |||
japhb__ | timotimo: It seems like it would be actively pessimizing if gc was required in order to start up and run a trivial program. | 16:44 | |
Now the real question is, does r-m GC in the same situation? | |||
timotimo | hehe. | 16:46 | |
yes, twice. | |||
once i have my heap-analyzer in place, i'll be able to give you much more info. | 16:47 | ||
ideally, it'll be able to diff the histograms of object sizes and reprs in the nursery and gen2 before and after a collection | 16:48 | ||
moritz: Hold On by KT Tunstall seems very familiar. is it a cover or did i hear her version on the radio at some point perhaps? | |||
japhb__ | timotimo: Ooh, I like that idea (diffing the histograms for great justice) | 16:55 | |
timotimo | nursery state: | ||
[====================] 100 % | |||
that's helpful! :D | |||
now i'll have to do crazy casting magic using the python interface to gdb o_O | 17:05 | ||
moritz | timotimo: semes to be her own song; has been aired on the radio a bit | 17:13 | |
timotimo | i see. that's pretty cool | 17:15 | |
hm. | 17:16 | ||
in what case would the STable's REPR not be valid? | |||
if the object itself is an STable? | 17:17 | ||
jnthn | STables are not objects | 17:18 | |
So yeah, if you try and REPR one, things won't end well | 17:19 | ||
timotimo | right. i'm now looking at the flag to see if it's an STable and only if it isn't try to get the REPR | 17:21 | |
Python Exception <class 'gdb.MemoryError'> Cannot access memory at address 0x10: | |||
sadly, this happens when i try to access REPR ^ | |||
oops, i'm doing it totally wrong :) | 17:23 | ||
jnthn: should i start looking from the fromspace or tospace pointer, ooc? | 17:27 | ||
it seems like starting from the fromspace makes it stop immediately, because it's after the alloc_limit | 17:28 | ||
jnthn | tospace is where we're currently allocating. | ||
timotimo | but starting at the tospace it seems to take forever?! | ||
timotimo just lets it run | |||
hm. well, the nursery *is* quite big, so ... | 17:29 | ||
ah, dang. | |||
i'm very unhappy that i don't get any details for those python-level exceptions except the type and message | 17:40 | ||
jnthn | err& | 17:46 | |
timotimo | gist.github.com/timo/544d3d75bd92932e635d | 17:51 | |
doesn't look too bad, methinks | 17:52 | ||
TimToady | obviously we use too many P6opaques :) | 17:53 | |
timotimo | that must be it! :) | ||
TimToady | a lotta P6codes too... | ||
timotimo | i shall build an extra histogram for P6opaque sizes, methinks | 17:54 | |
actually, i could even introspect the P6opaque to see what STables exactly have been inlined | |||
moritz | let's make more transparent objects instead! | 17:55 | |
TimToady | I see what you did there. | 17:56 | |
timotimo | gist.github.com/timo/544d3d75bd92932e635d | 18:06 | |
that's more helpful | |||
though i think the sizes ought to be sorted by size rather than occurence frequency | |||
i'm kinda surprised it outputs having only 1 stable | 18:07 | ||
oh, not really | |||
most stables are probably generated in gen2 from the very beginning | |||
gist.github.com/timo/544d3d75bd92932e635d <- proper sorting now | 18:19 | ||
18:30
benabik joined
|
|||
timotimo | next step is comparison of the current nursery state with the previous one | 18:49 | |
20:44
jnthn joined
|
|||
timotimo | jnthn: more huge commits coming up? :) | 21:33 | |
jnthn | timotimo: Well, I hit the place where I needed to build the tricky thing. | 21:35 | |
timotimo: So been plugging away that that. | 21:36 | ||
timotimo | okay. glad to hear you're progressing, though :) | 21:37 | |
jnthn | I'm around the point where I wire the big thingy up, and discover how many awful bugs it has :) | 21:38 | |
timotimo | it's a relief, isn't it? | ||
jnthn: do you have a specific wish for the heap analyzer? | 21:40 | ||
except "now do it for the gen2, too!" :) | |||
jnthn | Well, the first bug appears to have been a really silly one :) | 21:41 | |
timotimo | i was hoping i could continue my productivity at the hackspace | 21:48 | |
turns out i'm just slacking and socialising instead | |||
jnthn | bah | 21:50 | |
/* comment explaing why we don't free a buffer */ | 21:51 | ||
free(the_buffer); | |||
21:55
lizmat joined
|
|||
timotimo | :D | 21:57 | |
i think i want to build a semi-graphical representation of the allocation positions, so that we can see the fragmentation of the whole thing | 22:00 | ||
the braille unicode thingies should be good for that | 22:01 | ||
or the 1/4th blocks maybe | |||
jnthn | Well, the nursery is never fragmented | ||
gen2 is a little more interesting. | |||
timotimo | that's what i meant | 22:03 | |
jnthn | In theory it should not get too bad, though. | 22:05 | |
Becasue it's a bunch of sized heaps. | |||
timotimo | yup. we'll be able to see if that holds up well when i'm done with it :) | ||
jnthn | And it chains a freelist through it, thus taking the first one. | 22:06 | |
It would certainly be very cool to have data to tell us how that works out in practice. | |||
timotimo | yup | ||
my stuff is currently mostly "cool stuff" rather than "useful stuff" :P | |||
at le | |||
ast it seems so to me | |||
22:12
woolfy joined,
woolfy left
|
|||
jnthn | Commits coming up, I think. :) | 22:14 | |
timotimo | much excite! | ||
tadzik | muy interesante :) | 22:19 | |
jnthn | Well..hm :) | 22:22 | |
timotimo | hm. who else would be interested in heap analysis ... | 22:25 | |
jnthn: will the buckets that are free be nulled in addition to being in the free list? | |||
or in other words do i have to walk the free list to figure out which slots exactly are free? | 22:26 | ||
jnthn | timotimo: No promises about nullness. | 22:27 | |
timotimo: In fact, we memset 'em at the point of allocation. | |||
timotimo | OK, i'll walk the free list then | 22:28 | |
it seems like accessing data from the inferior from a python program is *really* inefficient, though :( | |||
22:44
lizmat joined
|
|||
dalek | arVM/eieio: d69938f | jnthn++ | / (7 files): Add decode stream mechanism for bytes => chars. We'll use this for the various kinds of IO we do, allowing us to get buffers of whatever size in, potentially with characters being over buffer boundaries, and get chars out correctly. Not perfect, still some optimization and cleanups to go and no doubt some bugs to find. Also, only UTF-8 supports decode stream so far. |
23:09 | |
benabik | Old McDonald had buffer, EIEIO. And in that buffer he had UTF-8, EIEIO. | 23:11 | |
dalek | arVM/eieio: ffeddd8 | jnthn++ | src/io/syncfile.c: Switch synchronous I/O over to use decode stream. |
23:12 | |
jnthn | Now readline doesn't call down to libuv for every single damn byte! | 23:15 | |
benabik | \o/ | 23:16 | |
timotimo | \o/ | ||
benabik | ^o^ oC /o\ | 23:17 | |
jnthn | One hang in spectest that I bet will be something silly, and one failure 'cus I only did the streaming decoder for UTF-8 so far. | ||
timotimo | m) | ||
the free_list is null-terminated? | 23:20 | ||
jnthn | Believe so. | ||
timotimo | sounds likely, even. | ||
jnthn | It's the obvious way it'd be, anyway. | ||
timotimo | yes | 23:25 | |
jnthn | Enough hacking for today, I think. | 23:36 | |
timotimo | i've got a scratching/tingling in my throat :( | 23:37 | |
jnthn | Tomorrow will be muchly swallowed by preparing/giving an evening talk... | ||
timotimo: aww :( | |||
timotimo: Cure it with beer? :) | |||
Anyways, I'm optimistic I'll have the IO branch landed during the weekend. | 23:38 | ||
timotimo | not such a big beer fan, tbh ;) | ||
jnthn | 'night, #moarvm | 23:42 |