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.
japhb jnthnwrthngtn++ # Awesome progress! :-) 00:20
MasterDuke is there an easy way to negate the return value of a function call in the lego jit? 01:23
e.g., isfalse_s is just sugar for !istrue_s 01:24
neither of which are currently jitted
(they have templates, but not a lego jit implementation) 01:25
timo depends on what course of correction i will take 06:06
like, do we want something that is aware of what SF's we're currently looking into and preventing only the inlining of calls into SFs we've already seen once? do we want a simple recursion depth counter for inlining optimization in general? do we want a count of how much we've been going into recursions so far and prevent anything further so that no pathological situations can occur when optimizing 06:16
a single frame takes seconds because it keeps looking into other inlining options?
Nicholas .tell brrt Good *, brrt. colabti.org/irclogger/irclogger_lo...1-07-14#l8 08:56
tellable6 Nicholas, I'll pass your message to brrt
jnthnwrthngtn moarning o/ 09:37
Nicholas \o 09:38
jnthnwrthngtn Good news: did a fix that makes all the NativeCall tests pass on new-disp. Bad news: ran spectests and 120 new failures. What on earth have I done... 11:36
Nicholas failed to eat lunch? 11:39
jnthnwrthngtn It ran while I was eating lunch
First world problems, but my office machine, while being pretty darn fast, is not as fast my home dev box, which is newer and so faster. 11:46
I could swap them around, but I have no idea whether the near future will see more home working or less. 11:47
Nicholas but if you did that, you'd have a better dev box *and* a better coffee machine in the same place? Wouldn't that upset some balance?
Is the pub next to the office still allowed to be open?
jnthnwrthngtn Yes, but we're not allowed to go to it unless we do at least a self-test + sworn declaration. 11:48
(Because they tightened up the rules from "3 weeks after first dose" to "2 weeks after second dose" last week) 11:49
Nicholas but 2 weeks after second dose, and (for the current rules) you'd be allowed in with just the proof of second dose?
(and we obviously don't know if the rules will change again by that time)
jnthnwrthngtn Yes 11:50
Well, and they don't actually require staff to check at restaurants, there's just spot checks by inspectors (which I've never seen happen, although I've not really been out enough to make it terribly likely anyway, even when I was in the 2-week window when I could) 11:51
Ah, seems the regression was indeed an "I need lunch" kind of one. I forgot to account for capture parameters, which also allow all nameds. 11:56
Also, the passing nativecall ones means I'm down to just one screen of `make test` failure output (8 tests, though 1 seems flappy) 12:01
jnthnwrthngtn Yay, 1202 fully passing spectests with that. 12:09
dogbert17 how many left, 250? 12:10
jnthnwrthngtn I don't know how many there currently are without checkout out `master` and running it and seeing the number at the end
If anybody has it handy I'd be curious :)
dogbert17 on my system it's 1405 excluding the perl 5 tests which I don't run 12:12
jnthnwrthngtn m: say 1405 - 1202 12:22
camelia 203
jnthnwrthngtn m: say 1202 / 1405
camelia 0.855516
jnthnwrthngtn Not bad
Pretty sure my next task should be to port the regex compiler 12:25
(To emit dispatch ops)
Since the next problem I'm looking at appears to be because I didn't do that
I really wish people would just cope with long files rather than splitting stuff out in ways that mean I can't just open src/core.c/ClassName.pm6 and find what I'm looking for... 12:27
dogbert17 has someone managed to hide the regex compiler :) 12:33
jnthnwrthngtn No, just INTERPOLATE :) 12:34
Though the regex compiler is also a tad harder to refactor than first hoped
Nicholas jnthnwrthngtn: Stage start : 0.002 12:40
No MoarVM syscall with name 'capture-names-list' at gen/moar/BOOTSTRAP/v6c.nqp:5228 (/home/nick/Perl/rakudo/blib/Perl6/BOOTSTRAP/v6c.moarvm:has-named-args-mismatch)
did you forget to push something?
Geth MoarVM/new-disp: 576d50b041 | (Jonathan Worthington)++ | 3 files
Add capture-names-list syscall

To get an array of the names of the named arguments being passed by the capture.
12:41
jnthnwrthngtn Yes, sorry.
MasterDuke seems like negating a function call via the jit isn't possible. think i'd need to add a `flip` argument to MVM_coerce_istrue_s 13:02
jnthnwrthngtn MasterDuke: That's getting deleted in new-disp, fwiw 13:09
Or at least, the boolification stuff in there is
MasterDuke ah, good to know. i'll put a pause on this until after new-disp lands 13:10
jnthnwrthngtn smart stringify and friends also 13:11
MasterDuke it'll be nice to have all that stuff simplified 13:12
jnthnwrthngtn They all become dispatchers, pretty much 13:13
[Coke] (cope with long files) - was part of that performance, in which case we can recombine once you make everything faster? :) 14:04
Geth MoarVM/hash-fsck-fixes: 736154d29d | (Nicholas Clark)++ | 3 files
Fix some bugs in the various hash_fsck functions.

They were still assuming that the metadata sentinel byte needed to be 1, and reporting an error if it was not. This should have been changed as part of commit b432533e90f175a7 in Oct 2020:
   The hash metadata sentinel byte can be 0 - it does not need to be 1.
