TimToady admits to a certain amount of design aphasia in the area of IO... 00:01
Zoffix Hmmm... Was stresstesting on this box all day and on this run t/spec/S32-io/IO-Socket-INET.t started taking ages. So I killed the stresstest, tried to run the file alone, it complained about adress in use. I killed the process using the address, run the file again, it got a bunch of failures, now after 10 minutes went back to that terminal, and the test passes normally :| 00:02
ugexe its nice like how its nice push doesnt return boolean
not that i really care strongly about this
TimToady with mkdir, it does fit a little more strongly into the category of "you really oughta be checking that the OS didn't fail you" 00:04
timotimo so why not have it fail when it fails?
Zoffix ATM sub and method mkdirs work exactly the same, and IO::Path.mkdir return value is consistent with other... "making"... methods, like .link, .symlink: True on success; Failure on failure
TimToady with push, one kind of expects it to work till you run out of memory
Zoffix And all IO subs are same as methods, except for &chmod, &unlink, and &rmdir that do take a list of things to work on and return stuff that succeeded; the change for mkdir was mostly due to it taking a $mode arg, so the sig was: ($path, $mode) + ($mode, *@paths) 00:06
TimToady well, that never bothered P5 :) 00:07
but showing failure by leaving things out of a list is not a great interface
Zoffix reads perldoc -f mkdir 00:08
TimToady interspersing failures would just end up pushing failures into the @delete-me array for later
Zoffix Doesn't look like it can create multiple dirs at a time
TimToady I could be misremembering
anyway, if zef is the only casualty (and that's a big "if"), I'm probably okay with a little more accountabiilty out of mkdir 00:09
as in, encouraging people to assume it might return failure as easily as success 00:10
not that Laziness is a bad thing, but maybe here's a spot to encourage a bit more Cleanliness 00:11
mst TimToady: it might not have bothered *you*
I would suggest if we're going to default to 'works like perl5' then it should be 'works like the stuff perl5 devs use to avoid the core routines' 00:12
TimToady well, certainly Cleanliness is sort of an acquired skill for some of us :)
mst which probably means Path::Tiny atm
yes, well, for me cleanliness isn't so much a skill at all as a thing my default configurations (strictures.pm etc.) enforce to save me from myself ;) 00:13
TimToady also maintains a great deal of CPAN aphasia :)
Zoffix looks like samcns/uzu/lib/Uzu.pm6 is another causaulti
TimToady well, "" is an invalid(ish) filename, and the file "0" is no longer false, so if you just something that can evaluate to true, rather than True, a filename still works, though encourages the sort of shortcuts we see 00:15
Zoffix maybe ugexe/Perl6-PathTools/lib/PathTools.pm6 too
TimToady and presumably they'd still catch the Failure when they try to delete it... 00:16
so I do think it would be okay to return the filename for True, at the expense of a bit of hobgoblinness 00:17
Zoffix OK, I'll do that
TimToady I'm also fine with return Failure when it ain't true :) 00:18
*ing
Zoffix ugexe: so leave it then. It'll unbreak once I make it return the filename again. Note: it'll be an IO::Path object tho
TimToady and we can talk about clamping down a bit more for 6.d, if there's a groundswell of support for that position :) 00:19
ugexe too late! :P Its just cleanup code for tests anyway
TimToady I love it when everyone shoots past each other trying to be accomodating... :) 00:20
*accommo
TimToady never could accomodate to the correct spelling of that word... 00:21
Geth nqp/uncurse: a44e6dedc5 | TimToady++ | src/QRegex/Cursor.nqp
reduce old match object to a singleton

Still can't get it quite down to a boolean, but at least we can avoid allocating every time MATCH is called.
00:27
rakudo/uncurse: 63e76d7afe | TimToady++ | 2 files
reuse NQP's singleton "did match" type

  (though for the moment we allocate our own singleton)
00:28
rakudo/uncurse: 13 commits pushed by MasterDuke17++, (Zoffix Znet)++, TimToady++
review: github.com/rakudo/rakudo/compare/6...fbf19d88da
rakudo/nom: d46e8df4cb | (Zoffix Znet)++ | src/core/IO/Pipe.pm
[io grant] Add IO::Pipe .path and .IO methods

That return an IO::Path type object. This fixes LTA error of .IO/.path crashing, since the inherited methods from IO::Handle try to instantiate an IO::Path from an empty string.
00:34
roast: 637500da24 | (Zoffix Znet)++ | S32-io/pipe.t
[io grant] Spec IO::Pipe.path/.IO returns IO::Path type object

Rakudo impl: github.com/rakudo/rakudo/commit/d46e8df4cb
rakudo/nom: c01ebea0a0 | (Zoffix Znet)++ | src/core/IO/Path.pm
[io grant] Make IO::Path.mkdir return invocant on success

Per discussion[^1], to ameliorate possible fallout from changes to
  &mkdir[^2], make the method return the invocant instead of True.
Since all IO::Path:Ds are True, the method's success can still be judged in boolean context, and this way &mkdir returns its old ... (5 more lines)
00:47
rakudo/uncurse: d46e8df4cb | (Zoffix Znet)++ | src/core/IO/Pipe.pm
[io grant] Add IO::Pipe .path and .IO methods

That return an IO::Path type object. This fixes LTA error of .IO/.path crashing, since the inherited methods from IO::Handle try to instantiate an IO::Path from an empty string.
01:16
rakudo/uncurse: c01ebea0a0 | (Zoffix Znet)++ | src/core/IO/Path.pm
[io grant] Make IO::Path.mkdir return invocant on success

Per discussion[^1], to ameliorate possible fallout from changes to
  &mkdir[^2], make the method return the invocant instead of True.
Since all IO::Path:Ds are True, the method's success can still be judged in boolean context, and this way &mkdir returns its old ... (5 more lines)
rakudo/uncurse: 762c63ce64 | TimToady++ | 2 files
Merge branch 'nom' into uncurse
rakudo/nom: 1f689a94e1 | (Zoffix Znet)++ | src/core/IO/Handle.pm
[io grant] Fix up IO::Handle.Str

Ensure we coerce $!path to .Str before returning it, since it can be a bunch of different things. Also use $.path, so that IO::Pipe uses its `method path` instead of the :path arg given to new.
The :path attr in IO::Pipe might need more thinking; should it be just ignored by .new and set to empty string?
01:55
roast: 64ff572916 | (Zoffix Znet)++ | 2 files
[io grant] Cover IO::Path/IO::Pipe's .Str/.path/.IO
01:58
ugexe mkdir("lib").child("MyModule.pm6").spurt(q|class MyModule { say 1; }|); # i like this better than the previous "lib".IO.mkdir.IO.child.....
Zoffix The previous looks broken; .mkdir used to return True on success until 2 hours ago 02:01
ugexe then it was even worse 02:03
i probably did "lib".IO.mkdir andthen {...}
Zoffix Have been getting 8s longer stresstests the last few hours :/ I'm hoping that's Google ripping me off with my VM rather than something I added today :\ 02:17
Geth rakudo/nom: 490ffd1562 | (Zoffix Znet)++ | src/core/IO/Path.pm
[io grant] Do not use self.Str in IO::Path errors

