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:00 linkable6 left, evalable6 left 00:01 evalable6 joined, linkable6 joined 00:02 reportable6 left 00:03 reportable6 joined 01:03 linkable6 left 01:05 linkable6 joined 01:14 Voldenet left 01:19 Voldenet joined 02:15 Voldenet left 02:21 Voldenet joined 05:06 rba left 05:07 rba_ joined, rba_ is now known as rba 05:11 leont left 05:12 leont joined 06:02 reportable6 left 06:04 reportable6 joined 07:10 patrickb joined 07:23 Geth left, Geth joined 07:32 patrickb left 07:33 patrickb joined 09:30 Kaiepi left 10:24 Kaiepi joined 10:29 sena_kun joined 10:55 RakuIRCLogger left, RakuIRCLogger joined 11:12 frost joined 12:02 reportable6 left 12:03 reportable6 joined 12:37 frost left 13:27 sena_kun left 13:44 sena_kun joined
jnthnwrthngtn m: say "/foo/bar/baz".IO.relative("/foo") 14:32
camelia bar/baz
15:04 MasterDuke joined
MasterDuke timo: did you find anything new with the `($_ = "a: " until .Str) andthen .Str ` segv? 15:06
i think the segv is a bug, but is the infinite recursion a bug also? 15:07
or is that the expected/correct behavior from rakudo?
m: ($_ = "a: " until .Str); .say 15:11
camelia Use of uninitialized value $_ of type Any in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.
in block <unit> at <tmp> line 1
MasterDuke m: ($_ = "a: " until True); .say 15:13
camelia (Any)
MasterDuke m: say "a: " until True 15:14
camelia ( no output )
MasterDuke i guess that's correct? `until` is not the same as a `do while`? 15:17
lizmat until foo is the same as while !foo ? 15:21
MasterDuke i'm blanking, what's our `do while`? 15:25
i.e., unconditionally run body once, then check conditional for whether to run again 15:26
doh, `repeat` 15:28
m: repeat { say "a: " } until True 15:29
camelia a:
MasterDuke m: (repeat { $_ = "a: " } until .Str) andthen .Str 15:32
camelia Cannot assign to an immutable value
in block at <tmp> line 1
in block <unit> at <tmp> line 1
lizmat m: my $a; say do while ++$a < 10 { $a } 15:38
camelia (1 2 3 4 5 6 7 8 9)
lizmat it basically turns the while loop into a .map
m: my $a; say do while ++$a < 10 { chr($a + 64) } 15:39
camelia (A B C D E F G H I)
MasterDuke you've been working on looping and iteration and such, any opinion on whether the infinite recursion is a bug or correct? 15:41
lizmat feels like a bug to me
probably in codegen 15:42
MasterDuke so two bugs then. the rakudo infinite recursion and the moarvm segv
16:04 linkable6 left, evalable6 left 16:05 evalable6 joined 16:06 linkable6 joined
MasterDuke is `0x20000` a valid value for `tc->cur_frame`? 16:22
16:33 MasterDuke left
Geth MoarVM/new-disp: c7796fdc83 | (Jonathan Worthington)++ | 4 files
Provide for extracting args from an MVMCapture

Which is useful when we need to convert it into a Raku Capture for the sake of error reporting.
jnthnwrthngtn MasterDuke: no 16:36
tellable6 jnthnwrthngtn, I'll pass your message to MasterDuke
jnthnwrthngtn The latest reason `use Test` fails with new-disp is because I didn't do multi dispatch Junction failover yet, and we actually depend on that in the module loading code :) 16:38
lizmat ah? 16:46
isn't that, eh... "expensive" ? 16:47
jnthnwrthngtn I dunno how hot it is, tbh 16:48
lizmat well, we're talking about Rakudo, right, as NQP doesn't have junctions 16:54
jnthnwrthngtn Yes 17:02
tbrowder howdy. does MoarVM get a Coverity or other similar scan periodically? 17:07
timo coverity yes, but not periodically 17:10
jnthnwrthngtn Alrighty, junction auto-threading failover for multi dispatch done in the new dispatcher. The next blowup is from me not having killed of smart stringify / smart numify in MoarVM in favor of the dispatcher. 17:28
More special-case ops go bye bye. But for now it's hometime.
timo you can have your very own hometimo if you like! 17:30
17:33 linkable6 left, evalable6 left 17:35 evalable6 joined 17:36 linkable6 joined 17:38 sena_kun left 18:02 reportable6 left 18:04 MasterDuke joined
MasterDuke . 18:04
tellable6 2021-07-12T16:36:04Z #moarvm <jnthnwrthngtn> MasterDuke: no
MasterDuke jnthnwrthngtn: thanks
18:05 reportable6 joined
MasterDuke so in the example from above, the first write to tc->curframe is 0x0, then 0x20000, then 0x0 18:06
it gets set to 0x20000 by `val->cur_info = info;` at read_op (val=0x7ffc7876cab0) at src/core/validation.c:171 18:07
and since cur_info is a MVMOpInfo, that seems horribly wrong 18:15
(rr) p *info 18:19
$10 = {opcode = 597, name = 0x7f6f21eecb10 "const_i64_16", num_operands = 2, pure = 1 '\001', deopt_point = 0 '\000', may_cause_deopt = 0 '\000', logged = 0 '\000', no_inline = 0 '\000', jittivity = 0 '\000', 18:20
uses_hll = 0 '\000', specializable = 0 '\000', operands = "\"\020\000\000\000\000\000"}
so i assume 0x20000 comes from the info->operands
so tc->cur_frame is 0x0, somehow it gets overwritten when a Validator is created and its fields are set 18:22
i'm going to blame being on vacation if this next question is nonsensical, but does this mean there's a missing MVMROOT of tc->cur_frame somewhere and the gc moved it when it shouldn't have? 18:25
hm, but this is also somehow related to spesh inlining, because disabling that fixes the segv
lizmat And another Rakudo Weekly News hits the Net: rakudoweekly.blog/2021/07/12/2021-...splitting/ 18:50
19:18 evalable6 left, linkable6 left, evalable6 joined 19:20 linkable6 joined
MasterDuke lizmat++ i always find out there's more stuff going on than i'd realized 19:26
19:36 patrickb left 20:23 Altai-man left 20:25 Altai-man joined 21:07 MasterDuke left 22:07 evalable6 left, linkable6 left 22:08 linkable6 joined 22:09 evalable6 joined 23:09 linkable6 left, evalable6 left 23:10 linkable6 joined 23:12 evalable6 joined