github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
jnthn :) 00:08
jnthn goes to get some rest
'night o/
00:19 buggable left, buggable joined 01:17 stmuk joined 01:19 stmuk_ left 03:24 stmuk_ joined 03:25 stmuk left 06:09 lizmat left 06:17 domidumont joined 06:23 domidumont left 06:24 domidumont joined
samcv good morning 06:36
Geth MoarVM: e94d3dfdb5 | (Samantha McVey)++ | 6 files
Remove previous hash handle pointers in hash implementation

This makes each hash handle 8 bytes (on 64-bit) smaller. It results in a speedup on my hash speed test by ~1% as well (likely due to more entries fitting in the cache) and reduces memory by 8MB with a million hash entries. The test wastes about half cpu on GC so likely the speed increase is at least 3% or more if just taking the hash impl. code into ... (10 more lines)
06:52
MoarVM: 0dd6ce5478 | (Samantha McVey)++ (committed using GitHub Web editor) | 6 files
Merge pull request #904 from samcv/remove-backref-hash2

Remove previous hash handle pointers in hash implementation
07:00 lizmat joined
Geth MoarVM: a50a0b15bb | (Samantha McVey)++ | tools/compare-oplist-interp-order.sh
Make compare-oplist-interp-order.sh more POSIX compliant

