|
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] |
|
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
|
|||||||||||||||||||||||||||||||||||||||