01:09 lizmat joined 01:16 nativecallable6 joined 01:17 unicodable6 joined, quotable6 joined 02:19 FROGGS joined 02:27 Kaiepi joined 03:04 ilbot3 joined 03:57 bloatable6 joined 06:41 domidumont joined 06:49 domidumont joined 07:01 brrt joined 07:16 ggoebel joined 07:31 domidumont joined
brrt good * #moarvm 07:42
07:51 domidumont joined 08:16 brrt joined 08:30 domidumont joined 08:46 zakharyas joined 09:04 zakharyas joined 09:05 zakharyas joined
jnthn o/ #moarvm 10:12
10:40 zakharyas joined 11:22 zakharyas joined
Geth MoarVM/jit-expr-optimizer: f6a2d57e0a | (Bart Wiegmans)++ | 2 files
JIT - use apply_template_adhoc everywhere

Much nicer than constructing an array and pushing it, and more importantly, I plan to start packing a good deal of information in the expression node itself, which would need cooperation of the template
11:35
brrt \o jnthn
jnthn; any opinion on the use of bitfields in structs 11:36
jnthn brrt: Hm, I think they're fairly widely supported, so should be fine to use? 11:38
brrt yeah, i think so to 11:42
they're probably nicer to use than 'raw' bitpacking 11:43
jnthn *nod*
12:15 domidumont joined 12:56 brrt joined 14:08 domidumont joined 14:19 ggoebel joined, committable6 joined 15:05 zakharyas joined
[Coke] reads webkit.org/blog/8048/what-spectre-...or-webkit/ 15:34
jnthn Interesting post 15:39
brrt hmm, maybe i should read that as well
btw 15:40
jnthn Looks like we need to put something into our make release target that explodes if the work tree isn't clean: github.com/MoarVM/MoarVM/issues/778 16:05
[Coke] ooooops
jnthn Possibly also a 2017.12.1 16:08
16:11 brrt joined, squashable6 joined 16:21 zakharyas joined 16:44 brrt1 joined
AlexDaniel` can't see why 2017.12.1 would be needed, what am I missing? 17:02
the tar is wrong, just fix it?
2017.12.1 point release would meanā€¦ a release on exactly the same commit? 17:05
and then people will be asking why is there a 2017.12.1 moar but no rakudoā€¦
[Coke] a 2017.12.1 *tar* is needed to fix the tar, yes? nice to also have a corresponding git commit to track against.
(since we don't want to have two tars with the same name) 17:06
We have had in the past, releases where there was a point release of one of the 3 components, but not all 3. I think that's explainable. 17:07
AlexDaniel` yeah also, the same release (but correct tar) is available on github
soooā€¦
jnthn But missing 3rdparty/
AlexDaniel` just fix the file
hmm 17:08
jnthn That's why we do our own tarballs
17:09 AlexDaniel joined
jnthn It's generally understood that release tarballs are immutable, however; I'd rather not violate that. 17:09
[Coke] jnthn++ for restating my intent clearly. :) 17:10
jnthn As for explaining stuff, 2018.01 is like, a week or so away, I guess? :)
AlexDaniel right
releasable6: next
releasable6 AlexDaniel, Next release in 11 days and ā‰ˆ1 hour. No blockers. Unknown changelog format
AlexDaniel but still, uhā€¦ rakudo 2017.12 is supposed to work with 2017.12 MoarVM 17:11
at least, that's what the VERSION file says
soā€¦ why don't we need rakudo 2017.12.1 then? 17:13
[Coke] VERSION is used by the 'make' process that invokes git, yes? so that part is still fine
(or is VERSION somehow used when building from tarballs?) 17:14
AlexDaniel no, but as a human I'd be using the same tarballed version that is claimedā€¦
jnthn No, you'd fetch and build the 3 tarballs independently if doing that. If there was a 2017.12 Rakudo Star, *that* would be impacted, however, since it bundles Rakudo/NQP/MoarVM
AlexDaniel maybe no need to be pedantic about that thoughā€¦ 17:15
jnthn Given the next release is ~10 days away, I don't think so 17:16
AlexDaniel jnthn: So I was thinkingā€¦ what about having all three releases (moar, nqp, rakudo) done in one go in an automated way?
like, it would avoid things like this, possibly 17:17
jnthn AlexDaniel: I'm OK with that in principle.
Well, this would have been avoided by a sanity check in "make release" also
I don't have time to make it happen, but I'm all for release automation if somebody has the time/motivation to work on it.
AlexDaniel well, I have a sakefile that I've been using for nqp+rakudo 17:18
extending it to moarvm should take very little time
jnthn And uploading the tarball is just a commit to the MoarVM website git repo 17:19
AlexDaniel at the time I was sure that we're doing moarvm releases separately for some good reason?
jnthn I don't think there was any good reason
It's just the way things were :) 17:20
AlexDaniel hmmm ok
I'll see what I can do then
jnthn The MoarVM release was something that I Just Did for some years, and it was pretty easy so I didn't mind :)
But I don't in the slightest bit mind having less release chores :) 17:21
17:23 coverable6 joined, benchable6 joined 17:39 bisectable6 joined 17:43 zakharyas joined 18:19 zakharyas joined 19:39 greppable6 joined 20:48 brrt joined 20:53 Voldenet joined 20:59 evalable6 joined 21:20 Ven`` joined 22:23 brrt joined 22:29 TimToady joined
timotimo brrt: i regret that i don't have any good ideas for how to go on with the jit 22:30
brrt ah, but, then i can probably help 22:31
but first, why the question? 22:32
22:32 releasable6 joined, statisfiable6 joined, reportable6 joined
brrt or the statement, really 22:35
anything in particular you'd like to achieve
timotimo no, just you asking about the lisp cond support 22:38
bbiab 22:41
brrt oh, the cond idea is just a simplification measure 22:51
the idea being that we can express all if/when constructs as COND blocks
which means that the optimizer can be more regular in the implementation 22:52
or at least, something like that
wasn't a terribly well-defined idea, in fact
and the drawback is that COND in it's normal form consists of pairs of ((condition?) (statement)) 22:53
well, that doesn't parse in the expr JIT compiler
so it'd have to be (COND (WHEN (condition?) (STATEMENT)) (WHEN (...) (...))) 22:54
which is fine and still regular, but then we have the second problem, which is that this would naively compile to a conditional jump -> block -> jump -> label ... sequence, and .. i thought you would have fewer jumps by grouping all the conditions 22:55
and the statements 22:56
jnthn Yeah, branches are costly
brrt i'm not exactly sure what i thought is true
jnthn So when we can spot opportunities to do calculation instead of flow control, it's preferable
A representation that makes that easier for an optimizer to spot opportunities for would seem good 22:57
brrt hmmm
one way to ensure the grouping of conditions in the generated code is to have the tiler use a specific iteration order for COND 22:59
which, in terms of complexity, has a very water-bed like quality :-)
jnthn: i found a tidbit you might find interesting 23:00
it turns out the java implementation of HashMap uses a bucket design with a red-black tree to implement the per-bucket set 23:04
since recently, instead of a LinkedList
jnthn Oh, interesting. 23:06
brrt and at first i thought that it made no sense, because whenever your hash table would be so overfilled as to make this make a difference, you should probably increase the number of buckets rather than switch data structures
jnthn Indeed
But? :)
brrt however i thought some more about it
this obviously gives you a O(n log n) worst-case retrieval and modification cost 23:07
and that, in turn, can protect you from some forms of DoS attacks (that would happen if i knew the hash algorithm, and/or hashes wouldn't be sufficiently randomized) 23:09
jnthn Oh, right. Interesting.
brrt now, nobody does that kind of attack on perl anymore because in perl hashes are randomized
and i would suspect java hashes are also randomized
but, what's different is that java programs tend to be relatively long living, and hash tables might be relatively long-living as well, in which case randomization is not sufficient protection anymore 23:11
also, the additional cost of using a binary tree over a linked list, again in java, is not so large (just one more pointer) 23:12
so actually, this kind of makes sense 23:13
jnthn Hm, interesting. 23:27
brrt by the way, do we still do lexical autoviv of objects on first access? 23:37
as in, internally to the VM, rather than with an explicit condition?
timotimo i only know we'll throw out attribute autoviv 23:41
brrt then, i am all for throwing out lex autoviv as well 23:44
jnthn Yeah, we still do it 23:49
I'd like not to, but $/ and $! exist in every routine, and not allocating a Scalar every time for them was a big win 23:50
We need to be sure we can eliminate that in other ways
brrt well, the obvious other way is to have codegen 23:53
insert an explicit check 23:54
and set
but that is going to make frames much larger
jnthn I was more thinking we always allocate them 23:56
And then if spesh can prove they are never accessed, it just tosses the initialization
brrt i like that idea
my alternative idea was to have a sp_getlex that would not autovivify, combined with an autogenerated conditional block with a bindlex 23:59
hmm, doesn't even have to be a full block though
could be an sp_getlex and an sp_lexautoviv