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 |