Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes.
Set by lizmat on 24 May 2021.
00:02 reportable6 left 00:41 linkable6 joined 01:10 frost joined 01:11 frost left 02:04 reportable6 joined 02:07 frost joined 03:07 linkable6 left, squashable6 left, greppable6 left, reportable6 left, coverable6 left, bloatable6 left, committable6 left, benchable6 left, releasable6 left, shareable6 left, statisfiable6 left, evalable6 left, quotable6 left, tellable6 left, bisectable6 left, benchable6 joined, committable6 joined 03:08 releasable6 joined 03:09 shareable6 joined 03:10 reportable6 joined 04:07 squashable6 joined 04:08 bloatable6 joined, statisfiable6 joined 04:09 quotable6 joined 04:24 MasterDuke left 05:09 greppable6 joined 06:02 reportable6 left 06:08 tellable6 joined, coverable6 joined 06:34 japhb left
Nicholas good *, #moarvm 06:34
06:35 japhb joined 07:04 reportable6 joined 07:07 linkable6 joined, bisectable6 joined 07:08 evalable6 joined 07:19 patrickb joined
nine Good Friday! 07:41
It is Friday...even on IRC :)
Nicholas nine: ASAN is thoroughly bored by your bug fix branch. But this is not surprising 07:42
nine still good to know
Nicholas I wondered, however, if it would somehow be possible to add "Red zones" into the nursery allocator
or something
so that "writing beyond the end of the official allocated space" was a big explosion of ANSI pavement pizza 07:43
nine Note that in this case we actually allocated in gen2 directly
Nicholas oh. OK.
07:49 patrickb left 07:50 patrickb joined 09:30 squashable6 left 09:33 squashable6 joined
jnthnwrthngtn moarning o/ 09:47
timo raomorning
lizmat moan :-) 10:00
patrickb o/ 10:01
timo i have no remoarse about all these puns 10:29
lizmat refrains from uttering "the more the perlier" 10:30
jnthnwrthngtn Guess I should get back to the callwith thingy today... 10:34
10:34 Altai-man joined
timo "i used to be callwith it, but then they changed what callwith is and now i'm not callwith it any more and it scares me" 10:49
lizmat
.oO( it's always the callsame )
10:50
.oO( so what's nextsame? )
10:51
12:02 reportable6 left
jnthnwrthngtn Mmm...red curry 12:11
nine jnthnwrthngtn: what a splendid idea! 12:12
jnthnwrthngtn The place near the office remains as good as ever :) 12:13
grmbl, what on earth is wrong with my callwith thing... 12:14
This is weird. It creates a dispatch program to invoke exactly the right method...then somehow ends up with `callsame` invoked again?! 12:59
nine If the dispatch program is correct, but the results are wrong, doesn't that mean that the program must get interpreted incorrectly? 13:01
jnthnwrthngtn Well, it's wrong directly after the recording phase 13:02
As in, the wrong thing happens directly after it
Or so it seems
oh argh no, I've somehow confused myself with the debug output... 13:04
13:05 reportable6 joined
nine Ah, been there, done that...on a regular basis 13:05
jnthnwrthngtn hah, yes, it's not doing a crazy thing, the weird callsames that follow are legit, they are from exception reporting 13:08
13:27 frost left
Geth MoarVM/fix_mixin_repossession: c7be4282fc | (Stefan Seifert)++ | src/6model/reprs/P6opaque.c
Avoid possible threading issues with mixins

It's possible that one thread is currently accessing an object while another one mixes a role into it. As in the latter case we may replace the object's body, the first thread could end up accessing a body that we just freed in the thread performing the mixin. Better be safe and use the fixed size allocator to allocate the replaced object body and free a previously existing one at a safe point.
13:30
13:43 patrickb left 13:44 patrickb joined
jnthnwrthngtn Seems it's going to be a problem in MoarVM rather than the dispatchers, and also looking like the problem is in the faked up temporaries 13:48
Nicholas use more 'tea'; ?
Geth MoarVM: f7e0d7d358 | (Stefan Seifert)++ | src/6model/reprs/P6opaque.c
Fix memory corruption caused by repossessed mixins losing their replaced body

When a mixin got repossessed during deserialization, the replaced body pointer would get NULLed. If the mixin needed more storage than the original type provided we could then end up overwriting adjacent objects when deserializing the mixin's attributes.
... (5 more lines)
MoarVM: c7be4282fc | (Stefan Seifert)++ | src/6model/reprs/P6opaque.c
Avoid possible threading issues with mixins

It's possible that one thread is currently accessing an object while another one mixes a role into it. As in the latter case we may replace the object's body, the first thread could end up accessing a body that we just freed in the thread performing the mixin. Better be safe and use the fixed size allocator to allocate the replaced object body and free a previously existing one at a safe point.
MoarVM: 24fd3043c1 | niner++ (committed using GitHub Web editor) | src/6model/reprs/P6opaque.c
Merge pull request #1564 from MoarVM/fix_mixin_repossession

Fix memory corruption caused by repossessed mixins losing their replaā€¦
jnthnwrthngtn Nicholas: Tea is a good idea, but I think I've got a fix even without it :) 14:02
Turns out the code in Raku's dispatchers was right
Now I cross my fingers and run tests :) 14:04
Geth MoarVM: 61600a33b8 | (Jonathan Worthington)++ | src/disp/program.c
Don't duplicately set up fake temps

