🦋 Welcome to the IRC channel of the core developers of the Raku Programming Language (raku.org #rakulang). This channel is logged for the purpose of history keeping about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | log inspection situation still under development | For MoarVM see #moarvm
Set by lizmat on 22 May 2021.
Geth tap-harness6: 1ececb26f2 | (Leon Timmermans)++ | 2 files
Fix Supplier name in Output::Supplier
tap-harness6: 6fb155162e | (Leon Timmermans)++ | 3 files
00:09 reportable6 left 00:12 reportable6 joined 00:52 evalable6 joined 01:35 frost joined 01:42 frost left 02:27 frost joined 02:39 frost left 03:10 frost joined 03:13 discord-raku-bot left, discord-raku-bot joined 03:17 discord-raku-bot left, discord-raku-bot joined 03:20 frost left 04:10 frost_ joined 04:14 frost_ left 04:16 frost joined 04:20 frost left 04:23 frost joined 04:30 frost left 05:10 frost joined 05:25 Kaipi joined 05:30 sjn_ joined 05:35 discord-raku-bot left, kjp left 05:37 RakuIRCLogger__ joined 05:38 RakuIRCLogger left 05:39 sjn_ left 05:40 discord-raku-bot joined, kjp joined, Altai-man joined, TempIRCLogger joined, japhb joined, Geth joined, sjn joined 06:08 reportable6 left 06:14 frost left 07:10 reportable6 joined 08:03 patrickb joined, patrickb left 08:12 patrickb joined
patrickb japhb: I have just seen the latest RSC minutes and the question about the state of the CI bot grant. The grant hasn't stalled. It is progressing slower than anticipated though. Latest report is here: news.perlfoundation.org/post/2021-...ant-update 08:17
tellable6 2021-12-19T14:46:51Z #raku <SmokeMachine> patrickb sorry I haven’t seen your issue before, but I’ve just answered: github.com/FCO/Red/issues/539#issu...-997403720
2021-12-19T14:56:28Z #raku <SmokeMachine> patrickb also this one: github.com/FCO/Red/issues/538#issu...-997405831
patrickb Am I assuming correctly, that we have no analytics whatsoever on rakudo.org and raku.org at the moment? 08:42
If yes, what do people think about adding goatcounter.com to both of them? 08:43
nine patrickb: oh, that report's a joy to read :) Thanks for doing the right thing (TM) about bugs you encounter. That may not be what the grant is actually about, but it's a great service to our users. 08:47
OTOH what's the point of CI if not to catch bugs? :D So this may very well be on topic
MasterDuke patrickb: does raku have a large userbase among goats? i would prefer we count visits by people 08:52
patrickb :-P But how could you know whether there are people or goats sitting in front of all those keyboards? I remain with goatcounter being just as legitimate a name as peoplecounter. 08:54
MasterDuke en.wikipedia.org/wiki/On_the_Inter...et_dog.jpg 08:56
nine MasterDuke: honestly, if goats find our software useful, I'm ok with that. 08:57
patrickb: I'm curious about that NativeCall issue... 09:01
MasterDuke nine: i'll have to look for a means to use raku next time i play goat simulator 09:03
nine patrickb: of course I cannot reproduce it locally... Can you still? 09:06
patrickb nine: I can't. 09:16
nine Not in the full app either? 09:17
patrickb This is a bit frustrating, as that golf is about 1.5 hours worth of golfing...
I'll try...
nine: I got a repo with the full app. 09:37
nine darn
patrickb Took 12 runs
nine: Are you interested in an explanation on how to set this up? Alternatively, would you recommend me to invest time in golfing this down once more? 09:42
nine I fear a golf would be much more useful, since it's hard to reproduce, will want some rr, etc. 09:45
patrickb OK 09:46
nine: I might still have the RR record lying around. Is that of any help? 10:03
10:23 frost joined 10:35 frost left
nine Only if you have exactly the same MoarVM + rakudo + OpenSSL installation to go with it. Unfortunately rr recordings do not include the program code and if the latter just differs slightly from the time of the recording rr will usually break 10:36
patrickb I just tried `rr replay` and it does run through. 10:39
nine Okidoki....so the first challenge would be to set a break point at the place where we notice things to go wrong 10:42
patrickb there is a print "Unable to read key" 10:43
can I break on stdout/err?
Uhm... there is also the warning: "warning: .dynamic section for "//home/patrick/rrepos/install/lib/libmoar.so" is not at the expected address (wrong library or version mismatch?)" 10:47
Will that mess things up?
wait 10:48
nine potentially yes
I'm not aware of a way to break on output
patrickb ugh
nine How is that printed?
patrickb the warning or the Unable to read key?
nine Unable to read key 10:49
patrickb die "Unable to read key" unless defined($rsa);
nine Maybe a break on MVM_exception_throw_adhoc will trigger
MasterDuke MVM_exception_die 10:50
patrickb ok. Lots of "unrecorded signal" warnings. I guess this won't do.
I'll try to get a live repro again. I'll report back if / once I succeed. 10:51
nine Well, if you've got to reproduce again anyway, you can at least make debugging easier, e.g. by putting something like nqp::sin_n(1e0) into a place where you want to break. Then place the break point on the sin_n implementation in src/core/interp.c 10:52
patrickb ok
10:53 frost joined 11:39 sena_kun joined 11:55 frost left 12:07 reportable6 left
patrickb nine: I can repro with a rakudo/MoarVM master as of 2021-11-27 and have it captured in rr, have put in a sin_n and have rr break on that sin_n right before the call to OpenSSL::PEM::PEM_read_bio_RSAPrivateKey (the call that fails to do what it should). 12:09
nine nice! 12:11
Btw. why the old master? 12:12
patrickb That's the build that was still lying around 12:16
I did a build with latest master and it didn't fail. I suspect it's not really fixed by latest master though as there are no changes in MoarVM since then that look like they could have fixed it and the bug is depending on soft factors (as can be seen by not failing any more on 2021.09). 12:17
So I think it's still worth debugging on this older build even though there is a chance it turns out to have already been fixed. 12:18
12:19 frost joined
nine Ok, so PEM_read_bio_RSAPrivateKey fails. What's the failure mode? Missing return value? 12:25
patrickb yes
nine What does the bytecode of the frame calling PEM_read_bio_RSAPrivateKey look like? 12:26
patrickb rr somehow still throws exceptions when stepping through the code. Should I try fixing rr or is there a chance of doing this with gdb?
How do I find out?
12:26 frost left
nine call MVM_dump_bytecode(tc) 12:26
patrickb paste.sr.ht/~patrickb/2935953d1e8a...a89c3afbdf 12:29
paste.sr.ht/~patrickb/47d0186b2afd...3a31763the corresponding raku code: 12:31
nine So this should be the failing call: 00081 dispatch_o loc_3_obj, 'lang-call', Callsite_8, loc_5_obj, loc_1_obj, loc_9_obj, loc_8_obj, loc_3_obj 12:34
Can you advance to just after this call and then have a look at what's in tc->cur_frame->work[3].o?
You can probably just set a break point at PEM_read_bio_RSAPrivateKey (should have thought of this earlier...) and then finish frames until you are back in src/core/interp.c
patrickb is trying 12:35
nine I find it odd that this is clearly unspeshed code while your bugreport says that with spesh disabled the bug bug disappears. 12:40
12:42 frost joined
bartolin Hmm, reading this I can't help to think of github.com/sergot/openssl/issues/82 and github.com/sergot/openssl/issues/87 which I tried to debug last year. The installation of OpenSSL failed (but not reliably) -- seemingly in the same place. My guess back then was that precomplication was somehow involved with these failures. 12:43
(hopefully this doesn't point you in the wrong direction and distract you from the real problem) 12:44
nine Looks like different issues 12:47
patrickb back in interp.c I am now looking at OP(return_o)
Have I mis-stepped? 12:48
nine You can always dump bytecode to see where you are. There's also call MVM_dump_backtrace(tc) 12:49
You could be in the dispatch program 12:50
patrickb that small arrow points to the currently executing op?
That's pointing at 00082 -> decont loc_3_obj, loc_3_obj 12:51
nine Sort of, mostly 12:54
patrickb stepping over the return_o I am now actually in the OP(decont) 12:55
nine on a good day
The one that's following the dispatch_o? Then yes, the return was in the dispatch program. Now tc->cur_frame->work[3].o is of interest
patrickb {header = {sc_forward_u = {forwarder = 0x550000001e, sc = {sc_idx = 30, idx = 85}, st = 0x550000001e}, owner = 1, flags1 = 1 '\001', flags2 = 2 '\002', size = 24}, st = 0x41a72f8} 12:56
nine What's in st?
patrickb {header = {sc_forward_u = {forwarder = 0x100000001e, sc = {sc_idx = 30, idx = 16}, st = 0x100000001e}, owner = 1, flags1 = 2 '\002', flags2 = 2 '\002', size = 168}, REPR = 0x7ffff7e41ec0 <CPointer_this_repr>, REPR_data = 0x0, size = 32, type_check_cache_length = 3, mode_flags = 0, type_check_cache = 0x34be6d0, type_cache_id = 849920, container_spec = 0x0, container_data = 0x0, boolification_spec = 0x34be6f0, hll_owner = 0x4dd190, hll_ro
what does st stand for?
nine STable
The object's flags1 is 1, which is MVM_CF_TYPE_OBJECT, so you got a NULL pointer there 12:58
Did PEM_read_bio_RSAPrivateKey really return NULL?
patrickb now I regret not having rr working...
nine s/got a NULL/got a CPointer type object which stands for NULL/
Oh, that's in gdb? Bummer :(
patrickb It's reproducible 12:59
but yes, somehow rr fails as soon as I start stepping
nine And with a break point on PEM_read_bio_RSAPrivateKey you should find the right spot quickly
patrickb true, as I previously did
nine Locally I use an rr built from source, so I always get the latest bug fixes
Still sometimes happens that a replay crashes but works when tried again. I guess rr does some really deep magic 13:00
patrickb AFK for a bit. Back in a few minutes...
13:11 sena_kun_ joined 13:13 sena_kun left 14:11 reportable6 joined
Geth rakudo: 186bd0b026 | (Elizabeth Mattijsen)++ | src/core.c/Any-iterable-methods.pm6
Rename Any.infer to Any.are

By popular request, also make sure that anything that has an
  .iterator method will work, not just Lists
14:52 frost left 14:55 discord-raku-bot left, discord-raku-bot joined 15:19 RakuIRCLogger__ left, lizmat left, Geth left 15:20 TempIRCLogger left 15:29 TempIRCLogger joined 15:30 lizmat joined, RakuIRCLogger joined 15:34 RakuIRCLogger left 15:35 RakuIRCLogger joined 15:46 TempIRCLogger left, RakuIRCLogger left 15:48 lizmat left 15:49 TempIRCLogger joined 16:03 Geth joined 16:11 discord-raku-bot left 16:12 discord-raku-bot joined, cognominal joined
patrickb nine: I think I found the error. It's a bug in our OpenSSL wrapper. The `BIO_new_mem_buf` creates a BIO struct and copies the Buf pointer passed as the first argument into it. My golf (just as the OpenSSL wrapper) passes `$key.encode` and thus Rakudo subsequently frees that Buf and leaves the BIO with a broken buf. 16:47
nine: According to the OpenSSL docs BIO_new_mem_buf does not take ownership of that buf. So the solution can't be to put `explicitly-manage()` around the arg. 16:49
Is there a way to guarantee that Rakudo will not GC-more a Buf around? I.e. I could just keep the Buf alive in Rakudo land by holding it in a variable. But I need to guarantee that that pointer that escaped into C land stays valid. Can I do that somehow? 16:51
lizmat if the Buf is big enough, it doesn't get created in the nursery? 16:53
nine patrickb: for that pointer to stay valid, the Buf object must be kept alive. And it must stay the same size (otherwise the VMArray may realloc the buffer).
lizmat ok, scratch my idea :-) 16:54
nine The buffer itself that's pointed at is malloced, so no worry about that.
patrickb I think my understanding of moar is flawed. Doesn't the GC shuffle about everything around as it likes? Are Bufs special? 16:57
nine Raku's Bufs (and Blobs) are REPR VMArray. VMArrays are GC-able 6model objects. They consist of the common header, and a body: github.com/MoarVM/MoarVM/blob/mast...rray.h#L39 17:01
The body then contains some information about the size of the array and the actual pointer to the memory holding the elements: github.com/MoarVM/MoarVM/blob/mast...Array.h#L8
This slots array is plain malloced memory and the GC doesn't care about this. The GC only cares about the object holding that pointer. C code just gets passed the pointer to the slots array 17:02
The slots array gets freed when the VMArray objects gets freed. This is by way of the GC calling the object's gc_free method which takes care of such things: github.com/MoarVM/MoarVM/blob/mast...ray.c#L112 17:04
patrickb I think I understand.
Does that general principle apply to all things one can pass to native functions? 17:05
patrickb starts to suspect this is one of the things all that REPR stuff is about. 17:06
nine Yes. We never actually pass a pointer to an MVMObject to C code. It depends on the REPR what the C code actually sees. Strings for example go through MVM_string_utf8_encode_C_string or the like. For integers, we pass whatever MVM_repr_get_int returns on that object. 17:10
17:10 dogbert17 left
patrickb nine: Nice. Then I think I know how to fix this bug. Thank you for explaining so much to me! 17:17
17:20 dogbert17 joined
nine You're welcome :) 17:50
17:54 [Coke] left 17:58 [Coke] joined 18:08 reportable6 left 18:09 reportable6 joined 18:15 Geth left, Geth joined 18:26 nebuchad` joined 18:27 SmokeMachine_ joined, kawaii__ joined, childlikempress joined, leont_ joined 18:29 sena_kun_ left 18:30 sjn_ joined 18:31 djinni`_ joined 18:32 moon-chi- joined 18:34 childlikempress left, sjn left, nine left, kawaii_ left, djinni` left, moon-child left, SmokeMachine left, nebuchadnezzar left, leont left, rba left, cognominal left, RakuIRCLogger left, sena_kun_ left, kjp left, Altai-man left, japhb left, patrickb left, MasterDuke left, bartolin left, lucs left, tonyo left, ugexe left, camelia left, zostay left, SmokeMachine_ is now known as SmokeMachine, kawaii__ is now known as kawaii_, rba_ is now known as rba, leont_ is now known as leont 18:35 sjn left, nine left, kawaii_ left, djinni` left, moon-child left, SmokeMachine left, nebuchadnezzar left, leont left, rba left, Skarsnik left, CIAvash left, eof left, Geth left, dogbert17 left, lizmat left, Voldenet left, gfldex left, maettu_ left, sivoais left, AlexDaniel left, JRaspass left, jdv left, masak left, samcv left, timo left, jjatria left, ilogger2 left, andinus left, samebchase left, [Tux] left, TempIRCLogger left, rypervenche left, tbrowder left, Util_ left, reportable6 left, [Coke] left, discord-raku-bot left, Kaipi left, evalable6 left, linkable6 left, squashable6 left, qorg11 left, sourceable6 left, quotable6 left, statisfiable6 left, unicodable6 left, notable6 left, committable6 left, releasable6 left, tellable6 left, bloatable6 left, benchable6 left, bisectable6 left, nativecallable6 left, coverable6 left, shareable6 left, greppable6 left, codesections left, vrurg left 18:38 discord-raku-bot left, discord-raku-bot joined, sjn_ joined, nebuchad` joined, cognominal joined, RakuIRCLogger joined, patrickb joined, japhb joined, Altai-man joined, kjp joined, MasterDuke joined, camelia joined, bartolin joined, lucs joined, tonyo joined, ugexe joined, zostay joined 18:39 moon-chi- joined, djinni`_ joined, nine_ joined, leont joined, kawaii_ joined, SmokeMachine joined, rba joined, Geth joined, reportable6 joined, [Coke] joined, dogbert17 joined, TempIRCLogger joined, lizmat joined, Kaipi joined, evalable6 joined, linkable6 joined, squashable6 joined, qorg11 joined, sourceable6 joined, quotable6 joined, statisfiable6 joined, unicodable6 joined, notable6 joined, committable6 joined, releasable6 joined, tellable6 joined, bloatable6 joined, benchable6 joined, bisectable6 joined, nativecallable6 joined, coverable6 joined, shareable6 joined, greppable6 joined, CIAvash joined, codesections joined, AlexDaniel joined, vrurg joined, Skarsnik joined, sivoais joined, maettu_ joined, gfldex joined, Voldenet joined, eof joined, masak joined, jdv joined, JRaspass joined, [Tux] joined, samebchase joined, andinus joined, timo joined, samcv joined, ilogger2 joined, jjatria joined, Util_ joined, tbrowder joined, rypervenche joined 18:40 discord-raku-bot joined 19:42 bloatable6 left, nativecallable6 left, coverable6 left, statisfiable6 left, notable6 left, sourceable6 left, reportable6 left, quotable6 left, greppable6 left, linkable6 left, bisectable6 left, evalable6 left, releasable6 left, benchable6 left, tellable6 left, committable6 left, shareable6 left, squashable6 left, unicodable6 left, evalable6 joined 19:43 greppable6 joined, benchable6 joined, committable6 joined, notable6 joined, nativecallable6 joined 19:55 moon-chi- is now known as moon-child 20:01 discord-raku-bot left, discord-raku-bot joined
gfldex m: (^∞).hyper.map({ last }); 20:03
camelia (signal XCPU)
gfldex Should that terminate properly? 20:04
lizmat interesting :-)
ugexe im imagine last short-circuits as soon as it can, but that might mean the other units of work need to get finished (but that no more would be created) 20:06
and of course all the other work is also infinite 20:07
well no, nevermind thats not right
gfldex usecase: gist.github.com/7b2f312317dc7a598c...367a05f3fd 20:08
Should I Rakudobug?
ugexe it looks like it works for `for` though 20:10
20:38 nine_ is now known as nine 20:42 bloatable6 joined 20:43 coverable6 joined, statisfiable6 joined 20:44 quotable6 joined, unicodable6 joined, bisectable6 joined
gfldex m: my atomicint $bail = 0; (^∞).hyper.map({ say $bail⚛++; last if $bail > 3; }); 21:02
camelia (signal XCPU)0
gfldex The map seems to respect last, but the iterator that spawns batches doesn't know. 21:03
We are not really good at stopping threads in general. 21:04
filed as RT#4712 21:07
Geth rakudo/rakudo-4711: 28b512380b | (Vadim Belman)++ | src/Perl6/World.nqp
Make add_constant lookup setting symbols only

The compiler is only uses this method with core types. Limiting lookups to setting only prevents LTA errors in user code.
Fixes #4711
rakudo: vrurg++ created pull request #4713:
Make add_constant lookup setting symbols only
21:42 tellable6 joined 21:43 sourceable6 joined, reportable6 joined 21:44 shareable6 joined 21:45 releasable6 joined
Geth rakudo: 28b512380b | (Vadim Belman)++ | src/Perl6/World.nqp
Make add_constant lookup setting symbols only

The compiler is only uses this method with core types. Limiting lookups to setting only prevents LTA errors in user code.
Fixes #4711
rakudo: 94b9d497ef | (Vadim Belman)++ (committed using GitHub Web editor) | src/Perl6/World.nqp
Merge pull request #4713 from rakudo/rakudo-4711

Make add_constant lookup setting symbols only
japhb (backlogging) Ah, thank you patrickb for the clarity on the CI bot grant. Glad to know it's not stalled. :-) 22:31
23:44 linkable6 joined 23:52 Xliff joined