Perl 6 language and compiler development | Logs at colabti.org/irclogger/irclogger_log/perl6-dev | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
Set by Zoffix on 27 July 2018.
00:56 fake_space_whale joined 01:17 Kaiepi left 01:18 Kaiepi joined 01:20 Kaiepi left, Kaiepi joined
fake_space_whale When a bug is marked as "testneeded" for rakudo, are those supposed to be tests in rakudo/t for test in roast? 01:25
MasterDuke fake_space_whale: usually roast 01:29
fake_space_whale Thank you
MasterDuke if it's something about the text of an error message however, that would usually be in rakudo's t/ 01:30
fake_space_whale ah, that makes sense 01:32
01:37 benjikun left
MasterDuke oh nice, now my int-as-default nqp passes all its tests 01:40
whoops, but rakudo segfaults before it even gets to the core setting
wait, now it does, segv hopefully was just random 01:42
02:49 |Tux| left 02:54 |Tux| joined 03:08 Kaiepi left 03:09 Kaiepi joined
Geth roast: ribbon-otter++ created pull request #456:
Add tests for #2143, Distribution::Resource.^mro
03:19
06:08 dct joined 06:15 diakopter left 06:16 fake_space_whale left 06:30 dct left 06:38 robertle joined 06:43 lizmat left 07:14 ufobat___ joined 08:06 lizmat joined 08:40 [TuxCM] joined 09:29 brrt joined
brrt Zoffix++ nice slides 09:29
regarding the speed-tips, slightly depressing slides as well
Ulti yeah the .123 vs .123e0 tips are something worth adding to an intro tutorial 10:18
Im actually optimising a bunch of python numeric code right now with a JIT compiling package called numba and I'm noticing I need to wrap floats in numpy.float64() all over the shop to get the most out of that too 10:20
so its a general problem even outside of rats and floats
10:24 robertle left
Ulti hmmm one thing in numba is you decorate a function to say its only going to be using the features that can be handled so simple numeric code etc. is it impossible in Perl 6 to add a trait to a sub/method to say all rats inside should actually be native doubles or something? 10:26
10:26 brrt left
Ulti sub optimised_thing is native_numeric {} 10:27
by impossible I mean in Perl 6 itself, is there any meta type operation to get at the variables and change their types at the level of a function? 10:30
10:31 [TuxCM] left 10:53 brrt joined 11:15 brrt left, brrt joined
brrt Ulti: we wanted macro's at some point 11:22
and in a more general sense, what we want is the ability to add 'cleverness' to our compiler
.tell Zoffix you're welcome back on #moarvm if you fancy 11:34
yoleaux brrt: I'll pass your message to Zoffix.
lizmat m: my int $max = 10_000_000; for ^$max { }; say now - INIT now 11:47
camelia 0.50097303
lizmat m: my int $max = 10_000_000; for ^$max -> int $_ { }; say now - INIT now 11:48
camelia 0.1320692
lizmat timotimo: ^^^
so I have a patch that will plug the right signature into the block, but I don't get that optimization still
suggestions ?
12:01 [TuxCM] joined 12:13 Zoffix joined
Zoffix m: my int $max = 10_000_000; for ^$max { .abs }; say now - ENTER now 12:13
camelia 1.8581668
Zoffix m: my int $max = 10_000_000; for ^$max -> int $_ { .abs }; say now - ENTER now
camelia 1.766645192
Zoffix m: my int $max = 10_000_000; for ^$max { .abs; .abs; .abs; }; say now - ENTER now 12:14
camelia 4.26337106
Zoffix m: my int $max = 10_000_000; for ^$max -> int $_ { .abs; .abs; .abs; }; say now - ENTER now
camelia 4.95017282
Zoffix lizmat: ^ that optimization can be detrimental, if you're doing something with $_ that would require boxing.
For the first two evals locally I get 3.8717541 and 6.91530516
lizmat true, but how often do you do something other than indexing with $_ in a for ^1000 { } (or anything with $_ at all? ) 12:16
Zoffix lizmat: how often? :)
lizmat well, lemme put it this way: most often when I have code something like for ^1000 { }, it was for doing something 1000 times 12:17
Zoffix You're also changing semantics:
m: multi foo (int) { die "cannot use native stuff" }; multi foo (Int) {}; my int $max = 10_000_000; for ^$max { foo $_ }
camelia ( no output )
lizmat and when not, $_ would be an index I used
12:17 robertle joined
Zoffix m: multi foo (int) { die "cannot use native stuff" }; multi foo (Int) {}; my int $max = 10_000_000; for ^$max -> int $_ { foo $_ } 12:17
camelia cannot use native stuff
in sub foo at <tmp> line 1
in block <unit> at <tmp> line 1
lizmat so you're saying I shouldn't do this and advise people to do an explicit -> $_ if they want that optimization to work ? 12:18
-> int $_
rather
[Tux] Rakudo version 2018.06-281-g7043559bb - MoarVM version 2018.06-329-g21ea40f68
csv-ip5xs1.054 - 1.250
csv-ip5xs-207.822 - 8.069
csv-parser24.788 - 25.001
csv-test-xs-200.475 - 0.486
test10.056 - 10.271
test-t2.320 - 2.343
test-t --race0.971 - 0.981
test-t-2041.572 - 42.081
test-t-20 --race13.297 - 14.804
12:20
lizmat m: my int $max = 10_000_000; for ^$max -> int $i { }; say now - INIT now # another interesting data point 12:22
camelia 1.255137
Zoffix lizmat: We'd have to document this as "for ^1000 block defaults to $_ is raw signature, but implementations are free to change it to an `int $_` instead, for optimization purposes, which means you'll get different multies called"
lizmat m: my int $max = 10_000_000; for ^$max -> int $_ { }; say now - INIT now # the name seems to matter
camelia 0.1381269
Zoffix lizmat: and looking at ecosystem grep, I'd eyeball the more common case would be calling methods with $_ not indexing 12:23
lizmat on loops with for ^100 ?
Zoffix "&hide(3, 15 + $_) for ^5;"
gist.github.com/Whateverable/bffe3...32e527bc3f
"for ^5 {$bc.send($_)};" 12:24
But my bigger issue is the change in which multi gets called and having this extra magic behaviour in signatures of blocks
lizmat ok, I'll turn this into an issue then, maybe for 6.d :-) 12:25
Zoffix *6.e
:)
lizmat what strikes me atm, is the change in performance between int $_ and int $i
well, I'm glad I got the opt going for ^$max as well, so that means I can get rid of a lot of nqp::while loops in the core 12:26
Zoffix lizmat: that's because the `$i` version still has $_ in it as well, doesn't it?
Var (lexical $_ :decl(var)) 12:27
Op (bind)
Var (lexical $_) <wanted>
Op (getlexouter) <wanted>
SVal ($_)
lizmat m: dd (-> int $i { }).signature 12:28
camelia :(int $i)
lizmat m: dd (-> int $_ { }).signature
camelia :(int $_)
Zoffix But the $_ is still there in $i case, which is bound to outer $_, whereas in the $_ case, it's just bound to the param
lizmat m: (-> int $_ { dd MY::.keys })(42) 12:29
camelia ("\$_", "\$*DISPATCHER").Seq
lizmat m: (-> int $i { dd MY::.keys })(42)
camelia ("\$*DISPATCHER", "\$i", "\$_").Seq
lizmat ah., indeed
timotimo Ulti: at least the 0.123 thing is "easily" solved in the core setting. 12:30
12:35 brrt left 12:36 diakopter joined 12:43 Zoffix left 13:05 Zoffix joined
Zoffix "<Zoffix> *6.e" FWIW, I meant that our generic "some later language version" designator is now 6.e, not that 6.d is on lock down for any new features or anything. 13:07
13:07 Zoffix left
Geth rakudo: d69fd2f370 | (Elizabeth Mattijsen)++ | src/Perl6/Optimizer.nqp
Better document the for ^100 loop optimization

