TimToady | %-15f, heh, won't ask who installed that one... | 00:37 | |
01:03
Mouq joined
01:32
d4l3k_ joined
|
|||
diakopter | TimToady: | 01:34 | |
01:43
lue joined
|
|||
TimToady | .oO(Nobody strikes again!) |
01:47 | |
02:12
jnap joined
02:51
Mouq joined
03:28
ozmq joined
|
|||
ozmq | everybody++ for release | 03:30 | |
04:10
ozmq joined
04:39
Mouq joined
06:27
Mouq joined
08:13
FROGGS joined
08:15
Mouq joined
08:26
odc joined
09:05
cognominal joined
09:16
Mouq joined
13:09
Mouq joined
13:43
bibifuc_ joined
13:52
ggoebel1112 joined
14:02
camelia joined
14:57
Mouq joined
14:58
ggoebel1112 joined
15:07
jnap joined
16:45
Mouq joined
|
|||
timotimo | in MVMString.h there's a reference to "lower_index" and "higher_index" that's supposed to be in the MVMStrand struct | 16:56 | |
those do not currently exist there | |||
what'll it be? | |||
FROGGS | could be about unicode codepoints <=0xFFFF and >0xFFFF too, no? | 16:58 | |
not looked at the code though | |||
17:07
FROGGS[mobile] joined
|
|||
diakopter | no | 17:07 | |
the .h comments are out of date, not speculative | |||
or they were renamed | 17:08 | ||
timotimo | right. | 17:12 | |
can you update them? | 17:13 | ||
diakopter | the 'no' was to Froggs | ||
timotimo | ah | 17:23 | |
FROGGS[mobile] | tss | 17:24 | |
[Coke] | moar at to 28673 today. | 17:36 | |
s/to// | |||
17:39
ggoebel1112 joined
|
|||
timotimo | (gdb) print *result | 17:57 | |
"r(NQPCORE)(.setting.moarvm)" | |||
that's the result of a concatenation :) | |||
a rope! :D | |||
okay, so a pretty printer for string, that's done | 18:03 | ||
now i suppose i can display some extra info for MVMObject* | |||
[Coke] | timotimo++ | 18:04 | |
18:07
FROGGS joined
|
|||
timotimo | i forgot again: how exactly do i get to the name of something? | 18:09 | |
i know how to get the name of the repr, so that much is known | 18:12 | ||
jnthn | timotimo: With difficulty at present, if you're in C land. | 18:19 | |
timotimo: 'cus you'd have to call .name on the meta-object, but that'll drop you back into the runloop. | |||
timotimo: For these kinda things I've pondered having a way to set a debug name on an STable, which we hold as a simple C string (in utf-8)... | 18:20 | ||
timotimo | hm, right | 18:24 | |
is there a sane way to have an inferior runloop like what i've heard exists somewhere in parrot land? | 18:25 | ||
don't we need something like that for callbacks from c land anyway? | |||
jnthn | There's no sane way to have inferior runloops. | 18:26 | |
TimToady | that depends on whether the subcode expects it to run immediately, or can just schedule it to run | 18:27 | |
if you can just schedule it, then it's not an inferior runloop | |||
timotimo | hehe. | ||
jnthn | Moar doesn't have them at all. We may allow a *very* limited form for callbacks from C land that must execute synchronously, but it will be deliberately written as unreusable code to make sure people don't use it for anything else. | ||
TimToady | "Here be dinosaurs!" | 18:28 | |
jnthn | Parrot made inferior runloops easy and the consequences were...painful. | ||
r: sub foo($x = take 42) { }; say gather foo() | 18:29 | ||
camelia | rakudo-parrot 8ae2de, rakudo-moar 8ae2de: OUTPUT«42» | ||
..rakudo-jvm 8ae2de: OUTPUT«control operator crossed continuation barrier in sub foo at /tmp/tmpfile:1 in block at /tmp/tmpfile:1» | |||
jnthn | r: sub foo($x = take 42) { say "and we got here" }; say gather foo() | ||
camelia | rakudo-jvm 8ae2de: OUTPUT«control operator crossed continuation barrier in sub foo at /tmp/tmpfile:1 in block at /tmp/tmpfile:1» | ||
..rakudo-parrot 8ae2de, rakudo-moar 8ae2de: OUTPUT«and we got here42» | |||
jnthn | I'm a little surprised that one works out on Parrot :) | ||
FROGGS | jnthn: it works!! | ||
jnthn | r: sub foo($x = take 42, $y = take 43) { say "and we got here" }; say gather foo() | 18:30 | |
camelia | rakudo-parrot 8ae2de, rakudo-jvm 8ae2de, rakudo-moar 8ae2de: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfileVariable '$y' is not declaredat /tmp/tmpfile:1------> sub foo($x = take 42, $y⏏ = take 43) { say "and we got here" }; s…» | ||
jnthn | r: sub foo($x = (take 42), $y = take 43) { say "and we got here" }; say gather foo() | ||
camelia | rakudo-jvm 8ae2de: OUTPUT«control operator crossed continuation barrier in sub foo at /tmp/tmpfile:1 in block at /tmp/tmpfile:1» | ||
..rakudo-parrot 8ae2de, rakudo-moar 8ae2de: OUTPUT«and we got here42 43» | |||
jnthn | Yeah, I'm a bit surprised Parrot manages that one :) | ||
I thougth there'd be a continuation barrier there. | |||
Oh, but it's done with coroutines, which aren't implemented atop of continuations | 18:31 | ||
So we perhaps get away with a bit more. :) | |||
r: sub foo($x = (take 42), $y = take 43) { say "and we got here" }; my @a := gather foo(); say @a[0]; say 'here'; say @a[1]; # curious about this one | 18:32 | ||
camelia | rakudo-jvm 8ae2de: OUTPUT«control operator crossed continuation barrier in sub foo at /tmp/tmpfile:1 in block at /tmp/tmpfile:1» | ||
..rakudo-moar 8ae2de: OUTPUT«42here43» | |||
..rakudo-parrot 8ae2de: OUTPUT«42here43Nominal type check failed for parameter '$y'; expected Any but got Mu instead» | |||
jnthn | Oh my. :) | ||
TimToady | it's not clear to me that gather/take should be implemented with a control exception in any case | 18:38 | |
especially if that implies a stack search every take | 18:40 | ||
well, I suppose the destination can be cached locally | 18:45 | ||
jnthn | Yeah, I think control exception is probably the right way, and then find a caching approach. | 18:46 | |
We need a caching approach for dynamic variables too, I think. | 18:47 | ||
TimToady | that could be a big speedup in spots | ||
jnthn | getdynlex used to be a whopping 5% of the entire CORE.setting compilation time on Moar | ||
TimToady | depending on depth of nesting of dynamic scopes | 18:48 | |
jnthn | It's down to a still-too-high 2.something% now, after I implemented caching of hash coes for strings... | ||
*codes | |||
TimToady | well, find some more 20%ers first :) | ||
FROGGS | multithreaded NFA evaluation! | 19:13 | |
jnthn | If you think NFA evaluation is a bottleneck, you didn't read the profile yet :P | 19:20 | |
FROGGS | hehe | 19:22 | |
20:01
jnap joined
20:49
jnap joined
|
|||
diakopter | read what profile | 20:59 | |
(did I miss an url?) | 21:08 | ||
FROGGS | there was none | ||
jnthn | diakopter: Just meant a profile of CORE.setting compilation | 21:10 | |
diakopter | do you have a screenshot or xls or something? :) | ||
jnthn | 'fraid not... | ||
Just been looking at it in VS | |||
diakopter finally gets to working on the hll profiler again | 21:11 | ||
diakopter reads kcachegrind.sourceforge.net/html/Ca...ormat.html | 21:12 | ||
hm, incomplete | 21:18 | ||
[Coke] | jvm still borked. parrot now in the lead, followed by moar. | 21:19 | |
s/still/re-/ | |||
diakopter | jnthn: should all the profiling options be configure-time, or just 1 configure-time and most others invoke time? | 21:21 | |
FROGGS | [Coke]: I just unborked jvm | 21:22 | |
25 minutes ago, to be exact | |||
[Coke] | FROGGS++ | 21:23 | |
jnthn | diakopter: What kind of options do you have in mind? | ||
diakopter: Is the Configure time one you had in mind "build with profiling support"? | 21:24 | ||
diakopter | the default would be to count/time callsites|staticcode tuples and its tree (or graph!), but then optionally also count/time each opcode | 21:25 | |
could also count reprops, ish | 21:26 | ||
yes, one configure-time to enable the profiling checks overall | |||
jnthn | The first is probably good enough to get some decent data. | ||
Could per-op be a big slowdown? | |||
(if not in use) | 21:27 | ||
diakopter | yeah, would need to be configure time | ||
jnthn | yeah, that was my guess | 21:28 | |
well, maybe a if (profiling_ops) at the top of the runloop could be fast enough to have it runtime configurable if you already did a profiling build. | |||
diakopter | well, rebuild is plenty fast :P | 21:29 | |
esp if you don't change any .h | 21:30 | ||
jnthn | aye | ||
Aside from the link time opts... | |||
diakopter | well, or .c :) | ||
my idea was to use averaging to summarize >1000 invocations, while still retaining the 2% of outliers on both ends, to avoid huge data explosion of the timings | 21:32 | ||
21:33
Mouq joined
|
|||
diakopter | that assumes single-hump distribution though, so there should also be an option to allow the data to asplode :D | 21:34 | |
jnthn: does that seem sane? | 21:36 | ||
jnthn | diakopter: Seems like you're better at statistics than me :) | 21:37 | |
diakopter: It *sounds* sane but I'm pretty bad at knowing what's reasonable when it comes to these things :) | |||
diakopter | maybe a smart bucketing system would be better | 21:38 | |
it's just I HATE that visual studio uses like 500MB of disk per second to profile. | 21:40 | ||
an instrumented build I mean | |||
I mean, seriously. | 21:41 | ||
FROGGS | SSD ftw | ||
diakopter | yeah but it also adds 10-20x slowdown overhead to do so. so a 4-second program run takes 30GB | 21:42 | |
(an otherwise 4-second program, I mean) | |||
that's with an SSD. | 21:43 | ||
FROGGS | yeah, I know what you mean | 21:47 | |
and then you actually have a problem to read in these 30gig, especially on windows | |||
diakopter | a sampling build/profile is much more efficient, but far less precise and informative | ||
jnthn | I've found them quite informative. | 21:48 | |
Agree they can't get the precision to the same level, though otoh they are less invasive... | |||
diakopter | could also trivially have it annotate a --dump output with the timings also, optionally, so once you're looking at the kcachegrind visualization, you can refer back to the dumped assembly view to see what each callsite called and its timings | 21:50 | |
for that matter... could intersperse the original source code into the assembly view :) or vice versa. | 21:53 | ||
"hmm, this 1 line of Perl 6 code created 46 static code frames and 9973 moarvm opcode instructions..." | 21:54 | ||
"that's a lot of inline/implied closures!" | 21:55 | ||
FROGGS | O.o | 21:56 | |
jnthn | Ooh, a 301s spectest. That's a new record... | 22:38 | |
22:38
FROGGS joined
|
|||
[Coke] | S05-mass ? | 22:40 | |
jnthn | [Coke]: ? | 22:41 | |
Does dir.t work for anybody at all? | 22:43 | ||
I think I've heard folks say it does, so I guess the explosion I'm seeing is just on Windows. | |||
22:45
FROGGS joined
|
|||
jnthn | nqp-m: my $h := nqp::opendir('.'); say(nqp::nextfiledir($h)) | 22:46 | |
camelia | nqp-moarvm: OUTPUT«.lesshst» | ||
jnthn | nqp-j: my $h := nqp::opendir('.'); say(nqp::nextfiledir($h)) | ||
camelia | nqp-jvm: OUTPUT«./.lesshst» | ||
dalek | arVM: 8286436 | jnthn++ | src/io/dirops.c: At least somewhat unbust dir on Windows. |
23:00 | |
diakopter | 500 error on github.com/perl6/nqp/commits/master | 23:14 | |
500 error on all the things | 23:15 | ||
timotimo | secmoar now forks a new moarvm, runs code in it and then fails waiting on it because the forked moarvm thinks its stdin wasn't initialised | 23:30 | |
diakopter | TimToady had a trick to fix that | 23:33 | |
timotimo | i think the handles are being overwritten, but i actually hacked a check in there :\ | 23:42 | |
i made a very dumb mistake to cause this | 23:58 | ||
jnthn just made one of those too :) | 23:59 |