| IRC logs at
Set by AlexDaniel on 12 June 2018.
01:28 lucasb left 02:02 leont left
nwc10 good *, #moarvm 06:58
07:43 domidumont joined 07:49 patrickb joined 08:09 sena_kun joined 08:11 Altai-man joined 08:14 sena_kun left 08:48 leont joined 09:01 zakharyas joined 09:27 brrt joined
brrt good * #moarvm 09:32
nwc10 good *, brrt 09:33
brrt ohai nwc10 09:34
timotimo 09:38
brrt that the debugger? 09:39
timotimo magic 09:48
nwc10 or sufficiently advanced technology? 09:50
09:53 brrt left
patrickb timotimo: I think the command line debugger is a tool that has a really big potential to change how people use Raku. 11:18
A debugger allows inspecting a program so not only aids in debugging, but also inspecting how a program works. So it's also a learning tool.
Given Raku is also a scripting language having that available on the command line and not only in an IDE makes it a lot more suitable for quickly having a look at that small to medium sized ish script one writes. 11:19
But to serve that purpose it needs to be a bit more polished. Simple installation and a shortish getting started document are the most pressing necessities. 11:24
lizmat patrickb++ 12:09
12:12 sena_kun joined 12:13 Altai-man left 12:45 zakharyas left
Geth MoarVM: 998ea76a17 | (Nicholas Clark)++ | src/core/exceptions.c
Calling `MVM_exception_throw_adhoc` in the spesh worker should be an oops.

Similarly no exceptions should be thrown in the event loop thread.
Also report these two special threads in `MVM_oops`, and treat a NULL thread context pointer in oops as a bug worthy of a panic.
  (Previously it would have "panic"ed because it would have crash due to the
NULL pointer dereference. This way, we give slightly better diagnostics.)
MoarVM: fa9b6659a1 | (Nicholas Clark)++ | src/core/exceptions.c
Use simpler stdio calls in exceptions.c where possible.

fputc('\n', stderr) is simpler than fprintf(...) or fwrite(...) Because `fputs` is not varargs, the caller has a simpler ABI than `fprintf` on some architectures (eg x86_64).
  (Well, that's the theory anyway. In practice, it seems that a new enough gcc
optimises simple cases of either into calls to `fwrite`.)
MoarVM: f3e9e356d2 | (Jonathan Worthington)++ (committed using GitHub Web editor) | src/core/exceptions.c
Merge pull request #1390 from MoarVM/exception-in-spesh-should-oops