Basically, use <foo> instead of ('foo'), reduce indentation to 2 instead of 4, and add the nqp equivalent of the code being codegenned.
13:08
13:37 brrt joined
Geth rakudo: 9b07e7bf3d | (Elizabeth Mattijsen)++ | src/Perl6/Optimizer.nqp
Make the for ^100 loop optimization about 2% faster

By moving the update of the index to the condition and using a 2 parameter nqp::while instead of the 3 parameter one.
14:03
14:13 skids joined
Geth rakudo: 3d9ea6ebf7 | (Elizabeth Mattijsen)++ | 6 files
Add QuantHash.Setty|Baggy|Mixy coercer methods

These are basically frontends for coercing to the given object, but with maintaining the mutability of the object. So:
   say (1,2,3).Set.Baggy; # Bag(1, 2, 3)
   say (1,2,3).SetHash.Baggy; # BagHash(1, 2, 3)
14:47
14:59 brrt left 15:03 fake_space_whale joined
Geth rakudo: 5c429e4ead | (Zoffix Znet)++ | 2 files
Make Rationals fully-immutable

Fixes RT#130774: rt.perl.org/Ticket/Display.html?id=130774
This commit changes the performance landscape of rationals.
As described in the Work Proposal[^1], the optimization was removed ... (6 more lines)
15:28
synopsebot RT#130774 [resolved]: rt.perl.org/Ticket/Display.html?id=130774 [BUG] Rational.REDUCE-ME has a data race
rakudo: 3d10a7f1e7 | (Zoffix Znet)++ | src/core/Rat.pm6
[CaR Grant] Make Rational reduction 43% faster
15:33 Kaiepi left, Kaiepi joined
Geth rakudo: 097826ef7b | (Zoffix Znet)++ | src/core/Rational.pm6
[CaR Grant] Make argless Rational.round 4.7x faster

