00:15 releasable6 joined 00:16 coverable6 joined 01:09 bisectable6 joined 01:17 Kaiepi joined 01:31 Kaiepi joined 02:57 ilbot3 joined 04:12 avar joined
Kaiepi how do i look at the assembly for a function in gdb? 05:33
or rather what the assembly for a function looks like when i hit a breakpoint 05:39
nvm, info registers was what i was looking for 05:45
06:33 domidumont joined 06:41 domidumont joined 07:02 brrt joined 07:24 robertle joined 07:26 domidumont joined 08:14 brrt joined
brrt \o 08:26
09:07 AlexDaniel joined 09:12 unicodable6 joined 10:03 harrow joined 10:20 quotable6 joined, greppable6 joined, benchable6 joined, nativecallable6 joined, notable6 joined, coverable6 joined, bloatable6 joined, evalable6 joined, committable6 joined, bisectable6 joined, squashable6 joined, reportable6 joined, releasable6 joined, unicodable6 joined, shareable6 joined, statisfiable6 joined 11:15 AlexDaniel joined 12:48 amoghbl1wi joined 12:52 AlexDaniel joined
lizmat jnthn: I have a question wrt to the HyperToIterator 12:54
can .consume-batch be called from several threads at the same time or not? 12:55
if not. couldn't we make $!batches a Queue rather than a Channel ?
if so, don't we have some race conditions in HyperToIterator ? 12:56
jnthn lizmat: No, it can't; see method !join-worker 13:11
(Which sits in a loop and calls it)
lizmat ok, so, why do we need a Channel then ? 13:12
why not use a Queue ?
jnthn A Channel is just a wrapper around a Queue
Provided you mean something with the ConcBlockingQueue repr 13:13
We need something doing concurrency control there though
lizmat yes
but doesn't the ConcBlockingQueue repr provide enough of those ?
jnthn Yes. As I said, Channel is a concurrent blocking queue + error conveyance + end of stream conveyance 13:14
lizmat it's just that Channel.receive is always high up in the --profile
like 17% in the .hyper.is-prime example 13:15
so I'm looking at reducing that :-)
jnthn It's a blocking operation thoguh
Are you sure most of the time isn't it just waiting for there to be a first result in the queue?
Or a result in the queue at all
So that 17% isn't CPU time 13:16
It's wallclock time
afaik the profiler doesn't distinguish those at the moment
lizmat ah... hmmm
ok
jnthn Looking at the code though, I see it's using both the .close and the .fail functionality of Channel 13:17
So you'd have to re-invent that
At which point it's perhaps not much of a saving at all
lizmat ok, fair enough :-)
baby steps :-) 13:18
jnthn Plus there's subtle ways to get those things wrong (or at least, I found subtle ways to get them wrong in the past :))
lizmat will wait for --profile to show CPU before drawing more conclusions wrt Channel.receive 13:19
dogbert2_ jnthn: are you bug hunting? 13:30
jnthn Yes 13:32
A spesh one that produces a sudden method not found error
dogbert2_ sounds nasty
jnthn releasable6: blockers 13:33
releasable6 jnthn, I cannot recognize this command. See wiki for some examples: github.com/perl6/whateverable/wiki/Releasable
jnthn releasable6: next
releasable6 jnthn, Next release in 1 day and ā‰ˆ5 hours. Blockers: github.com/rakudo/rakudo/issues?q=...%9A%A0%22. Changelog for this release was not started yet
jnthn, Details: gist.github.com/d9e6806f25dd54205b...cf7123f580
jnthn Ah, it's not quite the same failure mode as that blocker, but perhaps same underlying cause
dogbert2_ there's a golf for one of them at least 13:34
jnthn Yeah 13:35
The one I'm hunting at the moment was tickled by some $dayjob code.
It appears with all of inline, OSR, and JIT disabled
So that's 3 big spesh subsystems that aren't to blame :)
dogbert2_ now that's interesting ... and odd 13:36
nine relaxes a little
dogbert2_ nine: with a beer ?
nine cup of coffee :)
dogbert2_ a very good choice :) 13:37
my $dayjob is moving to another location this weekend, I'm sitting in an almost empty room (landscape) atm 13:38
14:05 domidumont joined 14:13 committable6 joined
jnthn aha 14:32
timotimo better than sitting in an almost empty room (portrait) 14:38
jnthn I think our type-var opt has issues 14:49
So getlexperinvtype_o is rewritten into a constant if we specialized on the first argument (e.g. the invocant) 14:52
I'm having trouble getting this down to a simple test case, but there's a case where the typevar scope is used in a closure 14:56
Not in a top-levle method 14:57
And of course, the first argument is *not* the invocant type then
Having a pretty hard time getting this golfed, alas 15:01
15:50 brrt joined
brrt jnthn: note that the optimize_iffy has a potential double-removal-of-bb bug that timotimo++ uncovered 15:52
unfortunatley the branch that fixes it has another problem 15:53
15:56 krunen_ joined 15:57 releasable6 joined 15:58 sivoais_ joined 16:03 brrt joined
jnthn brrt: Thanks, though I don't think that's related 16:06
What I don't understand is that I can now clearly see it doing the wrong thing...but somehow my cut down example doesn't trigger the bug 16:07
m: role R[:$a] { method !p() { ::?CLASS }; method m() { my $x; for "a".."z" -> $var { $x = self!p }; $x } }; class C1 does R[a => 1] { }; class C2 does R[a => 2] { }; say C1.m; say C2.m; C1.m for ^100000; say C1.m; say C2.m 16:08
camelia (C1)
(C2)
(C1)
(C2)
jnthn That sometimes does it
m: role R[:$a] { method !p() { ::?CLASS }; method m() { my $x; for "a".."z" -> $var { $x = self!p }; $x } }; class C1 does R[a => 1] { }; class C2 does R[a => 2] { }; say C1.m; say C2.m; C1.m for ^100000; say C1.m; say C2.m 16:09
camelia (C1)
(C2)
(C1)
(C2)
jnthn m: role R[:$a] { method !p() { ::?CLASS }; method m() { my $x; for "a".."z" -> $var { $x = self!p }; $x } }; class C1 does R[a => 1] { }; class C2 does R[a => 2] { }; say C1.m; say C2.m; C1.m for ^100000; say C1.m; say C2.m
camelia (C1)
(C2)
(C1)
(C2)
jnthn Sometimes comes out as C1 in the last two outputs here
brrt oh
(and, under MVM_SPESH_BLOCKING?)
jnthn with that I can relace the 100000 with 10000
Without it I still saw it 16:10
m: role R[:$a] { method !p() { ::?CLASS }; method m() { my $x; for "a".."z" -> $var { $x = self!p }; $x } }; class C1 does R[a => 1] { }; class C2 does R[a => 2] { }; C1.m for ^5; C2.m for ^5; C1.m for ^100000; say C1.m; say C2.m 16:11
camelia (C1)
(C2)
16:12 brrt1 joined
jnthn evalable6: MVM_SPESH_BLOCKING=1 role R[:$a] { method !p() { ::?CLASS }; method m() { my $x; for "a".."z" -> $var { $x = self!p }; $x } }; class C1 does R[a => 1] { }; class C2 does R[a => 2] { }; C1.m for ^5; C2.m for ^5; C1.m for ^100000; say C1.m; say C2.m 16:12
evalable6 (exit code 1) ===SORRY!=== Error while compiling /tmp/_HHDN6A6gZ
Two terā€¦
jnthn, Full output: gist.github.com/4f27ba98f3ee089ac2...c8dd9950ef
jnthn evalable6: role R[:$a] { method !p() { ::?CLASS }; method m() { my $x; for "a".."z" -> $var { $x = self!p }; $x } }; class C1 does R[a => 1] { }; class C2 does R[a => 2] { }; C1.m for ^5; C2.m for ^5; C1.m for ^100000; say C1.m; say C2.m
evalable6 (C1)
(C1)
jnthn aha!
Anyway, this isn't really a MoarVM bug 16:13
16:13 brrt1 left
jnthn It's Rakudo using :scope('typevar') where it shoulnd't 16:13
16:13 brrt1 joined
brrt1 how so 16:13
jnthn The contract of that is "this can be treated as a constant provided the first argument of the enclosing block is held constant" 16:14
japhb jnthn++ # The difficult hunt
jnthn Where the first argument is the invocant 16:15
But we also generate it inside of closures
Where the first argument is something completely different
16:30 Kaiepi joined
jnthn Seems I've a Rakudo patch that fixes it 16:34
16:47 evalable6 joined 16:54 AlexDaniel joined 17:02 domidumont joined 17:13 robertle joined
lizmat hmmm, should I worry about this in a profile: 1197 deoptimizations , 1129 On Stack Replacements 17:14
feels like it's doing OSR's repeatedly and then deoptimizing again?
jnthn Depends how many iterations there are 17:15
Deopts aren't automatically bad 17:16
For example, if it sees a type is consistent 99% of the time, it'll generate fast-path code for that case, and deopt for the 1% case
Which can come out ahead of not optimizing at all 17:17
lizmat ah, ok, so no worries then 17:18
so it won't need to generate the fast-path over and over again ?
or the deopt over and over again ? 17:19
jnthn It's not generating it each time, no
lizmat o, good to know
jnthn deopt just means jump from specialized or JITted to the basic interpreter, OSR is vice versa
So in a loop it can do an iteration back in the interpreter, then fall back into the fast path again
lizmat ack
17:36 FROGGS joined 17:48 Kaiepi joined
lizmat jnthn: t/spec/S12-methods/defer-next.t is now failing consistently for me: test 26 (Cannot call method 'defined' on a null object) 17:54
jnthn pull 17:56
That was exactly the error before github.com/rakudo/rakudo/commit/e12e305a6b
lizmat ack, indeed... ok missed one :-) 17:57
jnthn Phew :)
lizmat afk for a few hours&
18:38 Kaiepi joined 18:48 committable6 joined 19:26 domidumont joined 19:27 domidumont joined
dogbert11 .tell jnthn I suspect that your latest fixes also took care of G #1442 20:19
yoleaux dogbert11: I'll pass your message to jnthn.
dogbert11 G#1442
that would be github.com/rakudo/rakudo/issues/1442
FROGGS R#1442 20:20
synopsebot R#1442 [open]: github.com/rakudo/rakudo/issues/1442 Too few positionals passed; expected 2 arguments but got 1 (with HTTP::UserAgent)
dogbert11 gaaaaah, FROGGS++
FROGGS :D
jnthn dogbert11: Hm, that looks like an exact dupe of the issue i fixed 20:22
yoleaux 20:19Z <dogbert11> jnthn: I suspect that your latest fixes also took care of G #1442
dogbert11 definitely looks like it 20:23
I don't think I can close it though 20:28
20:50 Kaiepi joined
jnthn dogbert11: did so :) 20:58
21:14 Kaiepi joined 21:22 releasable6 joined 22:07 Kaiepi joined, nwc10 joined
timotimo samcv: should we get an official API to getting every uniprop that we offer? 22:24
samcv timotimo: get the names of the properties? 22:32
yoleaux 22:21Z <Zoffix> samcv: Is this stuff still current? I'm working on the list of 3rd-party packages to include on rakudo.org, but I notice the last commit was Nov 1 github.com/samcv/rakudo-appimage-m...automation
22:24Z <Zoffix> samcv: OK, now I see it pushes builds automatically, but which versions are "star-stable" and "star-testing"? Is stable the last release and testing master? github.com/samcv/rakudo-appimage-m...e/gh-pages
samcv .tell ZofBot no it isn't current
yoleaux samcv: I'll pass your message to ZofBot.
timotimo samcv: yeah, just a list of what you can look up for any given character 22:33
samcv i mean it depends on the character? 22:34
or is just a list of all the things
timotimo we could offer both, and for the second one you just pass Str instead of "a" 22:35
22:47 MasterDuke joined 22:50 releasable6 joined, greppable6 joined, bloatable6 joined, bisectable6 joined, coverable6 joined, quotable6 joined, nativecallable6 joined, shareable6 joined, benchable6 joined, squashable6 joined, statisfiable6 joined
samcv timotimo: i will think about it. but it might be something that is a good idea 23:01
dogbert11 samcv: what's your opinion wrt RT #130483, is it fixed? 23:04
synopsebot RT#130483 [new]: rt.perl.org/Ticket/Display.html?id=130483 [UNI] Regex Unicode properties check string values before checking bool properties 23:05
samcv dogbert11: yeah i believe it's fixed. well yeah it's fixed i believe
dogbert11 samcv: thx for checking 23:06
timotimo there was a stackoverflow question about this feature being missing 23:41