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:07 reportable6 left 00:08 reportable6 joined 01:20 evalable6 left, linkable6 left 01:21 evalable6 joined 01:23 linkable6 joined 02:23 evalable6 left, sourceable6 left, notable6 left, bloatable6 left, statisfiable6 left, benchable6 left, committable6 left, nativecallable6 left, quotable6 left, releasable6 left, linkable6 left, nativecallable6 joined, evalable6 joined 02:24 quotable6 joined, releasable6 joined 02:25 bloatable6 joined, statisfiable6 joined 02:26 linkable6 joined, benchable6 joined, sourceable6 joined, notable6 joined, committable6 joined 02:30 japhb left 02:37 japhb joined 04:15 frost joined 06:06 reportable6 left, reportable6 joined 06:08 kjp left, codesections left 06:09 kjp joined 06:12 jnthn left, SmokeMachine left, jnthn joined, SmokeMachine joined 07:27 sena_kun joined
timo what can the fallback resolvers be used for? could this lazily load parts of the core setting perhaps? 07:47
nine It's the "a bit smarter" version of: github.com/rakudo/rakudo/blob/mast....nqp#L2886 08:01
timo oh my 08:05
sounds like it could be a nice impact for compilation time when this setup can be lazy like that
but i don't know how often this code actually runs and how many symbols it tends to see 08:06
nine Being smarter there can easily cut > 10 % off core settings compilation time, maybe even 20 %. That's according to my first attempt in the improved_wrapper_frames branch. 08:08
The other reason for doing this is, that while implementing such a fallback resolver is downright trivial in RakuAST, creating the old fashioned wrapper frame is not.
timo ah! :) 08:10
nine The caveat is, that apparently that last commit slows down setting compilation from ~35 to 42s here, even though we do not yet use those fallbacks. Do you have any idea how that could be the case? 08:12
timo huh 08:23
have you checked things like "suddenly nothing can be jitted any more" and such? 08:26
not sure why that would happen of course 08:27
nine It may actually be spesh related. Compilation times with disabled spesh are within .5s of each other 08:28
timo right, since resolvers try to get translated into spesh code, 08:39
something something etc etc
i must be missing the commit that actually uses the resolvers 08:43
oh, it's not moarvm duh
but i still dont see it
nine This would be it: github.com/rakudo/rakudo/commit/f6...db5ee3f96c 08:45
But that's the thing: the slow down happens in rakudo master where there is no fallback resolver
That commit is not even on rakuast proper yet. It's just my rakuast_wip 08:46
timo ah, in *master*
have you bisected to make sure it's actually your commits? 08:48
08:50 evalable6 left, linkable6 left, evalable6 joined 08:51 linkable6 joined
nine It's just that last one: 6822c790ce | Support fallback resolver in *getlex* 09:03
It's not JIT-related. Still see a 5s difference with JIT disabled 09:04
lizmat hmmm... I guess the reason I don't see that, is that hasn't been bumped yet 09:06
nine It's just in a branch
lizmat right... ok 09:09
nine It's definitely still logging types of found lexicals. 09:24
Ooooh...but it's logging these types at the wrong offset! 09:25
Yep, that was it 09:30
timo wow how did that happen? 09:38
Nicholas decaf? 09:39
nine Since MVM_frame_find_lexical_by_name now can dispatch, we must run it after updating cur_op. MVM_spesh_log_type on the other hand must run before updating cur_op. Solution is to introduce a new MVM_spesh_log_type_at that takes an explicit bytecode offset 09:41
Nicholas is this bug likely to repeat if we add dispatch inside other API calls that didn't use to? 09:43
timo a-ha! 09:49
Nicholas: now that we have an op that uses dispatch and logging of results, others will just copypaste the right code :D 09:56
since rakuast won't be merged this week, will you replace the outer symbol lookup thing for compile-in-context in the master branch as well? :D 09:58
i know at least two raku users who would really be happy about faster compiles for their modules, but i'm not sure if this particular code path is hot for their use cases compared to compiling the core setting 10:03
jnthn Depends how much BEGIN-time stuff they do, I guess. 10:06
10:07 Altai-man joined
timo and how much implicit begin-time stuff happens on their behalf 10:07
also, o/ jnthn :) 10:08
jnthn Well, yeah, there's role bodies
timo how about nativecall? there's the compilation of the optimized bodies, but i think it's optimized to happen in just one context all at once? 10:09
jnthn I think the optimized body compilation went away totally in favor of a new-disp-based approach? 10:23
timo oh, cool 10:26
nine Yes, it did. 10:35
jnthn Nice to see new-disp feature in the lexical lookup failover too :) 10:36
Seems we're getting as much out of it as I hoped :)
nine++ for doing much of the heavy lifting 10:37
nine jnthn: about BEGIN-time stuff... Most of that seems to work fine now on RakuAST. One problem I've come across yesterday though is that packages are composed too late, which breaks e.g. BEGIN time checking of types since their MRO isn't set up at that point. So far I have failed to make it compose earlier though. There are problems like attributes getting attached multiple times.
As always, the hard part seems to be timing 10:38
jnthn nine: Indeed, that's part of what I was trying to tease out with the parse time / begin time (and other times) stuff 10:45
timo timing and the three hardest problems in computer science are naming things and off by one errors
jnthn :P
I suspect the attachment wants to happen as a begin time action 10:46
nine Two insights into RakuAST: the difficult problems are always in the timing. And if you have no idea where to find something, it's in src/Raku/ast/scoping.rakumod
Which is weird.... attaching attributes and methods should not happen in attach but in PERFORM-BEGIN. But then, that's just the naming problem again. 10:47
jnthn That that in general, while AttachTarget is probably about right, the Attaching is wrong.
Because we can attach many times, whereas in reality we want to do it at The Right Time
And once
Geth MoarVM/fallback_resolver: 49d9f5e071 | (Stefan Seifert)++ | 8 files
Support fallback resolver in *getlex*
11:07 linkable6 left, evalable6 left
nine My current attempt is running $package.IMPL-CHECK($*R, $*CU.context, True); $package.meta-object; in the package_def action. But that leads to strange errors (as if there ever were others) like Type check failed in binding to parameter '$version'; expected Version but got Code (Code.new) 11:07
11:08 evalable6 joined
nine Possibly because $resolve-only = True actually still does much more than just resolving 11:08
11:09 linkable6 joined 12:07 reportable6 left 12:08 reportable6 joined 12:34 frost left
nine Oh LOL! And Why does IMPL-CHECK do too much even if I pass True for $resolve-only? Because truth is a pretty difficult philosophical concept. What's True in Raku is not necessarily true in NQP. It can be, like in the bootstrapping code (of which RakuAST is part of), but not in Perl6::Actions where I tried it. 12:37
There it probably parses as a package name which is not known and yields an NQPMu at runtime. Because NQP doesn't complain about unknown packages. 12:38
lizmat And yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2022/07/11/2022-...nciations/ 13:03
13:04 Kaiepi joined 13:07 Kaipei left 16:14 Altai-man left, Altai-man joined 16:25 dogbert17 left 16:28 dogbert17 joined 17:11 Altai-man left 18:06 reportable6 left 18:08 reportable6 joined 19:54 [Coke] left 19:55 [Coke] joined
nine 511 passing spec tests on RakuAST. That's 1 down, but that's just because of new tests and the rakuast falling further behind master. 20:19
20:22 sena_kun left
timo will it be rough to get master merged into rakuast? 20:26
20:28 sena_kun joined 21:00 lizmat_ joined 21:03 lizmat left 22:22 lizmat_ is now known as lizmat