It's used by Rational.Str and Rational.base, so should give some gravity boost to those as well.
15:37
rakudo: db66a13848 | (Zoffix Znet)++ | src/core/Rational.pm6
[CaR Grant] Optimize/fix Rational.new

  - Makes creation of Rationals 19% faster
  - Fixes loss of proper typing of numerator/denominator with the
   types the role was parametarized with
roast: 9adbc0694d | (Zoffix Znet)++ | MISC/bug-coverage-stress-6.d.t
Cover data race in Rational

Closes RT#130774: rt.perl.org/Ticket/Display.html?id=130774 Rakudo fix: github.com/rakudo/rakudo/commit/6dd20588b6dfb75
15:39
rakudo: 38de1e512e | (Zoffix Znet)++ | t/spectest.data
Add MISC/bug-coverage-stress-6.d.t to list of test files
synopsebot RT#130774 [resolved]: rt.perl.org/Ticket/Display.html?id=130774 [BUG] Rational.REDUCE-ME has a data race
roast: d36e39833b | (Zoffix Znet)++ | S32-num/rat.t
[CaR Grant] Spec Rational keeps nu/de in proper types
15:41
15:59 brrt joined 16:05 Ven`` joined 16:17 fake_space_whale left 16:24 robertle left 16:48 bisectable6 left 16:49 bisectable6 joined, ChanServ sets mode: +v bisectable6 17:15 robertle joined 17:38 Ven`` left
Geth rakudo: d1729da26a | (Zoffix Znet)++ | src/core/Rat.pm6
Make infix:<**>(Rational, Int) more than 10x as fast

Makes `<50000123/50000000> ** 50_000` run 10.26x as fast Makes `for ^2000 { my $ = (42 / $_) ** $_ }` run 16.72x as fast Closes github.com/rakudo/rakudo/issues/1955 R#1955
Rationals are now[^1] guaranteed to be always in reduced form, ... (5 more lines)
17:39
synopsebot R#1955 [open]: github.com/rakudo/rakudo/issues/1955 [perf] Investigate whether $rat**$huge-power can be optimized with math smarts
17:47 brrt left
timotimo nice 17:56
Geth rakudo: f9963bbfad | (Zoffix Znet)++ | src/core/Rat.pm6
Fix incorrect underflow detection in infix:<**>