Use $!abspath instead. Since .Str does not take $!CWD into account, we might be producing very confusing error messages for paths that were created with CWDs that aren't the current $*CWD
02:19
rakudo/nom: 40217edfb1 | (Zoffix Znet)++ | 8 files
[io grant] Swap .child to .concat-with in all the guts

We want the old .child's behaviour that .concat-with now provides, instead of the much more expensive and throwy new .child that's about to be implemented.
02:41
Zoffix s/throwy/faily/;
oh boy... 02:53
method resolve (IO::Path:D: :$completely) {
# XXXX: Not portable yet; assumes POSIX semantics
And I need it for .child(). Wonder what's broken in .resolve()... 02:54
At least 184 instances of .child() in ecosystem... 02:56
I think I'll leave it as is for release, and make it "secure" after it, to give it a chance to boil a bit in bleed code, and maybe submit some PRs to ecosystem to swap .child to .concat-with or something. 02:57
Kinda having second thoughts about changing it with so much usage...
Is there some better short name for .child() ? 02:58
biggest problem: swapping existing code to .concat-with means forcing users to have 2017.04 compiler. So it's kinda crappy
Zoffix calls it a day for today 03:02
BenGoldberg wonders when is a day not a day? 04:23
Zoffix When it isn't full :) 04:57
BenGoldberg was kinda thinking of, "when it's tomorrow" 05:03
m: say "today" ~~ "day" 05:04
camelia False
BenGoldberg m: say "today" ~~ /day/
camelia ļ½¢dayļ½£
BenGoldberg m: say "tomorrow" ~~ /day/
camelia Nil
samcv cracks knuckles and decideds to try and fix the s:g { } issue with atom-language-perl6 which has been around a while 05:10
Zoffix \o/ 05:14
samcv another part of the codebase i've been planning on automatically generating
but have not gotten around to that yet
since that really creates consistency between delimiters and such like it did for the different kinds of quotes. much less bugs
there's like... way way too many regex definitions in here 05:22
which is why i have not automated this part yet becuase usually if remove one something breaks :P
geekosaur also re when is a day not a day? when it's a night 05:23
hm, why "also". furrfu. speaking of night...
(only awake because sinuses)
samcv ok i fixed it yay 05:33
Zoffix, will release as soon as travis/appveyor complete for Atom + Atom Beta 05:43
Zoffix No rush. 05:55
I'm going to bed as soon as this commit passes stresstest...
samcv well it's released. i have hated this bug for a while 05:56
glad it's fixed finally
Zoffix *phew* and it finally does 06:05
Geth rakudo/nom: 0e36bb26ba | (Zoffix Znet)++ | src/core/IO/Spec/Win32.pm
[io grant] Make IO::Spec::Win32!canon-cat 2.3x faster

Should make a bunch of IO::Path stuff faster on Windows
06:06
Zoffix NOW I can sleep
Zoffix drops to bed
samcv canon cat 06:13
samcv envisions a cat next to a cannon 06:14
nice. it exists resources0.news.com.au/images/2012/...cannon.jpg
lizmat Files=1190, Tests=56701, 199 wallclock secs (12.03 usr 4.75 sys + 1184.86 cusr 115.21 csys = 1316.85 CPU) 06:48
[Tux] This is Rakudo version 2017.03-254-g0e36bb26b built on MoarVM version 2017.03-128-gc9ab59c6 06:50
csv-ip5xs 3.234
test 13.329
test-t 5.269 - 5.456
csv-parser 13.146
samcv i should bump nqp so that the m:i speedup gets in 06:51
RabidGravy Zoffix++ cheers for the PR on XDG::BaseDirectory - I've not been testing everything frequently enough recently (boo to day job,) 06:57
Geth rakudo/nom: 822566f1ad | (Samantha McVey)++ | tools/build/NQP_REVISION
Bump NQP for case insensitive regex 2x speed boost

1b3f6cf4 Merge pull request #350 from samcv/foldcase 7d9f43c9 Make sure to push in the sval node before the indexic_s op fbd18cc6 Merge pull request #352 from MasterDuke17/make_errors_in_QASTCompilerMAST_more_awesome 66dfddd2 Make errors in QASTCompilerMAST more awesome a70dabf2 s/two/2/ 7194ff46 Merge pull request #351 from MasterDuke17/make_errors_in_QASTOperationsMAST_more_awesome 513d4ebf Make errors in QASTOperationsMAST more awesome ec856126 [moar] Use foldcase in QASTRegexCompilier
06:58
samcv [Tux], can you try re-running the test after this nqp bump?
Ā¦ rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....-g1b3f6cf4
samcv as long as it's not burdensome 06:59
[Tux] $ rakud 07:01
(alias for running all of it. takes a while to finish)
samcv i'm fearful that we've reached a plataue in the test-t timings 07:03
[Tux] samcv: we'll make time-travel-blasting speedup's if "next" is optimized to not being an exception where possible 07:06
This is Rakudo version 2017.03-255-g822566f1a built on MoarVM version 2017.03-128-gc9ab59c6 07:09
csv-ip5xs 3.068
test 12.810
test-t 4.994 - 5.037
csv-parser 12.812
2017.03-254 ā†’ 2017.03-255 07:10
samcv it's smaller right 07:13
it look ssmaller
RabidGravy it's smaller :) 07:25
the range was all above five the other day
samcv yey 07:26
cause i saw it does use m:i in the module
so hoped it would make it faster
since 1.8x to 3x speedup worst vs best case
Geth nqp/master: 11 commits pushed by (Pawel Murias)++
review: github.com/perl6/nqp/compare/1b3f6...7b7e2c1a16
10:20
jnthn Hm, I'm guessing uncurse didn't get merged yet? 10:27
I was going to pin the regression in github.com/jnthn/grammar-debugger/issues/34 on it
But if uncurse ain't merged it must be something else :S 10:28
nine jnthn: could it be that an EVAL's computation unit references the dynamic call chain somehow? That would explain why with the compile time EVAL, the Staging repo gets referenced in the byte code. 10:29
jnthn: and no, I don't think uncurse is merged 10:30
jnthn OK 10:31
I'm liable to have to fix that module once it is, so I'll look at the two together. 10:32
References the dynmaic callchain - it could be happening 10:33
nine I guess the more important question is: can I somehow prevent it from happening?
jnthn Though I can't think of where it might happen purposefully
So I'm suspecting "accident"
Well, find out what's doing it and stop it doing so, I guess :) 10:34
nine Nothing a couple 100 hours of work can't fix :D 10:35
jnthn :P
Having hunted many of our concurrency bugs, I can empathize :)
Did you try instrumenting the serialization code in Moar that adds dependencies? 10:36
nine I have started on that 10:37
jnthn github.com/MoarVM/MoarVM/blob/mast...ion.c#L275
That can at least tell you the kind of object indirectly referencing the parent
gah, that was all the wrong words
nine Ok, will continue in that direction. Thanks! :) 10:38
jnthn That can at least tell you the kind of object that's being serialized and the type of the referring object
You can use debug_name in gdb to get the names
That may be enough of a clue
nine Yeah, debug_name can be a life safer :) 10:39
jnthn I guess if that isn't a powerful enough debugging approach, the next step would be to try and make something that can data-dump an SC 11:03
So we can see what's in it 11:04
Zoffix No, uncurse wasn't merged. 12:07
"test-t 5.269 - 5.456"... so it wasn't just my VM running the stresstest 8s slower :/ something I commited last night sucks. 12:08
dogbert17 jnthn: a good example to showcase the progress made by 'better-fsa' is the example code in RT #129779 12:40
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=129779
timotimo how much better is it? 12:42
dogbert17 on my system, with two cores available I get:
(bad-fsa): Counting to 2000000; Non-promise iteration: 1.3932086; One iteration: 3.0489264 (setup: 0.0030221); 16 iterations: 86.9051643 (setup: 0.008308) 12:43
(better-fsa): Counting to 2000000; Non-promise iteration: 1.35415227; One iteration: 2.9348096 (setup: 0.0033342); 16 iterations: 31.4008981 (setup: 0.0030857) 12:44
timotimo what does "one iteration" mean? 12:45
dogbert17 looks as if the author is using a Promise do to the same calc as the non-promise iteration 12:47
dogbert17 could of course be totally wrong
timotimo i'm not sure i understand these measurements. with 16 iterations it takes 15x as much time?
hm, no, more like 10x as much 12:48
dogbert17 which is better than the 86 it took before 12:49
timotimo it is, yeah
dogbert17 m: say 86.9 / 3.05
camelia 28.491803
dogbert17 m: say 31.4 / 2.93
camelia 10.716724
jnthn That's a pretty dramatic improvement :) 12:50
m: say 16 * 2.93 12:51
camelia 46.88
timotimo ah, it doesn't divide work, it does as much work in each thread as it would do in a single thread
jnthn Right
m: say 16 * 1.35
camelia 21.6
jnthn I suspect it's still hugely over-subscribing the CPU though
And even then probably the GC sync-up is killing it
Will need to work some at that now the much larger FSA issue is out of the way 12:52
timotimo it'd be nice to graph it for every n between 1 and 16
jnthn The fibonaci one looks much nicer now 12:55
No thread: 12.2610092
Parallel: 4.05580449
Single: 12.6727114
No thread: 12.760576269
timotimo cool 12:56
dogbert17 nice
jnthn That's on a quad-core box
dogbert17 must upgrade soon, system is from 2010
jnthn Also note the slow-down for simply having threads even if you're only actually using one of them is also down to very little now 12:57
In theory I get new hardware next week :)
dogbert17 please elaborate :)
jnthn Will go 4 core -> 6 core (so, 8 virtual to 12 virtual)
Plus 32 GB RAM, and far faster/larger SSD 12:58
dogbert17 ohh, you'll be able to run spectests and compiles in seconds
dogbert17 have been eyeing the recently released Ryzen CPU's 12:59
timotimo huh. i must be doing something wrong 13:00
dogbert17 ?
timotimo because here i get 0.6005177, 1.6591586, 63.5066597
m: say 63.5066597 / 1.6591586
camelia 38.27642499
timotimo and like 80% spent in fixed_size_allocator 13:01
Zoffix updates perl6.vip/ to not promise deliverables today
eek... that was overoptimistic to say the least :}
timotimo but i did rebase my stuff on top of the new_fsa branch (because i rebased it on top of origin/master)
dogbert17 you didn't turn on FSA_DEBUG (or whatever its name is) by any chance
timotimo nah, it spends all its time in some atomic op in there 13:02
that wouldn't exist if fsa_debug was turned on
jnthn Also double the amount of CPU cache, and from Sandy Bridge (32nm) to Broadwell (14nm)
So hopefully I'll be getting faster builds and spectests :) 13:03
dogbert17 you definitely will, am stuck on Westmere if I remember the name correctly
timotimo for 8 iterations: 0.5527264 , 1.7122354 , 17.5421605 13:04
for 4 iterations: 0.553683 , 1.68850254 , 4.67553810
dogbert17 timotimo: maybe you're running the 'bad-fsa' branch :) 13:07
timotimo i'm running whatever's in master
timotimo tries re-configuring, realclean, rebuild
have to rebuild rakudo, also 13:09
dogbert17 my machine has served me well, still remember the immense boost my system got when I switched a my boot drive (5400 rpm HDD) for an SSD (Intel 80 Gig) 13:10
I had to rebould Rakudo
*rebuild rather 13:11
timotimo um
yeah, that changed things
dramatically
16 iterations: 0.5407265, 1.4378239, 7.6077481 13:12
m: say 7.607 / 1.438
camelia 5.289986
timotimo i have 4 logical cores
so it's basically just 25% to 30% overhead on top of that
Zoffix wonders which part of IO work caused this commit github.com/jonathanstowe/p6-Linux-...90dd168aaa 13:13
Zoffix looks at RabidGravy inquisitly
timotimo you mean IO wprk
dogbert17 timotimo: those are nice numbers 13:14
timotimo tries a plot 13:16
it's kind of hard to get a good result when it already switches directions at 4 13:18
RabidGravy YOU LOOKING AT ME! 13:19
timotimo hmm, hack also has only 4 cores available 13:20
it'd be interesting to test this on 6-core and 8-core machines
hm, so if i have 4 cores, and i do 16x as much work, it should take 4x as long, right? 13:21
that was my idea behind the 5.289 number being "25% to 30% overhead" 13:22
Zoffix RabidGravy: and yeah, it's now $target.symlink: $linkname.
Target is the target the link points to. I don't know why so many people call the link target :/ 13:23
RabidGravy yeah it makes more sense
timotimo dogbert17: do you want to post an update on the bug? i'll be afk for a bit, if you don't want to, i'll do it later on
robertle timotimo: if you want something run on a many-core machine and on't have one around, let me know...
timotimo can you get an absolutely-up-to-date rakudo with very-newest nqp and very-newest moarvm? 13:24
Zoffix RabidGravy: what was the problem in github.com/jonathanstowe/p6-Linux-...90dd168aaa ? Doesn't look like any of the IO changes I made.
timotimo gist.github.com/timo/a3a405f977840...34715e9cd4 - it'd be cool if you could run this and give me the output :) 13:25
RabidGravy Zoffix, it appears to be the .append didn't like an Int
Zoffix RabidGravy: also, you're coercing a Str basename to Int here, just to coerce it back to Str on the next line: github.com/jonathanstowe/p6-Linux-...a8d3817R50
timotimo robertle: ^
robertle timotimo: if you tell me how to build it! I have only used rakudobrew so far... 13:26
Zoffix m: my $x = "foo".IO; $x.append: 'X' 13:27
camelia Cannot resolve caller append(IO::Path: Str); none of these signatures match:
(Any:U \SELF: |values is raw)
in block <unit> at <tmp> line 1
Zoffix m: my $x = "foo".IO; $x.append: 42
camelia Cannot resolve caller append(IO::Path: Int); none of these signatures match:
(Any:U \SELF: |values is raw)
in block <unit> at <tmp> line 1
Zoffix Doesn't look like there's append for it?
Above is just the autoviv candidate 13:28
RabidGravy er, it was throwing something about unboxing 13:29
Zoffix shrugs
RabidGravy up to my armpits in OpenSSL right now
Zoffix :)
timotimo: the first 6 iterations on my 24-core box: gist.github.com/zoffixznet/4e0fd3e...6d5dc47340 13:34
(got bored with it and aborted it)
MasterDuke_ timotimo: results from my "quad" core laptop gist.github.com/MasterDuke17/bf5c0...a126957bb7 13:45
Zoffix m: say 43.4275427/7.0786173 13:46
camelia 6.135031866
Zoffix Interesting that it's 6x faster on your box :|
MasterDuke_ and this is just a dell xps 13, also gonna run it on my older, but "eight" core desktop 13:47
the laptop does have a haswell gen cpu, while the desktop is nehalem gen, so the beefier desktop isn't always faster 13:49
Zoffix: were your numbers from a laptop or desktop? if laptop, on battery or ac? 13:50
Zoffix MasterDuke_: Google Compute Engine VM 13:51
timotimo Zoffix: your moarvm is before the better-fsa branch got merged
Zoffix Oh :)
timotimo .tell robertle you can use "rakudobrew triple nom master master" 13:52
yoleaux timotimo: I'll pass your message to robertle.
timotimo Zoffix: would you re-run it with a more up-to-date moar? 13:53
MasterDuke_ desktop results gist.github.com/MasterDuke17/7e261...c78144f709 13:56
Zoffix In a bit. Trying to hunt down the commit that brought the slowness last night.
timotimo OK!
Zoffix Well, that was pointless. 13:58
MasterDuke_ it was rounded instead?
Zoffix Built as far as Apr 11th rakudo and checkout that time's roast and still getting 121s stresstest runs. Even though I had 111s runs about 24hrs ago, as posted in #MoarVM
timotimo MasterDuke_: that has a really strange bump near the beginning 13:59
Zoffix ZofBot: must be solar flares!
ZofBot Zoffix, These are used to initialize superclasses
timotimo always initializes superclasses with solar flares
Zoffix timotimo: was the merge version bumped or do I need to build moar master myself?
MasterDuke_ i usually use supernovas for superclasses
robertle timotimo: gist.github.com/anonymous/755aea8c...5ffdc74bb8
yoleaux 13:52Z <timotimo> robertle: you can use "rakudobrew triple nom master master"
robertle timotimo: will trt that, back in a sec 14:00
Zoffix guess not 14:01
timotimo the before/after will be interesting to see here.
nope, the last bumped moar_revision was right before the better-fsa brahc
branch
MasterDuke_ (timotimo: what do you mean strange bump? looks kind of linear to me (assuming you're referring to my desktop results)
timotimo the eight-core one 14:02
imgur.com/a/ItCBX
MasterDuke_ hm, yeah 14:03
Zoffix wtf 14:05
How is this even possible? gist.github.com/zoffixznet/7c7728e...138d786ce3 14:06
MasterDuke_ just ran it again and added those to the gist, but they look pretty similar
Zoffix Built HEAD rakudo after nuking nqp/MoarVM... and it's missing nqp/MoarVM :S yet works
timotimo why would nqp/MoarVM missing be a problem? 14:07
i'm pretty sure it'd take its stuff from the install/ folder
robertle timotimo: rakudobrew triple ... seems broken for me, need to head to the playground. guess it's sorted anyway, let me know if you need more later
Zoffix I dunno, because it was there for me every time for the past year?
timotimo robertle: can you tell me in what way triple is broken?
Zoffix guess as good a time as any to nuke my rakudo dir: cpan@perlbuild2~/CPANPRC/rakudo (nom)$ du -sh 14:08
1.3G .
robertle timotimo: first like this: github.com/tadzik/rakudobrew/issues/63 14:09
with the patch it gets a bit further, but does not finish 14:10
will look into it when I get back
timotimo mumbles something about rakudobrew not being recommended
robertle is there an alternative 14:11
timotimo yeah, just checkout rakudo and perl Configure.pl --gen-moar=master or what it is
Zoffix No?
Why do people recommend others to use random dev commits -_-
timotimo Zoffix: i want robertle to run moarvm master 14:12
Zoffix I see
timotimo that's why i recommend using moar master, so they can get moar master?
:\
rakudobrew is useful if you want to switch between 10 different versions of rakudo installed at the same time and have your bin scripts easily switchable
Zoffix Well, I also see Ulti recommending rakudobrew to users today: irclog.perlgeek.de/perl6/2017-04-15#i_14431467
timotimo yeah, i was surprised by that
maybe ulti's a bit out of the loop, or i'm just hallucinating the demise of rakudobrew 14:13
timotimo sees perl6.org/downloads recommending rakudobrew 14:14
i suppose it'd be best to just bump moar and nqp 14:17
Geth nqp: 6432a25e6e | (Timo Paulssen)++ | tools/build/MOAR_REVISION
bump moarvm for better multithreading performance
14:19
Ā¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...8-g40881cd
rakudo/nom: 20af51fef9 | (Timo Paulssen)++ | tools/build/NQP_REVISION
bump nqp and moarvm for better multithreading performance
Ā¦ rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....2-g6432a25
Zoffix wow, what a difference 14:23
timotimo: gist.github.com/zoffixznet/783f029...1f24e5ea6a
that's my 24core box
timotimo nice 14:24
MasterDuke_ hot damn!
timotimo could you turn the number up to 32 perchance?
so we can see the point where it starts going up?
once it goes past the core count?
Zoffix Which number? the number of cores? 14:25
timotimo there's a for loop that goes from 2 to 16
Zoffix Ah
1 sec. I nuked everything and building the new HEAD
timotimo might also have to tell the scheduler that it's okay to make that many threads
MasterDuke_ timotimo: btw, what sort of information could one get out of your telemeh_try branch? 14:33
timotimo good question
nobody knows for sure
BBIAB 14:34
Zoffix timotimo: gist.github.com/zoffixznet/b4dcb14...cf68399aee 14:38
timotimo Zoffix: two runs for improved precision? 14:42
Zoffix timotimo: one had the default 16 max threads, the other 40 14:43
timotimo oh of course
thank you, i shall put that into a gnuplot soon-ish 14:44
MasterDuke_: it ought to be able to tell you what kind of stuff moarvm spends its time with
MasterDuke_ in a different way than perf?
timotimo yeah 14:45
Zoffix ZOFVM: Files=1240, Tests=133707, 115 wallclock secs (22.60 usr 3.15 sys + 2387.36 cusr 130.95 csys = 2544.06 CPU)
MasterDuke_ how so?
timotimo perf is probabilistic, whereas telemeh is precise
MasterDuke_ ah 14:46
Geth roast: 925e6f03fe | (Zoffix Znet)++ | S05-modifier/ignorecase.t
Un-todo now-passing tests

The ligatures in the haystack of case insensensitive regex don't work ones
14:47
timotimo perf is based around telling you what exact instruction it hit when it randomly sampled
telemeh has a concept of "intervals"
and it'll also give you specific info about which thread is doing what
because i added output for stuff like "trying to take a lock" you can see how lock-ownership passes on between different threads, for example
though of course you can't "see" it until i build a visualizer for all this 14:48
MasterDuke_ so would help understand the difference in the benchmark we've just been trying, especially before better-fsa and after?
timotimo the fsa doesn't have any telemeh commands yet 14:49
so it's unlikely that we'd be able to point at the fsa for our issues 14:50
MasterDuke_ btw, with all the recent benchmarking and chatting with tadzik about viewing profiles, i realized i still haven't implemented those changes to the sql output you suggested 14:53
maybe can find some time to chat about what could be done to make it better? 14:54
timotimo yeah 14:55
i should have some time right now, for example
MasterDuke_ i have time now as well 14:56
timotimo cool 14:57
MasterDuke_ so i think the one thing was putting 0s instead of NULLs? 14:58
timotimo yeah, that should be easy 15:01
MasterDuke_ it looks like right now NULLs can end up in the 'gcs', 'callee's, and 'allocations' tables
they can all be 0s?
timotimo i think we only had NULL because i optimized the profiler output to not have anything if the value is 0 15:02
so we should be able to just output 0 instead
MasterDuke_ timotimo: github.com/MasterDuke17/nqp/commit...5e446d5ddb 15:06
timotimo hm, maybe push "0" instead of 0 15:07
that might save us a tiny bit of stringification later on
wanna have a look at a telemetry log from the threading thingie? 15:11
Geth rakudo/nom: fd503f89ed | (Zoffix Znet)++ | 5 files
Revert "[io grant] Remove `role IO` and its .umask method"

This reverts commit 87987c2dcbe6ca607ef623c4eb4b1a9f40d6af78.
15:13
rakudo/nom: c95c4a75d1 | (Zoffix Znet)++ | 5 files
[io grant] Make IO::Path/IO::Special do IO role

  - Brought back the removed role in previous commit
  - Make IO::Path and IO::Special do it
  - It don't got no methods; we do it so that when we make our coercers
   type-check the return values all our IO() coercers that coerce
   to IO::Path don't explode.
MasterDuke_ timotimo: yeah, have a gist or something? 15:15
timotimo i just uploaded it to the whateverable server 15:16
it's a .txt.gz file in the home folder
MasterDuke_ heh, the third column looks like the vines in the original marios 15:18
what was the perl6 code run? 15:19
timotimo that's the script we've been using but instead of 2..16 it's 2, 4, 8, 16 15:20
MasterDuke_ i thought maybe so, i didn't see any moarvm functions that looked like anything interesting was happening 15:22
timotimo you can see it spawn the additional threads
MasterDuke_ is `~($gc{$f} // "0")` faster than `~($gc{$f} // 0)`? 15:23
timotimo i think stringifying a string is cheaper than stringifying an int, even though it's one in the intification cache
it's probably a micro-optimization that doesn't contribute much to overall profile enerating performance 15:24
i find it a little strange that after each thread gets created it'll do a gc run first 15:26
MasterDuke_ 0s stringified 15:30
timotimo: is that done deliberately? 15:32
timotimo what exactly? 15:33
the gc thing? 15:34
MasterDuke_ yeah 15:35
timotimo btw, using native ints here makes the whole thing a boatload faster 15:36
Non-promise iteration: 0.023987, One iteration: 0.10999810, 16 iterations: 0.8526233 15:37
MasterDuke_ did you change to `$i = $i + 1` also? 15:38
timotimo yes
makes only a small difference, it seems 15:39
could also be thermal throttling kicking in 15:41
MasterDuke_ not as much as switching to natives, no. but noticeable
timotimo right
we still don't recognize the variable as being native in the optimizer ,i think
hm, no, we do that 15:42
MasterDuke_ we were chatting with jnthn about that a little while ago. i don't remember the exact reason $i++ couldn't be turned in to $i=$i+1, but i think it had something to do with outer blocks 15:45
and if they had a variable with the same name. i dunno 15:46
timotimo huh 15:47
MasterDuke_ maybe here irclog.perlgeek.de/perl6/2017-03-25#i_14322350 15:55
timotimo that's about automatically turning a for loop into a while loop 15:56
well, a loop loop
m: loop (my $i = 0; $i < 10; $i++) { }; say $i 15:57
camelia 10
timotimo mhh, the scoping is different from a for loop, yeah 15:58
MasterDuke_ m: loop (my int $i = 0; $i < 10_000_000; ++$i) { }; say now - INIT now 16:07
camelia 0.0637503
MasterDuke_ m: loop (my int $i = 0; $i < 100_000_000; ++$i) { }; say now - INIT now
camelia 0.6624194
MasterDuke_ m: loop (my int $i = 0; $i < 100_000_000; $i = $i + 1) { }; say now - INIT now
camelia 0.6310619
MasterDuke_ not a huge difference there
m: loop (my $i = 0; $i < 100_000_000; ++$i) { }; say now - INIT now
camelia 15.92080205 16:08
MasterDuke_ m: loop (my $i = 0; $i < 100_000_000; $i = $i + 1) { }; say now - INIT now
camelia 15.13526735
MasterDuke_ or there. nice, i remembered it being larger than that 16:09
TimToady jnthn: I had not planned on merging uncurse till after the release, since the IO work is already a fairly big perturbation, but I could probably be argued into merging it for this release 16:10
I suspect nine's serialization deps are coming through the language braid, because braids are trying to be fairly agressive in what participates in the "current language"
so we might need to break a language braid dep somewhere strategically to get things not to serialize 16:11
though, in fact, EVAL is still using %?LANG, not $?LANG, so maybe that's not what's really happening 16:14
timotimo MasterDuke_: sorry, i don't seem to have been actually helping with the profiler stuff? 16:17
jnthn TimToady: Ah, OK. I'm not in a hurry, just tied for time as usual so trying to be efficient. ;)
MasterDuke_ heh, well i'm down to one hand right now anyway
timotimo oh, you got a cat? :D 16:18
MasterDuke_ but what were your other ideas?
timotimo the sql version of the profiler still doesn't give us enough data to construct the full call graph 16:19
MasterDuke_ heh, tiny humans are just as hand-consuming
timotimo oh, hah
i totally forgot you mentioned that recently
Geth nqp/uncurse: 14 commits pushed by (Pawel Murias)++, (Timo Paulssen)++, TimToady++
review: github.com/perl6/nqp/compare/a44e6...005a2b7a20
MasterDuke_ hm, i thought it had all the data the json version did?
Geth rakudo/uncurse: 9 commits pushed by (Zoffix Znet)++, (Samantha McVey)++, (Timo Paulssen)++, TimToady++ 16:20
timotimo MasterDuke_: it has all the data, but a sql table is flat, the json data is nested 16:44
if you don't put in something to represent how the json data was nested, you'll lose data even though all the fields are still there
MasterDuke_ aren't there ids that refer to each other? 16:45
timotimo yeah, but something about them was wrong
i had a hard time figuring out exactly how it was wrong
didn't help that the id fields were all rather nebulously named
MasterDuke_ hm..i tested with a tiny profile and thought it was right, but it's not easy 16:46
timotimo yeah, it's rather difficult to make sense of the whole thing 16:47
nine I've got my Ryzen CPU + board + 32 GB RAM at home since Tuesday. But I'm short a CPU cooler, Delivery problems :/
Ironically the cooler is the only part built in Austria and the only part that's hard to get in Austria... 16:48
MasterDuke_ nine: nice, i've been lusting after one of those. which cpu?
timotimo: suggestions for the id names?
nine R7 1800X 16:49
MasterDuke_ or some code that will generate a good (small!) test profile?
TimToady uncurse does seem to be 1-2% faster compiling the setting, and it does seem to be in a stable state, or at least a metastable state, and it does pass one TODO for Match.perl, so maybe it's worth merging earlier 16:50
MasterDuke_ nine: good deal. will probably go 1700 myself. want to reduce the heat generated in my office 16:51
RabidGravy speaking of new computers what's the biggest bang for the buck I can get in a microATX/NUC form factor? I'm thinking of getting a bunch more Gigabyte Brix to run continuous testing of my modules on
but don't know what the state of the art of that stuff is
dogbert17 nine: interesting, what MB and memory did you get? 16:54
nine MasterDuke_: the 1700 is also much more cost efficient. I just figured it's time for AMD to earn some real cash and I can afford it
dogbert17 is pondering the 1600 or 1700 16:55
ugexe you can build some mean 32+ thread systems pretty cheap from used v2/v3 xeons 16:56
timotimo MasterDuke_: ideally it'd point out what the "target" table and field are
no clue what code would give a good profile :\ maybe something from rosettacode as examples? there was a github repository that had rosettacode data in it for easy running 16:57
dogbert17 32+ threads, impressive, that would crush Zoffix puny 24 core setup :) 16:59
the cooler nine is mentioning sounds suspiciously like some Noctua model 17:00
robertle timotimo: gist.github.com/anonymous/650ff6b0...8992e572b4 17:14
looks quite flat even after it matches the number of cores 17:15
timotimo there's also a variable that limits the number of threads the thread pool scheduler will even create
Int :$!max_threads = (%*ENV<RAKUDO_MAX_THREADS> // 16).Int 17:17
so we'd expect the graph to become steeper after 16
Zoffix dogbert17: 32 cores is a click away for me. I'm just not seeing the benefit from them on stresstest. Also google recently added 64-core boxes :) if only I could figure out how to launch them
nine dogbert17: Gigabyte AX370-Gaming 5 and Corsair Vengance LPX CMK32GX4M2B3000C15 17:19
dogbert17: and yes, the cooler is supposed to be a Noctua NH-D15 SE-AM4 17:20
robertle timotimo: I don't think that limits to 16 threads! and thge graph doesn't look it either... 17:22
timotimo: imgur.com/a/2d7q4 17:25
timotimo huh, interesting
robertle doesn't // just say "if not defined use the other"? 17:26
timotimo yup
MasterDuke_ robertle: what if you set MAX_THREADS to a small number? e.g., 4 17:27
robertle a moment 17:29
MasterDuke_ timotimo: in `"allocations": [ { "id": "11", count": 1 } ]` from a json profile, what is that id? 17:30
there are a bunch of those, all with id=11 (and some with other ids) 17:31
for this code: sub a($b) { say $b }; a($_) for ^2 17:32
ugh, and the regular profile allocations tab is busted so i don't have anything to compare with 17:39
maybe need to fix that first 17:40
is it a problem with the raw data? or the html/js that's meant to display the data? 17:41
robertle MasterDuke_: gist.github.com/anonymous/f0afc000...ba3fbd898d imgur.com/a/PKl7n 17:49
lighter blue is with RAKUDO_MAX_THREADS=4 17:50
timotimo MasterDuke_: i think that points at the name of the thing allocated
MasterDuke_ `"11": "List"` so maybe this? from the very beginning of the json 17:51
robertle: 4 definitely makes it worse 17:52
timotimo yup
tthat ought to be the one
MasterDuke_ oh ha, i stick those in the 'allocators' table already 17:53
timotimo another id-to-thing connection is the way we re-use filename and line number
can that table be called "types" or "classes" maybe? 17:54
MasterDuke_ sure
re-use filename and line number?
timotimo yeah, instead of putting those into every json object we just refer to a big list at the beginning 17:55
MasterDuke_ right, same list i get the allocators from 17:56
if hash, filename and line number, else allocator 17:57
timotimo oh, ok
MasterDuke_ filename and line number go in the routines table 17:58
which i join with the callees table to replicate the info in the routines tab of the regular profile (and the qt viewer) 18:00
timotimo right, the routines tab is a join and aggregate of all routines with the same filename/line number/routine name
MasterDuke_ select case when r.name = "" then "<anon>" else r.name end as name, r.file, r.line, sum(entries) as entries, sum(case when rec_depth = 0 then inclusive_time else 0 end) as inclusive_time, sum(exclusive_time) as exclusive_time from callees c, routines r where c.id = r.id group by c.id order by exclusive_time desc; 18:01
timotimo hm 18:03
i'm not sure i really understand how rec_depth works
i'm not sure we can just write the inclusive time thing as sql 18:05
as we have to take times from any routine we find in the call graph below this
and every given routine can occur as many times as it wants
AlexDaniel Zoffix: remember I told you that I use my laptop on my long bus rides? 18:06
Zoffix: turns out somebody took a picture of me a few months ago
MasterDuke_ i think that's what rec_depth is supposed to do
AlexDaniel Zoffix: and by pure luck that picture got to meā€¦
Zoffix: files.progarm.org/bus.jpg
timotimo hah 18:08
ugexe hmm zef's testers.p6c.org reporter should work (it sends the same data as panda reporter). but panda doesnt send reports properly now either 18:10
timotimo ah, interesting 18:15
i think i should be able to find something out by going to www.p6c.org
is FlightRecorder what gathers the data up? 18:16
ugexe im not sure what happens after the data gets posted lol
MasterDuke_ timotimo: i believe, but couldn't swear to, that i hacked nqp to write both json and sql profiles and that query gave the same numbers for inclusive and exclusive as the qt viewer showed
timotimo do the reports reach the server at a specific port? 18:17
ugexe 80
timotimo hm, ok, then i'll have to look at the apache conf 18:18
what's the hostname and path?
ugexe gist.github.com/ugexe/f69ba589ef20...54feea9309 18:19
timotimo OK, that's port 3000
ugexe my $sock = IO::Socket::INET.new(:host<213.95.82.53>, :port(80));
timotimo i mean it gets proxied to port 3000
nothing in the apache errors log 18:21
unsurprisingly
ugexe (HTTP/1.1 400 Bad Request Date: Sat, 15 Apr 2017 18:20:37 GMT Server: Apache/2.4.10 (Debian) Content-Length: 301 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> 18:23
<address>Apache/2.4.10 (Debian) Server at perl6.org Port 80</address> </body></html>)
timotimo Apr 15 06:10:02 www starman[474]: Use of uninitialized value in subroutine entry at /usr/local/share/perl/5.20.1/Dancer
/FileUtils.pm line 34
ugexe hmm 18:24
timotimo could that have anything to do with anything?
ugexe long ago things like how you representing null would break it 18:25
timotimo gist.github.com/timo/d321ee22531c2...9b03bf6b72 - this is the execution part of the report thingie
MasterDuke_: i don't actually really know how recdepth works :) 18:34
MasterDuke_ neither do i anymore. but if it gives correct results... 18:35
timotimo heh. 18:36
AlexDaniel s: 'sprintf', \('<%#B>', 12) 18:42
SourceBaby AlexDaniel, Something's wrong: ā¤ERR: Cannot resolve caller sourcery(Str, Capture); none of these signatures match:ā¤ ($thing, Str:D $method, Capture $c)ā¤ ($thing, Str:D $method)ā¤ (&code)ā¤ (&code, Capture $c)ā¤ in block <unit> at -e line 6ā¤ā¤
AlexDaniel s: 'sprintf', '<%#B>', 12
SourceBaby AlexDaniel, Something's wrong: ā¤ERR: Cannot resolve caller sourcery(Str, Str, Int); none of these signatures match:ā¤ ($thing, Str:D $method, Capture $c)ā¤ ($thing, Str:D $method)ā¤ (&code)ā¤ (&code, Capture $c)ā¤ in block <unit> at -e line 6ā¤ā¤
timotimo hm? sourcery can only do methods? 18:43
MasterDuke_ s: &sprintf, \('<%#B>', 12)
SourceBaby MasterDuke_, Sauce is at github.com/rakudo/rakudo/blob/c95c...ol.pm#L291
timotimo ah, yes
AlexDaniel right!!
timotimo was about to try that
AlexDaniel dammit, I'll never learn that. I guess I have to fix the bot itself insteadā€¦ 18:44
MasterDuke_ timotimo: does this look like reasonable allocation numbers for a random profile i had lying around? gist.github.com/MasterDuke17/b2145...8fb5ea4eaa 18:48
timotimo hmm, perhaps 18:50
MasterDuke_ gist updated with results from the profile of `sub a($b) { say $b }; a($_) for ^2` 18:52
timotimo dinner now 19:03
Geth roast: 71034737d1 | (Pawel Murias)++ | S02-lexical-conventions/unicode-whitespace.t
[js] Fudge around EN QUAD/EM QUAD vertical white-space matching weirdness
19:16
rakudo/js: 5 commits pushed by (Pawel Murias)++ 19:19
MasterDuke_ pmurias: as someone who obviously knows more JS than nothing i know, are you familiar with angular.js at all? 19:23
pmurias I have used the version 1 angular.js before 19:24
MasterDuke_ pretty sure that's what our profile output uses 19:25
how easy is it to debug? our profiles currently have some empty sections, even though the raw data is present 19:26
pmurias I could give a try at fixing that, what should I checkout/look into? 19:27
timotimo if you don't have the angular batarang installed, you can forget about debugging it
MasterDuke_ the "Allocations" section is definitely wrong (nothing shown, raw data present) 19:29
pmurias is looking into it 19:40
MasterDuke_ pmurias++ 19:41
pmurias it seems to be bitrot from an dependency upgrade, I'll take a shower to freshen up and look into fixing it 19:47
MasterDuke_ nice, that's been broken for a while now, it'll be good to get it working again (and will let me verify my sql numbers) 19:51
Geth nqp: 211b0f2ba3 | (Pawel Murias)++ | src/vm/moar/profiler/template.html
Fix bitrot in moarvm profiler
20:18
nqp: 30a965887f | (Pawel Murias)++ | src/vm/js/Compiler.nqp
[js] Stuff to fix nqp::p6initied
pmurias MasterDuke_: I fixed that
MasterDuke_ pmurias: cool, trying now 20:26
pmurias++ working for me. nice to get that in before the release 20:30
.tell lizmat fyi, since i think you've mentioned this before, pmurias just fixed the allocations tab in the profiler output 20:31
yoleaux MasterDuke_: I'll pass your message to lizmat.
MasterDuke_ timotimo: the allocation names and numbers match between my sql output and the allocations tab on a regular profile (now that pmurias fixed it) 20:48
over in #perl6 Xliff is trying to compile script that's just a large (the whole file is 191k lines) hash of hashes, but gets `===SORRY!=== Frame 2 local access out of range` during the mbc stage 20:58
anybody have any idea?
jnthn Yes. A hash constructor is just a call, and there's an upper limit of allowed arguments 21:06
lizmat mbc stage?
yoleaux 20:31Z <MasterDuke_> lizmat: fyi, since i think you've mentioned this before, pmurias just fixed the allocations tab in the profiler output
jnthn It's actually waaay higher on MoarVM than on the JVM
By a factor 256 or so :)
lizmat but but mbc, isn't that Parrot ?
jnthn mbc = MoarVM Bytecode 21:07
The Parrot one was pbc :)
lizmat ah
ok :-)
ah, yes
MasterDuke_ jnthn: src/mast/compiler.c:627: `if (l->index < 0 || l->index > 32768) DIE(vm, "Frame %u local access out of range", ws->current_frame_idx);`
lizmat *phew*
jnthn Yup, that code's just correctly doing its job
The generated code really did spit out an out-of-range index
It's probably the case that there's some kind of code-generator tweak we can do 21:08
But I suspect that only makes the problem happen later 21:09
MasterDuke_ splitting it up into a hash create and then add?
jnthn That would work...but seriously, why not just use something that's designed to be a serialization format? 21:10
timotimo pmurias: how on earth did you figure out that change was needed? 21:11
MasterDuke_ well, it's not my code or use case, so i don't really care. if it's expected behavior that's fine
jnthn MasterDuke_: It's an implementation limitation, and it's certainly not something with an easy fix. 21:14
There may be semi-easy ways of making it not blow up until the data gets even bigger 21:15
MasterDuke_ think it's worth mentioning the max size of type literals in the docs ?
jnthn May be worth a note, yeah 21:16
And point people to things like %?RESOURCES
MasterDuke_ or fail faster/earlier? took almost 4min to die for him
jnthn o.O
MasterDuke_ though most of that was parsing 21:17
timotimo pmurias++ 21:19
lizmat does pmurias++ fix need a bump, or should I see the result in HEAD already ?
MasterDuke_ jnthn: what exactly is the limitation on hash literals? number of top level keys? total number of keys? 21:26
timotimo each hash gets its own limited number of entries it can have
nested hashes count as just one entry 21:27
jnthn This is true, but it may also be the case that the whole hash counts as a single expression, meaning any temporary registers may not be freed up 21:28
Since that happens at statement level in some cases
So it may run into exhaustion there also
timotimo oh, oof
MasterDuke_ lizmat: his fix is in nqp HEAD, but not rakudo
jnthn Anyways, I don't actually know, and we'd need to look at the code we're producing 21:29
MasterDuke_ well, is there a limit to the top level of entries? i could add that info and say literals can't be that big 21:30
s/entries/keys/
lizmat whee.... pmurias++ 21:40
running a spectest now, if clean will bump nqp
Geth rakudo/nom: c16cdb2ce7 | (Elizabeth Mattijsen)++ | tools/build/NQP_REVISION
Bump NQP version for Allocations tab in profile fix

  pmurias++