We allow resume init values from one resumption to be used in the next one. This works out because while we only keep info around about the resumption we are currently handling, the resume init arg will have been loaded into a temporary at the right time, and then the dispatch program can later reference that temporary. When we are producing a dispatch ... (5 more lines)
14:24
lizmat feels like it is time for another bump ?
Altai-man perhaps, if there is a test case we add? 14:32
or we do have one and was it just fixed?
15:18 vrurg left 15:21 patrickb left
lizmat is not sure jnthnwrthngtn ? 15:42
jnthnwrthngtn Just pushed the bumps along with the callwith work 15:45
And yes, some spectests :)
Altai-man yay
jnthnwrthngtn++
jnthnwrthngtn hah, you just beat me to closing the ticket :P 15:46
Closed the one nine++ fixed 15:47
(fix was also in the bump)
Altai-man I hope the spectest one will be luckily simple. 15:48
jnthnwrthngtn Will check if #4541 is still an issue
I doubt it
Unless it was already fixed
Sigh, this is not so fast on this machine 15:51
nine Odd: In `loop (my int $i = 0; $i < 20; $i = $i + 1) { TakeTwoShorts(10, $i); }` $i gets passed as a native int. But in loop (my int32 $i = 0; $i < 20; $i = $i + 1) { Foo.new.MethodInt($i); } $i is suddenly an IntLexRef 15:59
jnthnwrthngtn Methods are late-bound, so it'd have to assume that? 16:03
(Assume that the target may be `is rw` I mean)
nine I'd figured that new-disp would remove that difference 16:04
jnthnwrthngtn Well, only with work. I did include doing that work in my next grant app. :)
It's an extension of the "pass decontainerized" mechanism 16:05
But probably needs 1) some further dispatch ops for reading native refs, and 2) teaching spesh to eliminate the native ref once it sees the take/deref pairing 16:06
nine But anyway, nqp::isrwcont does detect this situation. Now the question is how does that IntLexRef turn into an Int on it's way to MVM_nativecall_dispatch? MVMDispOpcodeUnboxInt still sees the IntLexRef and fails at MVM_repr_get_int, while if I let it get passed through, MVM_nativecall_unmarshal_int doing the same thing succeeds 16:07
jnthnwrthngtn Is it really calling repr_get_int, or is it doing some slightly higher level unbox operation? 16:08
nine MVM_nativecall_unmarshal_int just does return (signed int)MVM_repr_get_int(tc, value); At that point though value is a P6opaque/Int 16:09
jnthnwrthngtn Huh, I wonder where that happens 16:10
Does it always read objects out of the capture or some such and it happens there? But even that doesn't entirely make sense...
('cus the ref *is* an object) 16:11
nine Especially considering that in my branch there's not much magic left. Dispatch arrives at MVM_nativecall_dispatch(tc, result_type, site, record->outcome.args);
And the dispatcher doesn't know about lex refs: github.com/rakudo/rakudo/blob/new-...kumod#L272 16:12
s/dispatcher/dispatch program/
16:14 MasterDuke joined
jnthnwrthngtn nine: github.com/MoarVM/MoarVM/compare/n...4f854bR438 16:18
Bleh, I think that link may be useless, but see handle_arg and the container mention
nine Oooh..it's hidden in the macro 16:19
I wonder if I should even bother thinking about RW args before your work on the next grant? 16:22
jnthnwrthngtn Well...for ones that are actually rw you'll still need nativecall handling for them 16:23
All I was going to do was make sure we strip off the containers caller side when the parameter is ro
But in terms of doing that part, yeah, could leave handle_arg to do it for now 16:24
OK, the `MVM_SPESH_BLOCKING=1 MVM_SPESH_NODELAY=1 make spectest` took a very long time but...it is clean!
MasterDuke nice 16:25
nine The old implementation had the native function write into the argument register and generated code for reading a value from the arg buffer and assign it back into the native ref. Not sure I can replicate this with a dispatcher
jnthnwrthngtn No, in fact, the arg buffer needs to go away :) 16:26
(It's now only still there due to nativecall) 16:27
MasterDuke jnthnwrthngtn: re the new warning when building moarvm, should `tc` here github.com/MoarVM/MoarVM/blob/mast...er.c#L1010 (and line 1016) be `dtc`?
jnthnwrthngtn I think for rw things the containers are going to have to make it all the way to the dispatch terminal
MasterDuke: yes 16:28
MasterDuke k
nine jnthnwrthngtn: seems to me, the best way to do this would be to pass a pointer to the actually referenced native var to the native function. So it can write its value and we're done 16:29
jnthnwrthngtn You can't do that
A native ref might be to an attribute, and GC can run during a native call (we mark the calling thread blocked) 16:30
And so the object in question can move
Rendering the pointer out of date
Probably we need to allocate a bit of space (can just be on the C stack when we JIT, I guess) for rw params, copy the values there, and pass pointers in to that. Then do the assignments after the call. 16:31
Well, can be on the C stack via alloca in the case we reach the terminal too 16:32
nine New best way: in the JITed version, reserve some space on the stack for these rw args and somehow make that available to HLL code for assigning
jnthnwrthngtn I'm not sure I'd expose this at all, tbh
Keep it as an implementation detail of how the JITted version works
Or at the very least, restricted to spesh ops 16:33
nine I guess I can just compile calls to the right C functions for writing back those args. But which function to call seems to depend on the kind of native ref that got passed 16:34
jnthnwrthngtn It does, but that can be guarded against 16:36
(The kind of native ref is part of the type, so a type guard will do it)
Sigh. I discovered something rather annoying. new-disp assumes that if you guard against a literal value, then a type guard is automatically covered by that 16:38
This is usually reasonable.
Except...mixins.
When we .wrap something we didn't previously wrap, it's the same literal object...but now has a new type 16:39
But since the dispatch program is told about the literal value it's like...oh no, no need to guard that.
Probably that needs to change 16:40
nine Yeah, mixins have a way of ruining your day
jnthnwrthngtn I guess it'll cost a little more in interpreted DPs, but in spesh it'll drop away 16:41
And be left for global deopt to cope with
Or proven that this will never happen
lizmat hmmm... after the bump, zef stopped working for me 16:42
Type check failed for return value; expected IO::Path but got Any (Any)
Geth MoarVM: 4e7fa7704d | (Daniel Green)++ | src/debug/debugserver.c
Use right MVMThreadContext in check for debugging
lizmat apparently only for zef install . 16:43
hmmm... seems to be specific to App::IRC::Log 16:45
lizmat checks further
MasterDuke oh, i saw this yesterday, but forgot just now, github.com/MoarVM/MoarVM/blob/mast...er.c#L1029 should also be `dtc` i assume (even though the `tc` it's using is presumably not uninitialized)?
jnthnwrthngtn Really doesn't matter, since we are only using it to find the instance 16:46
Maybe for consistency it's nice
But for correctness it's irrelephant.
lizmat nou moe... the problem has disintegrated 16:47
MasterDuke ok 16:48
jnthnwrthngtn Home time, I think 17:08
17:10 Altai-man left 18:02 reportable6 left 18:04 reportable6 joined
nine jnthnwrthngtn: thanks for the inspiration on what to make for dinner :) 18:46
jnthnwrthngtn :D 18:48
18:51 Geth left, Geth joined 18:52 RakuIRCLogger joined
lizmat the new logs server is now live: logs.liz.nl/home.html 19:01
running on Rakudo 2021.09 for now 19:02
jnthnwrthngtn Wow 19:04
There are channels I didn't even know exist :)
Not really important, but there's a slight layout issue with the channel dropdown (the names overflow the background of the dropdown) 19:05
lizmat yeah... I hope someone with more layout knowledge will be able to fix that 19:06
there are more nits like that
but I felt I should bring it out now here on the channel for the people here to have a look at
and potentially find problems 19:07
before announcing it to a broader audience, e.g. in the weekly :-)
jnthnwrthngtn Well, didn't manage to break it in any way so far 19:08
lizmat good :-)
jnthnwrthngtn On 2021.09 for any reason other than "it's good to use releases for production things"?
lizmat well, partly 19:09
jnthnwrthngtn (e.g. no regression I've missed that might be for me to look at?)
lizmat I didn't want to have too many variables at this stage of release to a wider audience
jnthnwrthngtn Ah, makes sense. 19:10
lizmat I'll probably move to master sometime tomorrow
nine lizmat: that max-height: 450px; on .navbar .navbar-channels-dropdown .dropdown-content in main.scss:239 looks fishy 19:12
Apparently the intention is for the menu to get a scroll bar via the overflow-y: auto in main.scss:247, but it probably doesn't due to the position: relative; in dropdown.sass:58. But honestly a scrollbar in a drop down menu doesn't sound like a usability win 19:17
MasterDuke on mobile it might be necessary? 19:18
19:18 sena_kun left
nine On mobile a fixed limit of 450px makes even less sense with the widely ranging display sizes and pixes densities 19:23
19:35 sena_kun joined
lizmat nine: PR's are welcome :-) 19:53
that kind of layout issues are still a bit above my paygrade :-) 19:55
20:06 vrurg joined
MasterDuke codesections: do you have any code you can share to repro github.com/MoarVM/MoarVM/issues/1565 ? 20:28
20:48 RakuIRCLogger left 20:49 RakuIRCLogger joined
japhb lizmat, are you *currently* changing things? Literally every refresh is giving me something different on the logs site. 21:37
lizmat I just restarted the server a few times to fix some obvious mobile issues 21:38
japhb Ah, seems to have settled down now
By the way, for the dropdown list of channels, the list goes beyond the background 21:39
lizmat yeah... I have no idea why, PR's are welcome :-)
japhb All right, first I have to catch up with several days of backlog. :-) 21:40
timo japhb: i just posted my investigation results in #raku for that issue 21:41
lizmat and I just used that and it works for me :-) 21:43
and that concludes my hacking for today, and what a day it was... 21:44
22:15 linkable6 left 22:16 linkable6 joined 22:33 timo left