Introed in previous commit[^1]. Since we negate the power, we'd get an Inf on too large power, not 0e0.
  [1] github.com/rakudo/rakudo/commit/d1...075d38d55f
17:59
roast: 89cdc62dbd | (Zoffix Znet)++ | APPENDICES/A01-limits/overflow.t
Cover rat-to-large-power failurage in SAP

Rakudo fix:
  github.com/rakudo/rakudo/commit/d1...075d38d55f
  github.com/rakudo/rakudo/commit/f9...24338faaf4
18:19
18:48 travis-ci joined
travis-ci Rakudo build passed. Zoffix Znet 'Make infix:<**>(Rational, Int) more than 10x as fast 18:48
travis-ci.org/rakudo/rakudo/builds/410442784 github.com/rakudo/rakudo/compare/3...729da26a8a
18:48 travis-ci left
Geth rakudo: 712d0f0fbd | (Elizabeth Mattijsen)++ | 2 files
Fix problem in QuantHash.ACCEPTS

If the invocant or the candidate where a xxxHash type with initially some elements, but then all elements removed, would not accept a newly created xxxHash object.
18:56
18:58 ufobat___ left 19:17 dogbert17 joined
dogbert17 ZOFFLOP: t/spec/S17-supply/syntax.t 19:18
Geth rakudo: 76e5f9c809 | (Elizabeth Mattijsen)++ | 7 files
Properly add QuantHash.Setty|Baggy|Mixy coercers

Also cover the :U cases, so Set.Baggy will return a Bag type object and SetHash.Baggy will return a BagHash type object. And also take care of the identity cases: Set.Setty -> Set, SetHash.Setty -> SetHash.
These facilitate some refactoring on the set operators.
19:32
rakudo: 3a6c119713 | (Elizabeth Mattijsen)++ | src/core/set_addition.pm6
Slightly change semantics of (+) on QuantHashes

If the left-hand side of the (+) (also known as ⊎) is mutable, then the resulting QuantHash object will also be mutable. If it is immutable, it will stay immutable as before.
This should allow us to better optimize things like: ... (9 more lines)
20:05
roast: 53a4002c84 | (Elizabeth Mattijsen)++ | S03-operators/set_addition.t
Adapt to slightly changed (+) semantics

As described in github.com/rakudo/rakudo/commit/3a6c119713
20:06
roast: fb86d0aab1 | (Elizabeth Mattijsen)++ | S03-operators/set_addition.t
Disable debuggiong helpers
20:07
20:09 pmurias joined 20:24 travis-ci joined
travis-ci Rakudo build errored. Elizabeth Mattijsen 'Fix problem in QuantHash.ACCEPTS 20:24
travis-ci.org/rakudo/rakudo/builds/410473621 github.com/rakudo/rakudo/compare/f...2d0f0fbd85
20:24 travis-ci left
buggable [travis build above] ☠ Did not recognize some failures. Check results manually. 20:24
lizmat apt-get failed, so false alarm 20:25
20:29 Ven`` joined 20:52 Ven`` left, pmurias left 20:53 pmurias joined 20:58 Ven`` joined 21:15 skids left 21:16 robertle left 21:32 Ven` joined 21:35 Ven`` left
Geth rakudo: b826a07a7e | (Elizabeth Mattijsen)++ | 2 files
Slightly change semantics of (-) on QuantHashes

If the left-hand side of the (-) (also known as ∖) is mutable, then the resulting QuantHash object will also be mutable. If it is immutable, it will stay immutable as before.
This should allow us to better optimize things like: ... (9 more lines)
21:54
roast: e234049a00 | (Elizabeth Mattijsen)++ | S03-operators/set_difference.t
Adapt to slightly changed (-) semantics

As described in github.com/rakudo/rakudo/commit/b826a07a7e
21:55
lizmat more tomorrow& 21:58
22:08 pmurias left 22:20 gfldex left 23:02 Ven` left 23:34 gfldex joined