... (5 more lines)
14:08
MoarVM: nwc10++ created pull request #1513:
Fix some bugs in the various hash_fsck functions.
14:09
MoarVM: 736154d29d | (Nicholas Clark)++ | 3 files
Fix some bugs in the various hash_fsck functions.

They were still assuming that the metadata sentinel byte needed to be 1, and reporting an error if it was not. This should have been changed as part of commit b432533e90f175a7 in Oct 2020:
   The hash metadata sentinel byte can be 0 - it does not need to be 1.
... (5 more lines)
14:41
jnthnwrthngtn Uff, this'll be "fun". I switched the regex compiler fully over to emitting disaptch ops instead of findmeth/invoke sequences. It compiles NQP well enough that it compiles the NQP parts of Rakudo (and such that all NQP tests pass). It then does a misparse somewhere in CORE.setting. 14:54
Error while compiling, type X::Comp::AdHoc 14:55
payload: Missing required term after infix
at line 2, near " :\n"
...I don't believe that line number at all
nine I always treat line numbers with a healthy dose of scepticism ;) 15:01
jnthnwrthngtn Yeah, it was waaay off. The correct one is 319 and it happens when we see an operator adverb :) 15:05
This...doesn't tell me a lot.
dogbert17 enocoffee perhaps 15:08
Nicholas I was going to suggest tea
dogbert17 E_NO_T :) 15:09
jnthnwrthngtn Of all things, why does it have to be operator adverbs...now I have to remember a bit about how those a parsed. 15:13
timo oof, i remember something about putting multiple adverbs in a row, but i think that was just™ for lists of pairs 15:14
jnthnwrthngtn Well, it's more the way they are parsed as infixes but then marked as fake and the expression parser is like "oh, let's pretend we never saw an infix!" 15:19
Of all the things I can guess might be wrong, they all feel too unlikely to really be the issue though
timo well, great that the nqp regex test suite doesn't catch this i guess?!? :( 15:22
though involving invocations it's possibly more about the methods that set stuff on cursors and such
jnthnwrthngtn Well, <fake_infix> is parsed and passes, but then fake is never seen in HLL EXPR 15:25
Oh. It's already gone missing right after we call that 15:26
timo something something pass by reference vs value vs container vs something or other
jnthnwrthngtn Well, current suspicion falls on flattening 15:27
timo surely nothing related to return values
jnthnwrthngtn <O(|%item_assignment, :assoc<unary>, :fake<1>, :dba<adverb>)>
timo ah, well, i'm sure you're already on top of the issue
jnthnwrthngtn yup, if I change it to this: 15:29
<O(:prec<i=>, :assoc<right>, :assoc<unary>, :fake<1>, :dba<adverb>)>
Then it shows up
Wonder what I've managed to do... 15:30
meh, that was silly... 15:34
Goodness, this is super glacial now that we no longer get spesh of rules 15:40
MasterDuke how easy is it going to be to spesh these new dispatchers and such? 15:44
jnthnwrthngtn Relatively straightforward for those that don't do resumption 15:46
Nicholas I'm sure that this is the wrong order, but will your dev time improve if you speshed some of this before finishing the rest?
jnthnwrthngtn This is quite possible. :) 15:47
Geth MoarVM/new-disp: af3a8b1616 | (Jonathan Worthington)++ | src/core/args.c
Fix a thinko in args flattening

If we install a named arg's value into an earlier slot because it overrides a value we flattned in, we still need to progress through the list of original named arguments.
15:48
jnthnwrthngtn Hmm, that almost gets the tests that interpolate stuff into regexes working, except apparently it's not happy about multi-dispatch with natives somehow 15:55
nine timo: have you done some work on the spesh recursive inline issue yet? 16:05
jnthnwrthngtn And now it is. Down to 6 failing files in `make test` 16:36
[Coke] wow 16:44
timo sorry, i still haven't decided how to actually fix it 16:50
[Coke] jnthnwrthngtn: is it worth switching "Raku" to 'Raku' in that last commit? 17:15
In normal code I wouldn't bother, but maybe it might make a difference in the compiler?
jnthnwrthngtn [Coke]: Hm, single quoted string instead of double quoted? The compiler produces ths same code if it's a literal value. 17:19
jnthnwrthngtn It is a bit of a mix and match in there though. In my slight defence, that error code was copy-paste-tweak from BOOTSTRAP :) 17:19
Current spectest status: 1272 passing 17:20
jnthnwrthngtn m: say "$(1272 - 1197) new today" 17:20
camelia 75 new today
jnthnwrthngtn m: say 1272 / 1405 17:21
camelia 0.905338
jnthnwrthngtn I have energy left tonight after dinner, I'll wire up the coercion stuff so Int($blah) works 17:21
That should help unblock some of the further `make test` files, and no doubt more spectests 17:22
*If I have energy...
home & 17:23
jnthnwrthngtn Did and pushed the coercion type support. Down to 5 failing tests in `make test` (one of them moved on to a different failure mode), and 1281 passing spectests. 23:13
timo looks shiny in any case :) 23:56