00:13
FROGGS[mobile] joined
00:50
jnap joined
01:25
ozmq joined
01:51
jnap joined
02:05
krunen joined
02:09
ozmq joined
02:20
ozmq joined
03:53
jnap joined
04:28
d4l3k_ joined
04:43
japhb_ joined
04:47
crab2313 joined
04:54
jnap joined
05:54
jnap joined
06:09
krunen joined
06:55
jnap joined
07:56
jnap joined
08:57
jnap joined
|
|||
FROGGS | o/ | 09:18 | |
timotimo | o/ | 09:24 | |
dalek | arVM/varint: 1eb0650 | (Timo Paulssen)++ | src/6model/serialization.c: an implementation of varint reading/writing |
09:38 | |
09:57
jnap joined
|
|||
nwc10 | japhb_: first thought - "don't know" | 10:44 | |
second thought, if "don't know" isn't good - write benchmarks in Moose. But make sure that everyone is happy that it's ideomatic efficient Moose | |||
because Moose vs Rakudo is the first comparison to be made | |||
(and perl6-m is getting close to Moose on *startup* time) | 10:45 | ||
third thought: once Moose is done, or if someone else wants to do it, also writing the code as "native" Perl 5 OO would be interesting too. (Not ugly hack micro-optimised code) | |||
but that's as much for a benchmark comparison of Moose to "native" as from Moose to Perl 6 | 10:46 | ||
but longer term, it's going to be interesting to see how perl6-m converges first on Moose startup performance, then on Moose runtime performance, and finally on "native" Perl 5 | |||
it may never get there, but I hope that that isn't the case | |||
FROGGS | I would be happy (very happy) if it would get close | 10:47 | |
nwc10 | but to make sure that perl6-m wins, ensure enough benchmarks use Unicode code points > 256 :-) | ||
FROGGS | because I am more efficient in P6 than P5 nowadays | 10:48 | |
timotimo | more efficient? as in lines of working code written or something? | 10:49 | |
FROGGS | timotimo: no, there are less P6 lines in the end usually :o) | 10:51 | |
but time span is shorter to solve a problem in P6 compared to P5 | |||
(when I don't need non-existent modules, that is) | |||
nwc10 | jnthn: slow thing update (Should have been yesterday) | 10:55 | |
Stage optimize : 201539.280 | |||
been at least a day in the next stage | |||
10:58
jnap joined
|
|||
nwc10 | also, will Moose and Perl 6 code look reasonably simlar? | 11:06 | |
er, similar | |||
11:12
woolfy joined
|
|||
tadzik | a bit; mop code is a lot closer | 11:14 | |
(stevan's p5mop) | |||
timotimo | yo tadzik :) | 11:16 | |
is the pod table replacement code still on the agenda? :) | |||
jnthn | nwc10: slow indeed! | 11:18 | |
nwc10: But no crash yet :) | |||
tadzik | timotimo: I guess :) I'll look through it today | 11:19 | |
timotimo | since it garbage collects so often, the memory usage is probably really low! :P | 11:20 | |
okay gotta run catch a train | |||
jnthn also goes to the station to go to the airport to go to the land of the fjords... | 11:22 | ||
& | |||
tadzik | _another_ land of the fjords? :P | 11:37 | |
nwc10 | well, I guess that southern Sweden considers northern Sweden to be the same country | ||
11:38
tgt joined
11:48
vmspb joined
11:59
jnap joined
|
|||
timotimo is working on varint support in the serializer | 12:27 | ||
FROGGS is fixing a segfault in v5@moar | |||
12:31
cognominal joined
|
|||
timotimo | oh? have you gotten past the repo conflict code already? | 12:40 | |
FROGGS | timotimo: yes, was pretty easy actually | 12:41 | |
was just about six or seven lines of nqp-p code that wanted translating | |||
and the currect segfault is just about moar being moar strict about stringifying than parrot | 12:42 | ||
timotimo | cool :) | ||
FROGGS | and moar segfaults when calling existskey on a null object, where parrot does not | 12:43 | |
timotimo | i need to find more spots to put varint instead of int64/int32 | ||
FROGGS | so, whatever I do to make it work under moar will alos be needed for jvm | ||
nwc10 | A further thought I had over lunch - I suspect that a "native" Perl 5 OO version of benchmarks would be very useful if it also runs under v5 | ||
FROGGS | what does that varint actually do? | ||
timotimo | i wonder if i need to consider aligning for serialization? probably not. | 12:44 | |
FROGGS | nwc10: to spot unreasonable slowdowns? | ||
arnsholt | timotimo: Yeah, serialization shouldn't need alignment | ||
timotimo | great | ||
nwc10 | FROGGS: not what I was thinking. Just would be curious to benchmark the exact same code running under v5 on MoarVM and the JVM as on the classic hairball. | 12:45 | |
timotimo | unfortunately i don't know enough about the data structures to have a good idea where a varint is better than an int32 or regular int | ||
like, the static sc id? | 12:46 | ||
13:00
jnap joined
|
|||
timotimo | meh. so many things are calculating nonvariable entry sizes :/ | 13:00 | |
13:02
krunen joined
|
|||
timotimo | a few times i get "using varints saved us 0 bytes!" and then a segfault %) | 13:07 | |
FROGGS | hehe | 13:08 | |
nice :o) | |||
JimmyZ | :-) | ||
timotimo | it asplodes in assert_can_read_varint | 13:10 | |
r: print 0x80.base(2) | |||
camelia | rakudo-parrot e51b6c, rakudo-jvm e51b6c, rakudo-moar e51b6c: OUTPUTĀ«10000000Ā» | ||
timotimo | aha. i never get "writing a varint array", but it does try to read a varint array | 13:16 | |
that doesn't s^Huqite make sense | |||
Attempt to read past end of string heap (index 5632) | 13:25 | ||
:( | |||
14:09
jnap joined
14:15
odc joined
14:31
woolfy left
14:33
woolfy joined
|
|||
timotimo | success! | 14:33 | |
14:34
woolfy left
|
|||
timotimo | after spending the whole train ride fixing several off by ones and zeros | 14:34 | |
one file during the rakudo compilation said: using varints saved us 1317935 bytes in serialization | |||
none of them give me a negative savings :)) | |||
using varints saved us 493557 bytes in serialization | |||
that's the biggest winning file from nqp | 14:35 | ||
14:35
woolfy joined
|
|||
tadzik | that's a full megabyte, nice :) | 14:36 | |
timotimo++ | 14:37 | ||
dalek | arVM/varint: e51cf28 | (Timo Paulssen)++ | src/6model/serialization. (2 files): first step towards using varint in serialization. serialize arrays of integers with varints as well as regular integers |
||
timotimo | i could already merge this, actually. but i'd prefer other people testing it a little bit first | ||
total 4.8M ā bootstrap files before rebuilding | 14:39 | ||
total 4.2M ā after | 14:40 | ||
not absolutely stunning, but i wouldn't want to miss it :) | 14:42 | ||
tadzik | 13%-ish better, I'll take it :) | 14:44 | |
timotimo | aye | 14:49 | |
moritz | probably doesn't warrant a rebootstrap yet | ||
timotimo | 98680maxresident ā say 1 right now | 14:53 | |
that's a tiny bit less i think | |||
AFK for now | 14:54 | ||
15:26
tgt joined
16:07
tgt joined
|
|||
jnthn waves from Oslo | 16:13 | ||
First weather this winter that's been cold enough to justify wearing my winter hat \o/ | |||
FROGGS | \o/ | 16:14 | |
JimmyZ | timotimo: there may be some s/int/varint/ in repr serialization/de-serialization too? | ||
timotimo | JimmyZ: maybe, yes. i'll have to make extra sure not to change them in places where the whole system expects a fixed length | 16:15 | |
or maybe change that together with the serialization/deserialization | 16:16 | ||
jnthn | timotimo: As a rule, anything in a segment described as data is a good candidate to apply varint to, and anything in tables is not. | ||
timotimo: And I think all writes of data are done through the writer->function mechanism. | 16:17 | ||
16:17
raiph joined
|
|||
nwc10 | jnthn: it's -8 here and snowing | 16:18 | |
jnthn | nwc10: ooh | ||
nwc10 | and I think that this is the first day this winter that it's got that cold | ||
jnthn | nwc10: That'd qualify | ||
nwc10: Exactly the same here, fwiw :) | |||
It's not been this cold down in south Sweden... | |||
16:18
jnap joined
|
|||
FROGGS | -11 and sunshine (in theory) | 16:19 | |
STable conflict detected during deserialization. | 16:23 | ||
aww | |||
jnthn | FROGGS: If you're getting that on one backend but not another, then it's something wrong elsewhere | 16:26 | |
FROGGS | jnthn: yeah, like twenty lines below the other one :o) | ||
jnthn: the other bit is working, but I won't commit unless you had the chance to review the patch | 16:27 | ||
until* | |||
jnthn | FROGGS: gist it, I had a good idea of what I expected to write... | ||
FROGGS: It's one of those things where if things work it's probably right, and if it's wrong things probably SEGV... | 16:28 | ||
FROGGS | gist.github.com/FROGGS/cc7e4db40bd18c1aec66 | ||
JimmyZ | good night | 16:29 | |
FROGGS | gnight JimmyZ | ||
jnthn | FROGGS: copy_to is allowed to allocate, so you'll likely want to root backup too | 16:30 | |
FROGGS: And the type object thing matters. | |||
FROGGS | jnthn: yeah, I was not sure if it would allocate or not | ||
ahh, k | 16:31 | ||
jnthn | FROGGS: I'd handle it by doing the current allocate/copy_to thing you do right now if it's not a type object | ||
timotimo | jnthn: i already added a write_varint function (as to not mess up tabular structures) | ||
FROGGS | jnthn: you can commit it if you want to btw | ||
timotimo | so i can 1) use it in reprs directly and 2) just set write_varint to write_int if the version number is too low | ||
FROGGS | (Justin Case) | 16:32 | |
jnthn | FROGGS: If it is one then MVM_gc_allocate_type_object can be used | ||
FROGGS: Hm, and should we be allocating the reposession conflict list... | 16:34 | ||
I had thought that got passed in... | |||
FROGGS | jnthn: the last chunk of the patch allocates the list | 16:35 | |
jnthn | yes, I know, I'm asking if it should | 16:36 | |
FROGGS: no, it souldn't | |||
void MVM_serialization_deserialize(MVMThreadContext *tc, MVMSerializationContext *sc, MVMObject *string_heap, MVMObject *codes_static, MVMObject *repo_conflicts, MVMString *data) { | |||
It should use the conflicts list that is passed in there | |||
Otherwise it just drops the conflicts on the floor, rather than actually passing them off for resolution... | 16:37 | ||
FROGGS | ohh | 16:39 | |
timotimo | ah. i just switched the NFAs over to varints | 16:41 | |
that ought to make a very big difference. | |||
jnthn | timotimo: oh, yes...very much so | 16:43 | |
timotimo | i made many changes :) | 16:47 | |
also many in p6opaque | |||
FROGGS | jnthn: gist updated | ||
timotimo | things like storing a "0 or 1" in an int16 will now save yet another byte. | ||
ah, i need fallback pointers for 32 and 16 bit integers that are to be read from a previous version | 16:49 | ||
FROGGS | damn, v5 forces me to implement openpipe | 16:52 | |
timotimo | heh :) | 16:53 | |
17:14
tgt joined
17:15
krunen joined
|
|||
FROGGS | I am unable to provide a code without v5 that show the STable conflict | 17:18 | |
:o( | |||
jnthn | FROGGS: Well, the only way it should ever happen is if you do something like trying to load two modules that both augment a class in different ways | 17:37 | |
timotimo | i've added varints throughout the reprs, but i seem to have missed something; i'm getting a segfault :\ | 17:39 | |
arnsholt | jnthn: I had a thought about the way P6opaque lays out things in memory | ||
D'you think it would make sense to order attributes so that they're in order of descending ALIGNOF? | 17:40 | ||
IIRC we just do them in order of declaration ATM | |||
It doesn't look like NQP or Rakudo use much in the way of int{8,16,32} or num32 ATM, but that'd cut some bytes off each instance in classes where they do get used | 17:41 | ||
timotimo | i think i found the issue and fixed it | 17:42 | |
we'll see :) | |||
oh no :( | 17:44 | ||
jnthn | arnsholt: Well, at the moment we depend in some places on it laying things out in order | 17:58 | |
arnsholt | Ah, right. What places depend on it? | 17:59 | |
jnthn | arnsholt: There's two cases really. One is that in some C / Java code we hard-code some structs or hints to get at stuff. | 18:01 | |
arnsholt: Even if we fixed that, the hint mechanism means you would have to do it within a given class, not over all the fields of the object, otherwise the hints won't be single-inheritance stable... | |||
arnsholt: One other consideration, mind, is that sometimes people who are thinking of performance will lay things out in a certain way deliberately, to put commonly accessed things together. | 18:02 | ||
arnsholt: Many MoarVM structs are this way. | |||
arnsholt | jnthn: Right, so probably not worth it, at least not at the moment | 18:18 | |
18:21
V_S_C joined
|
|||
V_S_C | gist.github.com/VSChawathe/7c0c7f9f69e4b50e8b79 | 18:22 | |
@jnthn this is with updated rakudo | 18:23 | ||
18:23
tgt joined,
V_S_C left
18:31
V_S_C joined
|
|||
V_S_C | The errors same as parrot | 18:32 | |
Only difference is with parrot backend it traced caller | 18:34 | ||
FROGGS | jnthn: I only augment classes in one module, this one indeed gets loaded, maybe even twice | 18:36 | |
timotimo | i'm not exactly sure how to look for this error :/ | 18:49 | |
gist.github.com/timo/a711c8450a80683c94e6 ā does this look busted? | 18:50 | ||
FROGGS | jnthn: the problem seems to be a custom postcircumfix declaration O.o | ||
18:52
tgt joined
|
|||
timotimo | i think i'll push my changes to the branch and note that it segfaults | 18:53 | |
dalek | arVM/varint: ce705b0 | (Timo Paulssen)++ | src/6model/reprs/ (5 files): teach the 6model reprs about varints this currently segfaults upon deserialization while building nqp. |
18:57 | |
timotimo | it seemed like i have replaced every write_int* with a write_varint and every read_int through a read_varint and every read_int* with an if/else to do the proper sized read or a varint read | 18:58 | |
but i must have missed something | 18:59 | ||
maybe i wrote something variable-sized into a table somehow? | 19:00 | ||
jnthn: maybe you'll see the probably obvious mistake i made when you come back from dinner :) | 19:05 | ||
diakopter | hi | 19:07 | |
diakopter updated vs2013 | |||
Microsoft (R) C/C++ Optimizing Compiler Version 18.00.21005.1 for x64 | 19:08 | ||
19:09
jnap joined
|
|||
timotimo | diakopter: would you like to look at the varint branch? | 19:16 | |
diakopter | well I finally realized how to do the profiler efficiently so let me finish that first | ||
(yes I know I'm slow at design/problem solving) | 19:17 | ||
timotimo | cool :) | ||
no, it's fine | |||
19:23
tgt joined
|
|||
timotimo | i see nothing obvious, but maybe i'll find out what's wrong by putting lots and lots of ints through the serialization and back | 19:50 | |
diakopter | :) | 19:54 | |
.oO( if only we had a way to deserialize stuff ) |
|||
timotimo | i wanted to do it inside gdb, but it doesn't seem to work properly | ||
d'oh | 19:55 | ||
i can just put a read directly after the write | |||
oh, yeah | 19:59 | ||
i did mess up | |||
a whole lot. | |||
jnthn | Where does it segv? | 20:03 | |
timotimo | it seems like i fail at writing out -1 | 20:04 | |
diakopter | jnthn: trying to decide where to put the profiling timestamp hooks - into MVM_args_setup_thunk or every ->invoke repr function | 20:07 | |
timotimo | i might be messing up my negation mask | ||
diakopter | can't really put it in the frame creation/allocation | ||
(I was assuming anyway) | 20:08 | ||
jnthn | diakopter: Why can't it go in MVM_frame_invoke? | 20:09 | |
timotimo | wait a minute | ||
where did my negation mask code go? | |||
diakopter | jnthn: well, sometimes the determination of which frame... | ||
oh, I guess we'll just have to imagine that always as included in the parent. | |||
jnthn | timotimo: It met with negation unmask code and was anhiliated | ||
diakopter | or mask mask | 20:10 | |
moritz | negation masak? | ||
timotimo | hehe | 20:13 | |
no, the negation mask code was on the read side | |||
i was looking at the write side | |||
turns out the write side wasn't the right side | |||
diakopter | you leftist | 20:14 | |
timotimo | it's not so easy to get a bitwise print-out of a piece of memory it seems >_< | 20:15 | |
diakopter | keep shifting by one and anding with 1 | ||
moritz | timotimo: (s)printf %b ? | 20:16 | |
timotimo | what, that exists!?! | ||
okay. it turns out i had been looking at the *address* of the value i read, not the value itself | |||
diakopter | :) | ||
timotimo | m) | ||
but 127 is still not -1 | 20:17 | ||
moritz | timotimo: uhm, at least perl's sprintf understands %b :-) | ||
timotimo | yeah, it turns out the line of code i put in there at one point and then commented out was correct in the end | 20:18 | |
diakopter | timotimo: of course, the fastest way is a lookup table of 65536 string representations of 16 bits | 20:22 | |
timotimo | :D | ||
sounds like a good idea | |||
diakopter | well, maybe | 20:23 | |
timotimo learns about git reset --patch and is quite happy | |||
okay, the bootstrap files are now down to 4.0 mb instead of 4.8 with the varint stuff | 20:26 | ||
and now i'll have a look at annotations | |||
the stuff that gets read in dissect_bytecode, is it suspected to be of fixed length? doesn't seem so to me. it's probably one-per-file at the very start | 20:29 | ||
huh, where does that stuff get written? | 20:31 | ||
ah, i see, in serialization.c of course | 20:34 | ||
er ... | 20:35 | ||
"concatenate_outputs", eh? | |||
jnthn | timotimo: What are you looking for? | 20:38 | |
The stuff read in bytecode.c is written by mast/compiler.c | |||
timotimo | ... oh? | 20:39 | |
jnthn | It's nothing to do with object serialization. | ||
timotimo | well, i was looking at concatenate_outputs and the dissect_bytecode function | ||
which seem to be the two parts of the same piece of data | |||
jnthn | Which concatenate_outputs? | 20:40 | |
20:40
arnsholt joined
|
|||
timotimo | serialization.c | 20:40 | |
diakopter | jnthn: should the continuations do anything to th etimings? | ||
jnthn | I suspect the code for emitting bytecode and serializing look superficially quite similar, probably 'cus they were primarily (at least originally) written by the same person. | ||
timotimo | but now i understand why it is the way it is | ||
jnthn | diakopter: Hmm... :) | 20:41 | |
diakopter: Distort them terribly, I should think :P | |||
timotimo | well, it's probably not too helpful to have varints there | ||
at least compared to the amount of trouble it is :P | |||
jnthn | timotimo: No, I think the serialization stuff is most helpful | 20:42 | |
diakopter | jnthn: well, I can make those pause | 20:43 | |
jnthn | diakopter: That may be best. | ||
timotimo | jnthn: and annotations, yeah? | 20:44 | |
jnthn | timotimo: Well, maybe annotations too... | ||
timotimo: Thing is that if we make them more compact, we make them slower to access | |||
I dunno what that means for diakopter++'s current work on profiling. | |||
timotimo | oh, annotations don't get deserialized? | ||
they get mmapped, too? | |||
jnthn | timotimo: Yeah, mmap'd and only read on demand. | ||
timotimo | in that case i won't touch them | ||
does a full rakudo compile suffice as a test if my serialization stuff is right? | 20:45 | ||
does a spectest add anything of value at all? | |||
diakopter | yeah the annotations are, like highly optimally architected | ||
jnthn | timotimo: Please spectest too | ||
timotimo | will do | ||
should i leave diagnostic code ifdef'd in the code? | 20:46 | ||
jnthn | timotimo: If you think we're likely to need it. | ||
timotimo: Could leave if ifdef'd there for a while and leave a ticket to remove it in a month or two once we don't run into any issues with it :) | 20:47 | ||
timotimo | right | 20:52 | |
first i'm fixing my statistics | |||
ah, haha | 20:58 | ||
buckets 0 to 9, that's 9 bockets, no? :P | |||
diakopter | jnthn: I'm asserting that microsecond resolution is plenty :) | ||
jnthn demands nanos! | 20:59 | ||
:P | |||
diakopter | will there be invocations less than a microsecond? | ||
jnthn | At the moment? I rather doubt it :) | ||
Was kidding about the nanos, in case it wasn't clear :) | 21:00 | ||
diakopter | hmm well I'll leave it nanos for now, even though many unices and windows don't even have nanos resolution | ||
we'll see how fast the gigs grow | |||
timotimo | the vast majority of varints are 2 bytes or 1, a whole bunch are 3, some are 4 | 21:01 | |
i've not seen any 8 or 9 byte sized varints during nqp compilation | 21:02 | ||
diakopter | 2 **32 nanoseconds should be enough for any invocation. oh wait. | ||
well certainly 2**36 anyway | |||
bah. | 21:03 | ||
moritz | 2**64-1 should be enough :-) | ||
timotimo | a few 5 byte big varints showed up just now during stage optimize | 21:04 | |
jnthn | timotimo: I guess you mean the stage after optimize, when it actually serializes... :) | 21:07 | |
diakopter | jnthn: what do I do with callsites that don't actually have callsites (the thunk things) | 21:15 | |
[where to mark that callsite as from] | |||
jnthn | diakopter: There's still always a callsite object... | ||
diakopter | yeah but | ||
doesn't help the output data trace it back to anything | |||
jnthn | diakopter: Whenever we do one of those we set the return_address in the current frame before doing so. | 21:16 | |
Or am I missing the point? | |||
The thunks don't really work too differently from any other invoke, though. | |||
diakopter | yes I'm just wondering how to represent it in the cachegrind visualization | ||
jnthn | Does it add value to, especially? | 21:17 | |
timotimo | jnthn: er, of course | ||
diakopter | well I just need something other than [someplace on line 44 of xxx.nqp] | ||
timotimo | so, how do i interpret the output of rakudo's spectest now? >_> | 21:18 | |
jnthn | timotimo: "is it different to before"? :) Or "is it different to daily roast" is a good approximation | ||
timotimo | i should try the latter | ||
jnthn | timotimo: If something fails that didn't in daily roast, you most likley busted something | ||
diakopter | jnthn: I just need some way to describe the callsite | 21:19 | |
jnthn | diakopter: Would the kind of op that did it be any use? | ||
diakopter: There's only so many ops that cause thunks... | |||
diakopter | bah, I'll just use current annotation | 21:20 | |
timotimo | the output of daily roast has a different format from mine, so it isn't a straight diff | ||
jnthn | "From smrt_strngfy thunk" or so | ||
timotimo: true | |||
timotimo | i'll just do a second run with master moar | ||
diakopter | yeah maybe | ||
but we don't preserve the current op | |||
well it could be re-derived. boo. | 21:21 | ||
jnthn | True | 21:22 | |
timotimo | a full spectest run in 400 seconds is soooo nice | 21:26 | |
even on my laptop | |||
diakopter | when it gets to 100 seconds it'll be even nicer | 21:28 | |
timotimo | not a single new failure in S01-S10 | 21:29 | |
jnthn | timotimo: Any chance you could time startup with and without the changes too? | 21:31 | |
timotimo | well, spectests took 9 seconds less | 21:32 | |
but i listened to music during the second run | |||
jnthn | timotimo: with them? | ||
timotimo | one second. | 21:33 | |
dalek | arVM/varint: eb8dc90 | (Timo Paulssen)++ | src/6model/serialization.c: turns out this is actually needed |
||
timotimo | without varints, it's about 0.20 seconds, so it's hardly measurable :) | 21:34 | |
well, almost exactly 0.23s elapsed | |||
jnthn: there is no measurable difference in startup time, but the maxresidentk for -e "say 1" went from always above 100_000k to never above 100_000k | 21:41 | ||
jnthn | \o/ | ||
Win, then. | |||
timotimo | more precisely: from never below 100_200k to never above 98_000k | 21:42 | |
jnthn | A 2.2MB saving. Nice. | ||
timotimo | do i have the captain's permission to perform the merging maneuver? | ||
except i called them varint128, which is wrong | 21:45 | ||
hm, actually | |||
jnthn | timotimo: Are you confident there's no way to feed crafted input to the varint decoder that will cause a buffer overrun?> | 21:46 | |
timotimo | p: say 7 * 9 | ||
camelia | rakudo-parrot c2982d: OUTPUTĀ«63ā¤Ā» | ||
timotimo | i think i need to give it special treatment for "there have already been 8 bytes" | ||
because then the 8th bit of the last byte must be used as number data rather than a flag wether or not to continue | |||
p: say 7 * 8 + 8 | |||
camelia | rakudo-parrot c2982d: OUTPUTĀ«64ā¤Ā» | ||
timotimo | then it checks out again | ||
tadzik | timotimo: where is the tables patch? | 21:48 | |
timotimo | tadzik: you did look at my pod stuff! | ||
i gave it to you and deleted all my copies forever!!!!!k | |||
tadzik | timotimo: I did | ||
noooo | |||
timotimo | nah, it's still somewhere | ||
tadzik | I hope you're kidding :P | ||
timotimo | let me dig. | ||
tadzik | gah, rong channel again :) | 21:49 | |
timotimo | tadzik: gist.github.com/timo/6132249 | 22:00 | |
tadzik | *whew*, saved :) | 22:02 | |
diakopter | jnthn: gah, all the various ways of leaving a frame | 22:03 | |
timotimo | jnthn: i don't think we've got a sufficiently big number to test the serialization "in the wild", so i'll write a module with big numbers in it :) | 22:04 | |
22:06
krunen joined
22:11
jnap joined
|
|||
diakopter | jnthn: what to do with multi-shot | 22:12 | |
dalek | arVM/varint: 6bb4d26 | (Timo Paulssen)++ | src/6model/serialization.c: special treatment for the last byte we need that to reach full 64 bits, otherwise we are short exactly one bit. and in the 9th bit we already know we're going to stop reading anyway. |
22:13 | |
jnthn | diakopter: All the ways of leaving a frame converge on remove_one_frame though :) | 22:15 | |
diakopter: We don't use multi-shot anywhere in Rakudo | |||
timotimo | dang, i segfault'd again :| | ||
diakopter | except continuation | ||
jnthn | diakopter: Our continuations are one-shot | ||
diakopter: uh, sorry | 22:16 | ||
diakopter | doesn't go through remove_one_frame | ||
timotimo | i'll finish this up after sleep & | ||
diakopter | timotimo: 'n | ||
jnthn | diakopter: Our continuations in theory support multi-shot, but they are only used as one-shot | ||
diakopter: Right, we don't leave the frame in any sense | |||
it's just no longer in the current caller chain. | |||
diakopter | yeah but I need to pause the timers | ||
ish | 22:17 | ||
hm, can time it in the continuation object itselr | |||
itself | |||
jnthn | We walk over all the frames we're suspending in continuations.c at some point, I think | ||
So could stop them there maybe | |||
timotimo | for the record | 22:21 | |
writing a normal script to a .moarvm file with --target=mbc --output=foobar.moarvm and then replacing the last piece of the perl6-m runner with that foobar.moarvm should work, yeah? | 22:22 | ||
huh. that doesn't even write a single varint128 | |||
jnthn | timotimo: should | 22:23 | |
timotimo | it also doesn't write out the summary of bytes saved and usages per bucket in serialization | ||
... oh wait ... | |||
i'm confused | |||
huh | 22:24 | ||
diakopter | jnthn: but.. cloning frames... | ||
jnthn | diakopter: the continuationclone op? | ||
diakopter: Pretend it ain't there. Again, never actually comes up in Rakudo. | |||
diakopter | why wouldn't cloning frames imply multi-shot | ||
oh | |||
jnthn | diakopter: When sorear++ did the continuations stuff for JVM, he made rather more work that we actually needed for gather/take in Rakudo. | 22:25 | |
diakopter | oh | ||
timotimo | i still kind of wish we could serialize away continuations :| | ||
jnthn | diakopter: I ported the stuff we really need carefully, and the rest is... <handwave> | ||
:) | |||
timotimo: In theory we could implement that in Moar. In practice, arrrghhh my brane. :) | 22:26 | ||
timotimo | jnthn: did i tell you how much i enjoyed using nagare in pythonland? they use stackless python's serializable continuations to freeze and thaw user sessions to an external database if they've been unused for a bit | 22:27 | |
jnthn | timotimo: How does that interact with deploying an updated version of the application? | ||
timotimo | you restart it and wipe the sessions | ||
jnthn | Figured as much... :) | 22:28 | |
timotimo | it's still a cool mechanism for that kind of idea | ||
because now you can write your logic as a coroutine and have it persist between sessions without having to be kept in the process' ram | |||
displaying two forms that ask for integers and showing one more page to display the result of the number's sum is just like show_result(ask_integer() + ask_integer()) | 22:29 | ||
A-HA! | 22:32 | ||
it segfaults even on moarvm master | |||
so my code is not at fault! | |||
jnthn: i think my branch is now ready to be merged. | 22:33 | ||
jnthn | timotimo: How did you segfault it,ooc? | ||
timotimo: Can you file an issue on it? | 22:34 | ||
timotimo: +1 to merge, it seems like an improvement without any real drawbacks | |||
timotimo | echo say "hello world"; >> othertest.pm | ||
perl6-m --target=mbc --stagestats --output testlib.moarvm othertest.pm | 22:35 | ||
/home/timo/perl6/rakudo/../install/bin/moar --libpath="/home/timo/perl6/rakudo/../install/languages/nqp/lib" --libpath="/home/timo/perl6/rakudo/../install/languages/perl6/lib" --libpath="/home/timo/perl6/rakudo/../install/languages/perl6/runtime" testlib.moarvm | |||
jnthn | ah, ok | ||
Could be a null thing | |||
timotimo | gist.github.com/timo/b7ee0a68eb7d819e57e8 | ||
jnthn | Loads of test failures seem to be to do with char lookup by name | 22:36 | |
FROGGS | jnthn: yes, at a given point the name lookup start spitting out wrong codepoints (with a small but increasing offset) | 22:39 | |
dalek | arVM/varint: cc57bd4 | (Timo Paulssen)++ | src/6model/serialization.c: varint128 is a bogus name, since it's 9bytes max. |
22:40 | |
arVM: 1eb0650 | (Timo Paulssen)++ | src/6model/serialization.c: an implementation of varint reading/writing |
22:42 | ||
MoarVM: e51cf28 | (Timo Paulssen)++ | src/6model/serialization. (2 files): | |||
MoarVM: first step towards using varint in serialization. | |||
22:43
dalek joined
|
|||
diakopter | FROGGS: the problem is not just the name lookup; it's also property lookup of those same codepoints | 22:49 | |
jnthn | OK. Fixing it will cut our failures about in half, anyways... :) | 22:52 | |
Time for some sleep here...teaching tomorrow | |||
o/ |