21:44
rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....4-g30a9658
354a4dbbda | (Elizabeth Mattijsen)++ | docs/ChangeLog
lizmat good night, #perl6-dev! 21:48
timotimo good night lizmat! 21:49
jnthn 'night, lizmat 21:55
timotimo it's really not necessary for an enum value to check for isnanorinf when trying to ACCEPTS another enum value ā€¦ 21:56
i wonder when and how that changed
benchable6: releases enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } }; 21:59
benchable6 timotimo, starting to benchmark the 17 given commits
timotimo, benchmarked the given commits, now zooming in on performance differences 22:00
timotimo, gist.github.com/2f470878dd2668e383...11bcc3d67a
AlexDaniel benchable6: 94780d7,2c552d9 enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } }; 22:03
benchable6 AlexDaniel, starting to benchmark the 2 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences
AlexDaniel, Ā¦94780d7: Ā«0.2110Ā» Ā¦2c552d9: Ā«0.1821Ā»
Geth rakudo/nom: 17d34cdc91 | (Timo Paulssen)++ | src/core/Enumeration.pm
allow for faster Enum ~~ Enum

it used to go through Numeric's ACCEPTS, which first checks isnanorinf, and also has a nested scope in it.
AlexDaniel notice how it actually found which commit caused the speedup 22:04
amazingā€¦
benchable6 is probably more reliable than I thought
(although the graphs suck)
timotimo wow, this accepts i made in there is a whole bunch faster 22:05
i don't see how those commits it's got there are actually relevant here?! 22:07
AlexDaniel timotimo: benchable is effectively bisectable 22:08
timotimo right
but how do these commits have anything to do with my code? :D
AlexDaniel timotimo: Ā¦2016.02: Ā«0.2214Ā» Ā¦2016.03: Ā«0.1780Ā»
timotimo: you asked for releases, that's what it got ā†‘
timotimo: then it realized that the difference is actually significant
timotimo: so it tried one more commit between 2016.02 and 2016.03 22:09
timotimo yeah
i realize that much
but the commits it pointed out
AlexDaniel and again and again, until it actually figured which commit caused the speedup
timotimo they are for eqv on signature and parameter
don't think i use either of those in my code?
AlexDaniel ah
timotimo anyway
this new accepts method is super fantastic
AlexDaniel benchable6: 94780d7,2c552d9,HEAD enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } };
benchable6 AlexDaniel, starting to benchmark the 3 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences 22:10
AlexDaniel come on benchable, I know which commit it is :)
benchable6 AlexDaniel, gist.github.com/1e21854ada69394ea7...25c0b233ea
AlexDaniel timotimo: actuallyā€¦ yesā€¦ 22:11
timotimo: looks like noise :|
benchable6: 94780d7,2c552d9 enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } };
benchable6 AlexDaniel, starting to benchmark the 2 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences
AlexDaniel, Ā¦94780d7: Ā«0.2092Ā» Ā¦2c552d9: Ā«0.1793Ā»
timotimo it's probably not the best idea to use roll there
AlexDaniel benchable6: 94780d7,2c552d9 enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } };
benchable6 AlexDaniel, starting to benchmark the 2 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences
AlexDaniel, Ā¦94780d7: Ā«0.2122Ā» Ā¦2c552d9: Ā«0.1785Ā»
AlexDaniel benchable6: 94780d7^,2c552d9^ enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } };
benchable6 AlexDaniel, starting to benchmark the 2 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences
AlexDaniel, Ā¦94780d7^: Ā«0.2119Ā» Ā¦2c552d9^: Ā«0.2114Ā»
AlexDaniel whateverā€¦ 22:12
timotimo benchable6: releases: enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { $_ = Baz; when Quux { $foo = $foo + 1 } }
benchable6 timotimo, Ā¦releases:: Ā«Cannot find this revision (did you mean ā€œreleasesā€?)Ā»
timotimo benchable6: releases enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { $_ = Baz; when Quux { $foo = $foo + 1 } }
benchable6 timotimo, starting to benchmark the 17 given commits
timotimo, benchmarked the given commits, now zooming in on performance differences
AlexDaniel slaps benchable6 22:13
Cannot coerce NaN to an Int in method y-ticks at /home/bisectable/.rakudobrew/moar-nom/install/share/perl6/site/sources/F589ED5005168E0E2A09F070DB83A3AB0EAA38BC (SVG::Plot) line 436 22:15
/o\
timotimo o_O
yikes
AlexDaniel benchable6: releases enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { $_ = Baz; when Quux { $foo = $foo + 1 } }
benchable6 AlexDaniel, starting to benchmark the 17 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences 22:16
AlexDaniel same thing again
benchable6: HEAD^,HEAD enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { $_ = Baz; when Quux { $foo = $foo + 1 } }
benchable6 AlexDaniel, starting to benchmark the 2 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences
AlexDaniel, Ā¦HEAD^: Ā«Ā«run failed, exit code = 1, exit signal = 0Ā»Ā» Ā¦HEAD: Ā«Ā«run failed, exit code = 1, exit signal = 0Ā»Ā»
AlexDaniel timotimo: ā€œCannot assign to an immutable valueā€? 22:17
benchable6: releases enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { given Baz { when Quux { $foo = $foo + 1 } } } 22:18
benchable6 AlexDaniel, starting to benchmark the 17 given commits
AlexDaniel, benchmarked the given commits, now zooming in on performance differences 22:19
timotimo oh 22:20
benchable6 AlexDaniel, gist.github.com/997b48f9b614f23634...6f736e93e5
timotimo is that HEAD the right-now-HEAD? 22:21
AlexDaniel say 42
timotimo like, the commit i just pushed a minute or two ago?
evalable6 42
AlexDaniel yes 22:22
timotimo nice
you see how it's a little faster than it used to be?
but it also was faster a while ago
right, that commit where it does the pretty big spike upwards .. 22:23
that's when Numeric.ACCEPTS got a nested scope
i might want to also make Numeric.ACCEPTS faster now 22:25
AlexDaniel Unhandled exception in code scheduled on thread 27 22:32
Unhandled exception in code scheduled on thread 30
too many open files
:|
timotimo ;( 22:34
m: say 4.7 / 5.5 22:37
camelia 0.854545
timotimo an acceptable improvement.
the new accepts method won't get jitted it seems, let's see why 22:43
huh. it claims it can jit it 22:45
perhaps only when it's profiling? :\
Geth rakudo/nom: 89457f8d57 | (Timo Paulssen)++ | src/core/Numeric.pm
make Numeric.ACCEPTS(Any) about 15% faster
22:50
rakudo/nom: e0e0800897 | (Timo Paulssen)++ | src/core/Numeric.pm
accidentally committed wrong version
timotimo maybe there's another few percent to be had by rewriting in nqp, or by adding a new candidate that's tighter 23:28