github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
00:02 pamplemousse left 00:30 Kaiepi left, Kaiepi joined 01:19 pamplemousse joined 02:59 pamplemousse left 04:29 farcas1982regreg joined
nwc10 good *, #moarvm 05:51
06:56 pilmihilmi joined 07:03 samcv joined 07:05 MasterDuke joined 07:09 sivoais left, moritz left 07:13 Geth left, Geth joined
nine sena_kun: you do know about MoarVM/tools/release? 07:14
tellable6 nine, I'll pass your message to sena_kun
07:15 jjatria joined, sivoais joined, moritz joined 07:21 sivoais left 07:22 sivoais joined 07:26 farcas1982regreg left 07:47 zakharyas joined 07:48 sena_kun joined 08:07 Kaiepi left 08:08 Kaiepi joined 08:52 sena_kun left, sena_kun joined
jnthn morning o/ 09:00
sena_kun o/ 09:01
nwc10 \o 09:02
09:07 Altai-man_ joined 09:09 sena_kun left
jnthn After further consideration, I decided that constant arguments won't go into callsites after all; we'll just stick with the names of named arguments doing that. 09:59
It'd lead to an explosion in the number of callsites, and significantly complicates capture handling. 10:00
Instead, callsites will gain a "this is a literal" flag. This will be possible to set on an object argument too.
Which means we can do it on a QAST::WVal, for example. 10:01
Well, on the value that comes from one.
lizmat class method call simplification, I guess ?
jnthn Well, if you have Foo.new then it would know that type guards on Foo don't need to be added 10:02
lizmat right
which they are now, right ?
jnthn It's hard to answer that, because the new dispatch mechanism that we'll use for method calls doesn't exist today :) 10:03
If the code is hot enough, spesh already knows a wval doesn't need guarding. 10:04
But this means we'd do a bit better pre-spesh, and give spesh a guard it doesn't need to eliminate.
Well, not give... :)
lizmat :-) 10:06
10:29 dogbert17 joined, timotimo left, dogbert11 left 10:30 timotimo joined
Geth MoarVM/new-disp: 76c4844b83 | (Jonathan Worthington)++ | 8 files
Add callsite flag for literal argument

Which shall be used as part of the new dispatch mechanism, to know when it need not actually guard an argument.
10:41
10:41 farcas1982regreg joined 10:52 squashable6 left 10:53 squashable6 joined 11:07 sena_kun joined 11:09 Altai-man_ left 11:15 farcas1982regreg left
timotimo i just learned about io_uring, which is like a ring buffer where you can push requests for syscalls to happen in and get results from syscalls out and you can submit a whole bunch of syscalls with one call 12:39
and you can even have a symbol for a to-be-created file descriptor (a "pre-registration") so you can submit an open, a read, and a close in one fell swoop
we'll likely not do much with that ourselves, but libuv will probably put that in at some point 12:40
what's perhaps more interesting is the potential of pushing eBPF programs along with your syscall requests
imagine reading a zstd compressed file with a "single syscall", yum! 12:41
MasterDuke yeah, i've been reading about it on and off recently 12:42
12:46 pilmihilmi left 13:07 Altai-man_ joined 13:09 pamplemousse joined, sena_kun left 13:45 squashable6 left, squashable6 joined
dogbert17 jnthn: will your new dispatch mechanism improve things wrt e.g. R#2002 You've written a lot of interesting stuff in your response. 13:47
linkable6 R#2002 [open]: github.com/rakudo/rakudo/issues/2002 [dispatching][performance] `where` in single `multi` vs. `sub` is 10x slower
jnthn Not by itself, but it'll be a bit easier to fix those cases, I think 13:55
dogbert17 Nice, there are a couple of bugs reported wrt dispatching, didn't know if you had looked at them recently 13:57
jnthn If it's about the exact semantics of multi dispatch, that's not really on my radar 14:05
I'm changing the way we cache outcomes rather than the way we make decisions.
14:17 farcas1982regreg joined 15:07 sena_kun joined 15:09 Altai-man_ left 16:07 farcas1982regreg left
Geth MoarVM/new-disp: 82a38cecc1 | (Jonathan Worthington)++ | 9 files
Add callsite flag for literal argument