Replace things undefined things in POSIX shell with things that are. Noticed by CodeFactor.
07:08
08:48 robertle joined 08:51 domidumont left 09:01 lizmat left 10:11 lizmat joined 10:23 domidumont joined 10:29 MasterDuke left 11:41 Ven`` joined 11:59 MasterDuke joined
Geth MoarVM: samcv++ created pull request #905:
Test branch
12:17
13:35 Ven`` left 13:40 Ven`` joined 14:25 zakharyas joined
timotimo i wonder how often we try to add VMNull to a worklist in the gc, and if checking for VMNull in certain spots, like maybe VMArray, would be beneficial 14:55
14:57 reportable6 left, reportable6 joined 15:05 zakharyas left, zakharyas joined
samcv timotimo: well it was faster to not check from my timing. 15:06
15:06 zakharyas left
samcv but we could check if we need to, though i could measure the time difference 15:06
15:07 zakharyas joined
timotimo did you only check for null or for VMNull, too? 15:09
samcv oh. actually yeah it was just a null check 15:10
that it doesn't check for when worklist->include_gen2 is true
though i'd think it'd be even slower if we checked for VMNull as well
but you could bench it
timotimo hm, but VMNull will have its "it's in gen2" bit set, so it wouldn't end up in worklists in the minor collections anyway 15:16
16:04 zakharyas left 16:05 zakharyas joined 16:30 AlexDaniel left 16:33 AlexDaniel joined 16:36 Ven`` left 16:38 Ven`` joined
masak Juerd: I know I'm in a minority, but I'm _really_ cagey about junctions. and I say that as someone who originally loved the idea of junctions. 16:40
I got a twinge of jealousy when PEP 572 started talking about a "witness" to any() and all() 16:41
because at least one of the way people use junctions is to ask "is any() of the cards on hand an ace?"
"yep"
"well, which one?"
"beats me. search for it?"
which is where, to me, the idea goes from cool handwaving about "quantum superpositions" to not-so-helpful 16:42
sorry, that came out as overly negative :) but I do think there's something suboptimal about the way junctions are designed 16:43
the way junctions invade the type hierarchy and get special treatment in the dispatcher and fork the (green) thread of execution is also a part of why I don't want to rely on them too much 16:45
generally, you want to make wrong code look wrong, but junctions make wrong code look right. the interpretation of something becomes wildly different if it turns out it gets executed multiple times. 16:46
in summary, (a) not helpful enough, (b) based on questionable theory, (c) insane power/catastrophe balance 16:47
...hey, this is not #perl6... 16:49
sorry for the noise. *blush*
lizmat masak: so you're saying some function that converts a Junction to a Set matching a condition ? 16:56
geekosaur I think in that case you might do better with tracking conditions throughout? (or, this is better suited to a neural network than junctions, perhaps?) 17:02
not that you can introspect how a neural network came to its decision very well; every approoach has its drawbacks 17:03
17:07 zakharyas left 17:18 zakharyas joined 18:00 Ven`` left 18:24 brrt joined 18:28 Ven`` joined
brrt \o 18:38
18:51 Ven`` left 18:52 Ven`` joined
masak lizmat: I've been toying with the idea of "syntactic junctions", something like `$x == 1 | 2` compiling down to `$x == 1 || $x == 2`. they'd be strictly weaker than runtime junctions, but it's very rare I need/want that extra power. and they'd be a lot more predictable. 18:59
timotimo kind of just one step farther than 1 < $x < 4 turning into 1 < $x && $x < 4 19:01
19:04 zakharyas left
MasterDuke there are a bunch of logs that only optionally put a pid in the filename. given that rakudo runs multiple threads by default, should everything use a pid as standard (like MVM_TELEMETRY_LOG does)? 19:04
19:05 domidumont left 19:52 brrt left, brrt joined
lizmat masak: afaik, timotimo actually already did that in the Optimizer 20:10
20:10 brrt left 20:19 zakharyas joined, brrt joined
brrt hmm. we don't want to use C99 features if we can avoid it, do we 20:39
that's unfortunate, flexible array members would've solved my problem quite nicely 20:40
lizmat well, it looks like Perl 5 has been dependent on C99 for quite some time, judging from this perldelta entry: 20:42
metacpan.org/pod/distribution/perl...-compilers
that implies to me that some part of Perl 5 at least has been dependent on C99 features already
if you want to compile MoarVM on a 15+ year old compiler, what does that mean ? 20:43
MasterDuke isn't windows the problem? msvc doesn't support all of C99 or something like that? 20:44
brrt windows is always a problem
20:45 zakharyas left
lizmat masak: perhaps special case Junction.first and Junction.grep ? 20:45
m: dd (1|2|3).grep(1) 20:46
camelia any((1,).Seq, ().Seq, ().Seq)
lizmat or let .Seq coerce an "any" junction to its members ? 20:47
m: dd (1|2|3).Seq # instead of this, (1,2,3).Seq
camelia any((1,).Seq, (2,).Seq, (3,).Seq)
lizmat of have a function .eigenstates that creates a .Seq of the members of the Junction ? 20:49
(1,2,3).eigenstates.grep(1) # (1,).Seq
(1|2|3).eigenstates.grep(1) # rather 20:50
with "eigenstates" being a funny enough name for people to know their doing something potentially iffy ?
brrt okay, so i can't make an array-of-flexible-array-members 20:52
so let's ignore that one
masak lizmat: I guess what I'm after is not something that's "potentially iffy", but something that better accommodates that use case ;) 21:10
21:22 brrt left 21:42 stmuk joined 21:44 stmuk_ left
timotimo ha! 21:57
i just looked at a recent spesh log of JSON::Fast doing some parsing
there's lots of BBs that are inlined and only either one or two set instructions are all that remains 21:58
surely that was sink calls or something like that, but still 21:59
anyway, that's beautiful
oh, it's a two-level inline, via Seq.pm6's from-loop 22:01
looks like we often retain "identity" being inlined as two sets, one for the getarg, one for the return 22:05
22:06 robertle left
jnthn Yeah, we're not quite smart enough to do away with that yet :) 22:07
22:15 Ven`` left
timotimo oh jnthn, i found an easy win! 22:37
did you know that we don't discover facts when we see an sp_fastcreate?
jnthn hm, no :) 22:39
timotimo oh 22:47
the spesh slot in question stores the STable, but our facts refer to types rather than STables 22:48
that's ... not so great, is it? 22:49
jnthn We generally store whatever is most convenient :)
Well, more to the point, whatever makes it fastest to execute the operation in question
timotimo yeah, STable is most convenient for fastcreate to operate, but not for facts discovery
so, what now? add a second spesh slot argument to sp_fastcreate just to store the type object we got the STable from? 22:50
i wouldn't want to make sp_fastcreate slower by adding the extra pointer deref to get from the type object to the STable for the benefit of fact discovery later on 22:51
actually, do we perhaps always only need the STable when we talk about KNOWN_TYPE? 22:56
jnthn I don't see the problem; the type object is just available as st->WANT
oops
st->WHAT
timotimo oh, is it!
well, that's very easy, then %)
jnthn So can just do that to set the known type ;)
timotimo somehow i totally missed that
jnthn :)
timotimo let's run some tests ... 23:01
i would assume sp_fastcreate isn't the only sp_ op that's missing from fact discovery, actually 23:32
sp_getspeshslot could have known value, for example 23:33
sp_getwvalfrom should also get facts
but that could already be everything 23:34
jnthn *nod*
Yeah, worth doing that for inlines :)
timotimo oh, getstringfrom also could