04:44 ggoebel111111118 joined 07:24 ggoebel111111119 joined 07:29 ggoebel111111111 joined 07:53 FROGGS joined 07:56 zakharyas joined 08:51 ggoebel111111111 joined 08:52 brrt joined 09:03 ggoebel111111112 joined 09:21 rurban joined 09:28 dalek joined 09:37 kjs_ joined 09:56 timo joined 14:57 brrt joined 16:14 rurban joined 17:07 zakharyas joined 17:14 rurban joined 17:37 vendethiel- joined 17:41 vendethiel joined 17:42 danaj joined 17:56 rurban joined 18:13 FROGGS_ joined 18:55 brrt joined 19:25 kjs_ joined 19:47 vendethiel joined 19:49 tgt joined 20:04 brrt joined
dalek arVM: f570450 | jnthn++ | src/core/interp.c:
Avoid handing back real NULL from getwho op.
20:30
20:38 kjs_ joined
brrt checks if we need a JIT fix for that 20:48
wait
jnthn ooh, point. 20:49
brrt why does the interpreter call MVM_6model_gethow and why would the JIT just get STABLE->HOW
jnthn Um...
I think the JIT should call the latter
But the thing I just patched was WHO, not HOW.
Maybe that op body wants to move into a function also
and the JIT calls it. 20:50
brrt hmm
i'm not at all against getting things in a fast JIT Path
it's just something i'm seeing as i'm looking at the code and thinkning 'hey that's funny'
jnthn Well, gethow became a function because it may need to trigger lazy deserialization. 20:51
brrt that's.. annoying
jnthn It's a notable win 20:52
Also note that for a spesh-time known type, we can actually turn .HOW into a spesh slot access, which may in turn JIT into a static memory address if the thing is already in gen2 20:53
So I think I'd just make gethow call the late-bound thing and spesh it.
brrt nods
jnthn That'd also let us resolve meta-methods and even inline them. 20:54
Note, we may already be doing this :)
timotimo .o( i wonder on how many hot paths that ends up happening )
jnthn I don't remember implementing it.
timotimo: Not a load, but I know that some things in enums, for example, end up hitting meta-methods.
timotimo oh, yeah
i wonder if you have a cool idea for attribute accesors that get auto-generated 20:55
because these
go through an indirect name that comes in through a closure
jnthn Yes, been pondering that in my hindbrane. :) 20:56
timotimo and i'm still wondering about how to properly turn the BUILDPLAN and BUILDALLPLAN into code objects
(also wondering if that could cause a billion compunits to appear if i do it wrong)
jnthn Those two feel like related problems to me
timotimo much possible 20:57
jnthn My idea was to look into providing MOP code with a "compiler services" API that it can use to request any active compiler do some code-gen for it
timotimo ah yes
that way i don't have to getcomp or EVAL
jnthn So normal declarative code ends up with the MOP able to call into an API saying "please generate this method"
Yeah
I didn't quite settle on how we want that to look yet. 20:58
But I think it's the right kind of directin.
dalek arVM: a296a21 | brrt++ | src/jit/ (2 files):
Also return VMNull from JIT getwho
timotimo does that mean the MOP knows about several "templates" for methods?
brrt is afk, and hoping that patch does what i mean
jnthn Well, that's the API to expose really.
Something like try_generate_accessor and try_generate_BUILDALL 20:59
brrt ok, wait, it doesn't really
jnthn And if we're not in a context where we can...fall back to the existing mechanism.
timotimo mhm, okay
jnthn But yeah, once we do that, all the accessors become inlinable and le cheap. :) 21:00
timotimo my first instinct was to go for generating my own QAST and plugging that into what getcomp for perl6 gives me
but i didn't see any way to build "a method" with the right signature at that stage
brrt really likes gcc speed after dealing with clang for a day
timotimo because i don't have access to the $*W that's relevant
jnthn Yeah, well, the $*W should not be exposed per se
timotimo right, but that's the only place where i could think of finding something that'd let me build an actual method object and attach a signature 21:01
jnthn But hidden away behind the API I'm talking about :)
timotimo yes
jnthn Yes, that is the right mechanism.
It may even be something on the actions we want to expose.
timotimo SGTM, and TGIF ;)
also, i'll fall into bed now (but not from terribly far up or away)
jnthn It's...only Thursday?! 21:02
timotimo only 2 hours 'til midnight
what kind of timezone are you in?
jnthn Yeah, but midnight Thursday means 3 days of vacatin left, and midnight Friday means only 2 :P
timotimo oh :S 21:03
OK
enjoy your vacation in that case! :)
jnthn :)
Not much timezone difference from you. :)
timotimo i assume it's liberating to not be stuck behind TGFWOC 21:04
nwc10 but is the food as interesting?
jnthn Yes, the firewall is a pest, but also slows everything down... 21:05
nwc10: I found the food was interesting for the first weeks, and then I wanted, like, pizza...cheeseburger... :)
brrt pizzaburger
jnthn did find pizza in the end :) 21:06
brrt (note, this is a real thing)
timotimo "but also"?
jnthn timotimo: It's most immediately annoying because of what it blocks.
brrt does ssh work
timotimo ISTR every encrypted connection just gets way slowed down
jnthn Yes, and so you can tunnel HTTP and so forth over it by doing a SOCKS proxy.
But...what timotimo said. 21:07
brrt (hang on, spectest is clean, patch is ok)
i'll take a look at getwho tomorrow :-)
jnthn ++brrt
brrt :-) 21:08
www.pizzaburger.nl/ for you to amaze yourself
i'm off
jnthn BTW, Sweden has a plentiful supply of kebab pizza, if we're crossing the fast food streams... :)
brrt have fun on vacation
oh, yes, i've seen that here too, but only at kebab places
jnthn Oh wow, I have to try a pizzaburger next time I'm in .nl. Just for the novelty. :P 21:09
timotimo jnthn: if the method name of something that gets called was part of the callsite (potentially), spesh could handle the accessor specialization, but that could very well be problematic for inlining callsites and such 21:10
or is there a better way to do this?
jnthn I think we should just code-gen accessor methods :)
I had pondered closure specialization
But it gets...a bit hairy :)
TimToady we might want that for GLR though, since the results of negotiations are likely "call this function I generated for you" 21:11
jnthn (Need to write-barrier lexical re-binds and trigger de-opt and invalidate specializations.) 21:12
timotimo TimToady: is that really generating functions or simply configuring a code object with closure'd variables?
TimToady depends on how hairy the crossbar gets 21:13
jnthn :P
We can look into implementing it, it's just some fun.
But for accessors there's a much more lightweight solution to hand.
TimToady at some point you abandon a complete crossbar implementation and do a double-conversion with a star topology
jnthn And we can see how the GLR works out in reality and see if we need such a thing. 21:14
TimToady the hotpath for strictly lazy will be a set of dynamically nested closures that give you just one more value, I suspect 21:15
for other modalities, depends on how much re-buffering is required
the point, I think, is that we want to make sure we have code that doesn't introspect or ask-to-ask, but just knows implicitly how it's in and out interfaces work 21:17
*its 21:18
timotimo yes, pretty please
jnthn The other thing to keep in mind is that working with lists implies loops
And trace JIT is a good strategy for loops
I can see us adopting it in the places we apply OSR and standard method inlining to optimize hot loops today. 21:19
TimToady "You keep using that loop. I'm not sure that loop means what you think it means..."
jnthn It also kinda sweeps closure specialization up with it, to some degree. 21:21
Sleep time; 'night 21:40
21:49 kjs_ joined 21:59 kjs_ joined 22:56 rurban joined