Which shall be used as part of the new dispatch mechanism, to know when it need not actually guard an argument.
16:39
MoarVM/new-disp: caca374811 | (Jonathan Worthington)++ | 17 files
Add an inline caching mechanism

This allows us to cache stuff against bytecode instructions. The main goal is that we shall use it for dispatchers to cache guards and their outcomes there. However, to test out the mechanism and try to get it stable, we first use it to cache getlexstatic_o lookups, which before now only stop needing to be looked up after specialization. (We'll also be able to get spesh to stop logging this instruction and instead just have it pull the resolution out of the cache.)
MoarVM/new-disp: 5aae7a41f0 | (Jonathan Worthington)++ | 3 files
Wire dispatch ops up to dispatch cache

Which just pushes the NYI a step further forward for now.
17:00
17:07 Altai-man_ joined
timotimo very interesting 17:09
17:09 sena_kun left
jnthn Time for a break after doing that lot. :) Next is to figure out the new capture/argument stuff. 17:10
tellable6 2020-05-05T16:59:40Z #raku-dev <AlexDaniel> jnthn perhaps another opportunity to reject a feature that nobody is asking for: github.com/Raku/problem-solving/issues/188
AlexDaniel yeah, very unfortunate timing on that oneā€¦ 17:11
sorry :)
jnthn haha
Will look at it in a bit. 17:12
17:44 zakharyas left 19:08 sena_kun joined 19:09 Altai-man_ left 19:20 lucasb joined 19:33 zakharyas joined
[Coke] can someone explain to me what 'buffertocu' is doing? What's a CU? 19:37
... compilation unit?
nine yes
Load bytecode from memory 19:38
MasterDuke timotimo, nine: have you seen this? pretty cool julialang.org/blog/2020/05/rr/
[Coke] it just loads it, it doesn't execute?
MasterDuke tl;dr: "In Julia 1.5, which will be released in a few weeks, there is now a new command line flag --bug-report=rr that will automatically create and upload an rr recording." 19:39
nine [Coke]: correct. With the exception of the deserialization frame. We run that when we load bytecode 19:40
MasterDuke: neat
[Coke] nine: github.com/Raku/nqp/commit/39b348c6c9 is a very minimalistic doc for that. Thanks. 19:49
the trunc and extend ops return the modified value, yes? 19:53
timotimo yeah 19:54
[Coke] in both cases, the opcode modifier is the target size? (if so, what's the passed in size?) 19:57
nine [Coke]: it's not adding to a compilation unit. It will create a completely new one and fill it with the stuff from the bytecode. I.e. this is used when you run a script or EVAL (i.e. non-precompiled code). Rakudo compiles your source to QAST. Then QASTCompilerMAST compiles this to MBC which it collects in a buffer (int8 array). It then passes this buffer to MoarVM to get a compilation unit that's ready for 20:01
tellable6 2020-05-05T19:51:42Z #raku-dev <tbrowder> nine that commit fixed issue #147--i owe you a test file. thanks!
nine execution.
[Coke] does it return that CU to the user? 20:02
s/to the user/from the opcode/ ?
tbrowder nine: although it looks like you did that, too! 20:05
nine [Coke]: yes 20:52
tbrowder: err...yes
20:59 Kaiepi left, Kaeipi joined, Kaeipi left 21:00 Kaeipi joined 21:01 zakharyas left 21:07 Altai-man_ joined 21:09 sena_kun left 21:14 Altai-man_ left 22:29 lucasb left 23:29 squashable6 left 23:30 squashable6 joined, squashable6 left 23:31 squashable6 joined