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.
Nicholas good *, #moarvm 06:00
Nicholas jnthnwrthngtn: gcc.gnu.org/gcc-11/changes.html -- Several new features from the upcoming C2X revision of the ISO C standard are supported [...] Labels may appear before declarations and at the end of a compound statement. 07:31
finally...
jnthnwrthngtn moarning o/ 09:40
Nicholas: Now we just have to wait another decade for it to be widespread enough to use... :/ Or maybe make babel, but for C :D 09:41
Nicholas \o 09:42
dogbert11 anything interesting going on here today? 11:24
lizmat my @a = ^1000; for ^10000 { @a[$_] for ^1000 }; say now - INIT now 11:29
m: my @a = ^1000; for ^10000 { @a[$_] for ^1000 }; say now - INIT now
camelia 0.372348021
lizmat m: my @a = ^1000; for ^10000 { @a.AT-POS($_) for ^1000 }; say now - INIT now
camelia 0.34283105
lizmat I sorta expected there to be no noticeable difference between the two 11:31
and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2021/09/13/2021-37-receding/ 11:35
jnthnwrthngtn m: say 0.372 / 0.342 11:42
camelia 1.087719
jnthnwrthngtn It's not that significant, given there's a (mostly optimized away) extra multiple dispatch in there 11:43
To see how well the optimizer is doing at reducing that cost, try timing them with MVM_SPESH_DISABLE=1; I'd imagine the relative difference will be larger. 11:44
sena_kun huh, there is a race (?) in Concurrent::Stack it seems. 12:16
❌ TST: No exception handler located for catch
❌ TST: from t/stress.t:15 (<ephemeral file>:)
not sure how reproducible this is
dogbert11 No exception handler located for catch 14:17
at SETTING::src/core.c/Exception.pm6:62 (/home/dogbert/.rakudobrew/versions/moar-master/install/share/perl6/runtime/CORE.c.setting.moarvm:throw)
from SETTING::src/core.c/Failure.pm6:63 (/home/dogbert/.rakudobrew/versions/moar-master/install/share/perl6/runtime/CORE.c.setting.moarvm:throw)
from SETTING::src/core.c/Failure.pm6:93 (/home/dogbert/.rakudobrew/versions/moar-master/install/share/perl6/runtime/CORE.c.setting.moarvm:Int)
from SETTING::src/core.c/atomicops.pm6:154 (/home/dogbert/.rakudobrew/versions/moar-master/install/share/perl6/runtime/CORE.c.setting.moarvm:infix:<⚛+=>)
sena_kun it's reproducible then, I guess 14:19
jnthnwrthngtn dogbert11: Can you run it with --ll-exception? 14:20
dogbert11 jnthnwrthngtn: sure, gimme a sec
sena_kun: yes 14:22
jnthnwrthngtn I guess that means also a regression, maybe thanks to one of the recent changes
dogbert11 gist.github.com/dogbert17/136be8a8...9a0396de18 14:23
let me know if you want something more done 14:24
jnthnwrthngtn MVM_SPESH_DISABLE and MVM_JIT_DISABLE too 14:25
dogbert11 ok ...
jnthnwrthngtn There's not that many commits sicne the last blin run though so can also bisect it between MoarVM HEAD and the bump before last 14:26
dogbert11 while MVM_SPESH_DISABLE=1 MVM_JIT_DISABLE=1 perl6 -Ilib --ll-exception t/stress.t; do :; done # this also fails after a number of iterations. Stack trace is the same. 14:27
sena_kun jnthnwrthngtn, it bisects to the last rakudo bump 14:28
jnthnwrthngtn sena_kun: Yes but it's the MoarVM commit that causes it that is of particular interest I think 14:30
Although...wow, if spesh being disabled doesn't affect it, that's...well, we don't really have more commits to look at 14:31
Every single MoarVM change is a spesh/jit one
sena_kun jnthnwrthngtn, well, Blin doesn't bisect moar revisions between bumps.
jnthnwrthngtn sena_kun: I figured; thus why it's worth doing manually on MoarVM commits 14:35
I just fail to see a likely candidate
dogbert11 No exception handler located for catch 14:49
dogbert@dogbert-VirtualBox:~/repos/p6-concurrent-stack$ perl6 -v
Welcome to 𝐑𝐚𝐤𝐮𝐝𝐨™ v2021.08-27-g10b327292.
Implementing the 𝐑𝐚𝐤𝐮™ programming language v6.d.
Built on MoarVM version 2021.08-9-g4b7ffe3af.
so, it's present on master as well
jnthnwrthngtn Oh 14:51
dogbert11 it usually take a few iterations for it to fail so blin might have been easily fooled 14:53
jnthnwrthngtn: I have a new-disp bug if you're interested 14:57
try this if you're bored :) # while MVM_SPESH_NODELAY=1 ./rakudo-m -e 'sleep 1; sub f($str) { my $num = +$str; }; f "3.0/2"'; do :; done 14:58
dogbert11 goes for an afternoon walk 14:59
[Coke] build failure on windows for new-disp 15:25
gist.github.com/coke/f17a5e56c0c36...7b81d82a53
github.com/MoarVM/MoarVM/blob/new-...xpr.c#L705 15:26
Dynamic array sizign.
jnthnwrthngtn Huh, and MSVC doesn't support that? 15:27
That's crap. 15:28
It's only been in the C standard for 22 darn years.
Wonder if it supports alloca
[Coke] I am using VS 2017. Maybe I need to update 15:30
jnthnwrthngtn I can't remember what we actually support. 15:33
I thought "something that does C99", but it might be "something that does more of C99 than MSVC used to"
timo i do believe it supports alloca
jnthnwrthngtn Ah, they don't plan to ever support VLAs, it seems... devblogs.microsoft.com/cppblog/c11...g-in-msvc/ 15:35
timo vla is kind of tasty 15:37
dogbert11 I went back to moar-2019.11 and the problem exposed by Concurrent::Stack is present there as well 19:26
jnthnwrthngtn dogbert11: Wow, so not a new-disp regression after all. Thanks for checking. 21:31
Mutter timo: btw, while the directives dyn variable is never explicitly set, another variable is bound to it and then pushed to, that’s how it gets populated 22:32
timo can you point me to where that happens? my searching has turned up nothing 22:40
Mutter github.com/Raku/nqp/blob/9858768b7...d.nqp#L194
timo 760: my @clds := @*comp_line_directives; 22:42
timo not this right? 22:42
Mutter That’s it
timo ok interesting, where is the dynamic variable ever declared though?
Mutter Dunno/don’t remember 22:43
Mutter Obviously the overall mechanism works somehow, but like I (MasterDuke) said before, it was implemented a long time ago, so it may be ripe for improvement 22:44
timo are these directives the things that give us the #?line 0 blah.nqp feature? 22:45
Mutter Yeah
And so you can give a name/label to EVALs 22:46
I though I don’t remember if it’s actually specced or not 22:51
timo i think its not a language feature 22:52
Mutter Does your commit break either of those? 22:58
timo IMPOSSIBLE 22:59
it actually gets entries
uiaedturianedutrinaedtruinaetdruinaetdruinaetdruniae
i do not understand. 23:02
Mutter ? 23:03
timo without a declaration, how are we finding a dynamic variable of that name? 23:06
Mutter Magic I guess? 23:07
No declaration needed in NQP?
timo if you dont declare something you get nqpnull, but this is @ sigiled so i think it gives you an array anyway 23:08
like can you find any mention of comp line directives that is preceded by a my that declares it? im losing my mind here?!? 23:09
nqp: say(nqp::isnull($*blah))
camelia 0
timo nqp: say(($*blah)) 23:10
camelia
timo how do we check in nqp if a dynamic variable lookup failed?
Mutter isconcrete?
timo nqp: sub a() { nqp::push(@*a, 1); say(nqp::elems(@*a)) ; a; a; a;a; a; a; 23:12
camelia Unable to parse expression in blockoid; couldn't find final '}' at line 2, near ""
at gen/moar/stage2/NQPHLL.nqp:1053 (/home/camelia/rakudo-m-inst-1/share/nqp/lib/NQPHLL.moarvm:panic)
from gen/moar/stage2/NQPHLL.nqp:1073 (/home/camelia/rakudo-m-inst-1…
timo nqp: sub a() { nqp::push(@*a, 1); say(nqp::elems(@*a)) }; a; a; a;a; a; a;
camelia ( no output )
timo hum?
nqp: say(nqp::isconcrete($*blah)) 23:13
camelia 0
timo nqp: say(nqp::isconcrete(@*blah))
camelia 1
Mutter Ah ha
timo so this shows we get a list allocated for us when the lookup fails
but it would have to be the same list eaäch time for the behaviour im seeing 23:14
nqp: sub a() { say(nqp::objectid(@*a)) }; a; a; a;a; a; a; 23:15
camelia ( no output )
timo so what am i doing wrong here
Mutter Are parens required? 23:16
timo nqp: sub a() { say(nqp::objectid(@*a)) }; a(); a(); a();a(); a(); a();
camelia 22665816
22665816
22665816
22665816
22665816
22665816
timo apparently
well this is frickin weird 23:17
nqp: sub a() { say(nqp::objectid(@*a)); say(nqp::objectid(@*a)); }; a(); a(); a();a(); a(); a();
camelia 21513000
21513000
21513000
21513000
21513000
21513000
21513000
21513000
21513000
21513000
21513000
21513000
timo but where does it go tho
Mutter That great big dyn array in the sky? 23:18
timo nqp: sub a() { say(nqp::objectid(@*a)); }; sub m() { say(nqp::objectid(@*a)); }; a(); a(); m();m(); a(); m(); 23:19
camelia 35862472
35862472
35862472
35862472
35862472
35862472
timo nqp: sub a() { say(nqp::objectid(@*a)); }; sub m() { say(nqp::objectid(@*a)); }; sub x() { a(); m(); }; a(); a(); x(); m();m(); a(); m(); 23:21
camelia 17618104
17618104
17618104
17618104
17618104
17618104
17618104
17618104
timo does that mean that line directives leak between evals as well? 23:26
im practicing with my new keyboard and its slow and frustrating so i dont really want to write a lot of code to test this hypothesis right now
Mutter I’m on my phone, so likewise 23:27
timo ha 23:28