Exceptions in spesh should oops
nwc10 I was a bit surprised how agressive gcc's optimisation was 14:02
"oh, I'll just turn it into fwrite for you", for both fputs and fprintf with a fixed string 14:03
nine That's decades of adding optimizations for you 14:26
14:31 squashable6 left 14:33 squashable6 joined 14:38 lucasb joined 15:20 travis-ci joined
travis-ci MoarVM build passed. Jonathan Worthington 'Merge pull request #1390 from MoarVM/exception-in-spesh-should-oops 15:20
15:20 travis-ci left 15:53 zakharyas joined
nwc10 jnthn: you may appreciate that this is a bit of a loaded question, but I guess you can see where it's headed... 15:59
1) the "canonical" "correct" output of MoarVM and Rakudo is when running without spesh? 16:00
(ie with MVM_SPESH_DISABLE=1 all tests should pass) ?
jnthn Yes, with the caveat that sometimes there are performance tests written that aim to check timings of certain things, and they may well be vulnerable. 16:02
nwc10 OK 16:03
second sort of loaded question is "are backtraces supposed to be invariant whether spesh is running or not?"
jnthn Those should not be in spectest, but there may be some in Rakudo's make test
nwc10 basically
MVM_SPESH_DISABLE=1 ASAN_OPTIONS=detect_leaks=0 ./rakudo-m -Ilib t/spec/S32-exceptions/misc.rakudo.moar 16:04
fails 2 tests
and the quirky bit is that they are fudged for the JVM
and I think that actually the JVM is correct
(not that I have built a JVM Rakduo yet to confirm this)
jnthn I don't know we've ever committed one way or the other on that 16:05
nwc10 t/spec/S32-exceptions/misc.rakudo.moar fails these 2 tests *differently* with MVM_SPESH_BLOCKING=1 MVM_SPESH_NODELAY=1
I'm fine with "not committed"
I think that the right thing (for now) is for me to send a PR to have the test work properly under MVM_SPESH_DISABLE=1
(and confirm what the JVM does)
and then also fudge it for MoarVM
jnthn It's nice if we can always produce the same backtrace 16:06
In theory "we can using the deopt info"
But will the deopt into always be enough?
And are we tying our hands in the future when we understand more and can toss more deopt points (PEA for example can reveal such things) 16:07
Or should we tie our hands anyway because reliable backtraces are important?
Given all the questions, it's one of those "don't decide until somebody makes me, and at least then it'll be done with more info" :) 16:08
nwc10 yes, I'm fine with "don't decide yet" 16:09
but I wanted all the sepctests to pass under MVM_SPESH_BLOCKING=1 MVM_SPESH_NODELAY=1
oh, and on "all the platforms"
jnthn Yes, that's indeed desirable 16:11
16:11 Altai-man joined
jnthn I worry that we have things that depend on backtraces (like `is DEPRECATED`) and those will be what force us to reliably provide the backtraces 16:11
nwc10 hence that rather stinky complicated PR for the floating point conversion
and this one 16:12
16:14 sena_kun left 16:26 zakharyas left 16:27 zakharyas joined
timotimo patrickb: with the same script that packages moarperf, i can make an AppImage of the debugger 16:36
something important to have would be discovery of source code so that line numbers can be shown with code and a bit of context ideally 16:37
also, a better readline-like thing, hopefully with tab completion as well
and a complete re-organization of the commands it currently has, they are silly and counter-intuitive
17:00 MasterDuke left
patrickb timotimo: I'm reading through the docs of how to install again. The debugger is installable via zef. That's fine for most use cases. I think a simple update of the "Beta use instructions" updating the bits about modifying the raku startup scripts (they aren't scripts anymore!) is a good first thing to do. 17:13
timotimo: I pretty much agree to all of your points.
Geth MoarVM/faster-repeated-unshift: 5a21247e9f | (Jonathan Worthington)++ | src/6model/reprs/VMArray.c
Improve performance of repeated `unshift`ing

Prior to this, we always created a fixed amount of extra space (8 elements) at the start of the array, regardless of array size. With this change we start accounting for the number of elements in the array. This will make no difference for steady state unshift/pop, but for situations where we repeatedly unshift will bring the performance in line with that of push. Fixes #1382.
MoarVM: jnthn++ created pull request #1392:
Improve performance of repeated `unshift`ing
18:03 Kaeipi left 18:10 domidumont left 18:23 domidumont joined
Geth MoarVM/faster-repeated-unshift: d0d6088afc | (Jonathan Worthington)++ | src/6model/reprs/VMArray.c
Remove duplicated word in comment
19:20 brrt joined
nine (v)room (v)room 19:22
brrt zooom zooom 19:23
nwc10 but I hope not oom oom 19:24
lizmat OM 19:26
brrt I hope not, either
19:27 domidumont left
timotimo patrickb: you don't even have to change the startpu scripts any more, since someone (you?) made them pass them on by themselves 19:28
patrickb yes that was me...
19:40 MasterDuke joined
MasterDuke timotimo: cool 19:41
20:12 sena_kun joined 20:13 Altai-man left 20:24 brrt left 20:36 brrt joined
Geth MoarVM/hash-bits-in-metadata: 39690f50ae | (Nicholas Clark)++ | src/core/str_hash_table.h
Two words missing from comments spotted by jnthn++
MoarVM/hash-bits-in-metadata: 0641ce8402 | (Nicholas Clark)++ | 2 files
Add `MVM_index_hash_allocated_size` for MVMStaticFrame's `unmanaged_size`

It's easy to calculate this accurately, so we should.
nwc10 that's doomed to fail against nqp and rakudo master...
jnthn Oh? 21:05
Ah, version bumps maybe
nwc10 yes, and probably real test failures that are fixed
I actually tested it with a merge of master 21:06
21:08 zakharyas left
MasterDuke i usually rebase my PRs against master if there's been a bunch of changes and force push 21:09
21:09 brrt left
nwc10 I wasn't sure if jnthn was trying to review them as-is 21:10
it might make sense to rebase both branches to master
but not for me tonight
jnthn nwc10: I've looked through the single memory block one and didn't see anything that concerned me; I'm happy for it to go in
I didn't look at the second one at all yet 21:11
nwc10 OK. I'm still not going to do anything tonight
jnthn Sure, just so you aren't blocking on me if you want to get the first one merged. Good for it to get some testing ahead of the release also :)
As in, a few weeks of testing...
nwc10 I was about to go to bed. I don't think I even want to suggest a plan right now. 21:12
and thanks for giving it a careful review 21:13
MasterDuke i not-infrequently wish i'd ever taken a c class. i'm not sure how to alloc an MVMArrayBody with a known size for slots as one chunk. `MVMArrayBody *body = fsa_alloc(3 * sizeof(MVMuint64) + n * repr_data->elem_size)`? `MVMArrayBody *body = fsa_alloc(sizeof(struct MVMArrayBody) + n * repr_data->elem_size)`? 21:21
21:21 leont_ joined 21:24 leont left 21:25 MasterDuke left 22:09 sena_kun left
jnthn .tell MasterDuke probably best is to have a `struct` that contains the metadata, and then sizeof(that_struct) + n * repr_data->elem_size, however you may need to worry about alignment on some platforms (32-bit ones that want an array of 64-bit integers or doubles aligned to 8 byte boundaries) 22:13
tellable6 jnthn, I'll pass your message to MasterDuke
jnthn .tell MasterDuke But you can defer the alignment and just make it work at all first; it won't be a big change 22:14
tellable6 jnthn, I'll pass your message to MasterDuke
22:22 patrickb left
timotimo welp, i just threw an exception into a thread with the debugserver and the P6EX hash via the hll value access mechanism 22:32 22:35
moon-child jnthn: alignment is not an issue. E.G. sizeof(struct { char a; double t[]; }) is 8 22:36
jnthn moon-child: That's not quite the situation though; we're allocating a single piece of memory to hold a metadata struct *and* elements that follow it; the elements vary in size depending on the type of array. 22:38
It's the padding between the struct and the elements (not part of the struct) that is in question.
moon-child oic 22:40
timotimo throwing an exception now makes me wonder how exactly special unwind should be handled. clearly when you use the p6ex hash to throw an exception you don't want a "oh no, an unhandled exception happened in code run by the debugserver! we'll crash now, thanks" 22:44
but when you run some utility code that ends up throwing, you may want it to abort?! 22:45
jnthn I'd probably write a support library that installs itself into hllsym and have it catch, probably, but yeah, we need fallback semantics 22:46
Can we convey the exception that went unhandled back over the debug protocol?
And then just unwind the frames introduced by the call?
"just" :) 22:47
Also, do we get a handle to the object returned by some code run on the debug server?
timotimo yes, we will. not just yet, but soon enough 22:56
jnthn cool 22:59
Now I can start thinking of terrifying things to do with this new power :)
timotimo aye
anyway, at the point where the special unwind is hit, which is what i'm currently hooking into to make this work, it'll already be, well, unwinding 23:01
i suppose the other way to do it is to put an exception handler on the stack 23:03
which in theory could be the task of the helper library
jnthn Yeah, I'd prefer to punt the problem there than complicate the VM layer 23:04
timotimo so if you invoke something directly and it throws an exception, Don't Do That Then 23:06
i imagine the helper library will then have a signature like `\code-obj, |arguments` 23:07
and it'll be not terribly much more than `try { code-obj(|arguments); CATCH { say "oh bugger" } }`
jnthn Needs to be CATCH { default { say "oh bugger" } }, but yes :P 23:08
timotimo ok, "default {" fits my definition of "not terribly much" 23:09
and balancing out the braces