Perl 6 language and compiler development 2.0 | Logs at irclog.perlgeek.de/perl6-dev/today | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
Set by moderator on 11 May 2018.
Geth nqp: ugexe++ created pull request #442:
[jvm] Add getppid op and upgrade to jdk9
00:12
¦ rakudo: zoffixznet self-assigned Stringified Rat has traling zeros github.com/rakudo/rakudo/issues/1818 00:59
nqp: e36422b6da | (Nick Logan)++ (committed using GitHub Web editor) | docs/ops.markdown
Update listed [spawn|kill]procasync op backends
01:13
nqp: 7433cbed28 | (Nick Logan)++ (committed using GitHub Web editor) | docs/ops.markdown
Fix opcode header
01:17
01:56 ilbot3 joined
moderator Perl 6 language and compiler development 2.0 | Logs at irclog.perlgeek.de/perl6-dev/today | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
Geth roast: 6471fbd68e | (Zoffix Znet)++ | S32-num/midrat.t
[CaR Grant] Test MidRat creation
02:30
roast: c6569ac2ce | (Zoffix Znet)++ | S32-num/midrat.t
Revert "[CaR Grant] Test MidRat creation"

This reverts commit 6471fbd68e8dc8c33c100c366176b37869a994c6.
Committed to the wrong branch
roast/car-grant-midrat: 52c50b9e51 | (Zoffix Znet)++ | S32-num/midrat.t
[CaR Grant] Test MidRat creation
02:31
rakudo/car-grant-midrat: 6d21582ac3 | (Zoffix Znet)++ | t/spectest.data
[CaR Grant] Add S32-num/midrat.t to list of test files to run
02:32
02:34 Kaiepi joined 02:35 ufobat___ joined
Geth roast/car-grant-midrat: e5292c9f00 | (Zoffix Znet)++ | S32-num/midrat.t
[CaR Grant] Test MidRat typing/coercion
02:56
roast/improve-curi-test: 04faee2368 | (Nick Logan)++ (committed using GitHub Web editor) | S11-repository/curli-install.t
Simplify filename declaration
03:27
6.d-prep: a04dc82ff1 | (Zoffix Znet)++ (committed using GitHub Web editor) | TODO/FEATURES.md
List Rational.norm up for deprecation
6.d-prep: fd6a7fe6ea | (Zoffix Znet)++ (committed using GitHub Web editor) | TODO/FEATURES.md
Use more precise wording for Str.subst-mutate work
03:28
roast: b82233a697 | (Nick Logan)++ (committed using GitHub Web editor) | S11-repository/curli-install.t
Test installation with proper Distribution usage

The intent of this test is installing a Distribution, and the fact it used a class called Distribution to do it should be irrelevant. This instead installs something that *does* Distribution.
Changed s/$path/$repo-path/ for clarity since $path is used as a variable name elsewhere.
03:29
roast/car-grant-midrat: 7263105372 | (Zoffix Znet)++ | S32-num/base.t
[CaR Grant] Spec Rational.base-repeating with no args
03:35
rakudo: ugexe++ created pull request #1820:
Remove Distribution and CURI.install compat shims
04:03
roast/car-grant-midrat: 8c904f549a | (Zoffix Znet)++ | S32-num/midrat.t
[CaR Grant] spec zero-denominator MidRats
04:12
07:40 robertle joined
bartolin_ nine: ah, thanks. if i understand correctly, the "working cases" are those, where we don't hit this else clause? github.com/rakudo/rakudo/blob/febc....nqp#L1505 07:56
nine bartolin_: yep, looks about right 08:45
This "avoid calling STORE with lots of arguments" thing is becoming more and more involved. Not terribly hard, but there's a surprising number of details one has to get right. 09:07
E.g. we're creating an Array there, so all values have to go through ArrayReificationTarget so they get Scalar containers. That's probably the other reason why yesterday's attempt caused issues. 09:08
Progress! Now there's typed arrays to consider 10:14
Getting closer and closer now. Had to move more stuff to runtime again to cope with initializations in loops. Otherwise, the list would have grown every time. 11:07
spectest looks better and better :) 11:09
bartolin_ nine++ :-) 11:17
nine The remaining spec test failures are odd though. They are all about exceptions and code that doesn't even use any array literals 12:17
perl6 -e 'class Foo { method bar() { self!wrong() } }.new.bar' 12:21
No such private method '!!wrong' for invocant of type 'Foo'
How something like this could be caused by an array literal optimization is beyond me 12:22
m: class Foo { method bar() { self!wrong() } }.new.bar 12:23
camelia 5===SORRY!5=== Error while compiling <tmp>
No such private method '!wrong' for invocant of type 'Foo'
at <tmp>:1
------> 3class Foo { method bar() { self!wrong(7⏏5) } }.new.bar
nine Even more confusing: it also happens with --optimize=0
Ok, the latter is because --optimize=0 does not in fact turn off the optimizer. It just turns off certain optimizations 12:25
jnthn I think --optimize=off fully disables that stage 12:26
with --optimize=0 it should (in theory) just not do any transformations
nine Also it's very probable because of optimizations in the SETTING, not in the -e code 12:27
MasterDuke huh, --optimize=off is not documented
ahh, github.com/rakudo/rakudo/blob/mast...er.nqp#L47 12:31
should that be added to the --help output? it currently say `--optimize=level use the given level of optimization (0..3)` 12:32
nine has been confused by 0/off plenty of times and usually tries both 12:34
12:46 AlexDaniel joined
nine It gets worse! That double bang in "No such private method '!!wrong'" looks actually correct! 12:46
method dispatch:<!> in Mu creates the X::Method::NotFound with method => '!' ~ name, so that's where the first ! comes from. Then the message gets created as "No such private method '!$.method'" 12:47
So, 1. why does this not fail on the unmodified master and 2. why does my optimization change this?? 12:48
timotimo is there perhaps an array where we look at $!reified but all data is in $!todo instead?
you know, for finding the method in question? 12:49
nine ^find_private_method looks in a hash. And is NQP code anyway, which the Perl6::Optimizer shouldn't touch 12:50
Also in this case, it should fail, because that private method really does not exist. But somehow on master we end up with "No such private method '!wrong'" 12:51
The answer is probably that on master we don't actually hit Mu's dispatch:<!>. The error gets thrown by the optimizer instead. 12:53
timotimo ah 12:54
that'd explain it, yeah
nine Oh, of course! I have to move the whole check into the elsif chain in optimize(). Otherwise I block the following optimizations. But at least it uncovered that error in Mu. That just can't be right. 12:56
timotimo yeah 12:57
m: role Test { method !wronk() { } }; class Toast { method bloop() { self!wrong } }; Toast.new.bloop
camelia 5===SORRY!5=== Error while compiling <tmp>
No such private method '!wrong' for invocant of type 'Toast'
at <tmp>:1
------> 3 }; class Toast { method bloop() { self!7⏏5wrong } }; Toast.new.bloop
timotimo m: role Test { method !wronk() { } }; class Toast does Test { method bloop() { self!wrong } }; Toast.new.bloop
camelia 5===SORRY!5=== Error while compiling <tmp>
No such private method '!wrong' for invocant of type 'Toast'. Did you mean '!wronk'?
at <tmp>:1
------> 3Toast does Test { method bloop() { self!7⏏5wrong } }; Toast.new.bloop
timotimo m: role Test { method !wronk() { } }; class Toast { method bloop() { self!wrong } }; (Toast.new but Test).bloop 12:58
camelia 5===SORRY!5=== Error while compiling <tmp>
No such private method '!wrong' for invocant of type 'Toast'
at <tmp>:1
------> 3 }; class Toast { method bloop() { self!7⏏5wrong } }; (Toast.new but Test).bloop
timotimo m: role Test { method !wronk() { } }; class Toast { method bloop() { self!wrong } }; (Toast.new).'!wrong'()
camelia 5===SORRY!5=== Error while compiling <tmp>
No such private method '!wrong' for invocant of type 'Toast'
at <tmp>:1
------> 3 }; class Toast { method bloop() { self!7⏏5wrong } }; (Toast.new).'!wrong'()
timotimo m: role Test { method !wronk() { } }; class Toast { }; (Toast.new).'!wrong'()
camelia No such method '!wrong' for invocant of type 'Toast'
in block <unit> at <tmp> line 1
timotimo that seems to be the run-time variant of the error?
nine Yes! make test succeeds 13:00
timotimo: but it doesn't recognize it as a private method. Otherwise it'd say "No such private method"
timotimo OK 13:03
maybe you can't just call private methods from the outside after all :)
at least not like that
nine All tests successful. 13:05
timotimo that includes spec tests? 13:06
nine yes
timotimo that's very cool 13:09
nine With a stable base I can now see if I can expand it to typed arrays 13:10
timotimo excuse my denseness, but what kind of code does this work on? 13:16
nine timotimo: github.com/perl6/roast/blob/14eaf9...bset.t#L30 13:17
timotimo ah, huge literal lists being assigned? 13:18
nine Yes
timotimo cool
AlexDaniel nine: do you know anything about this?
Use of uninitialized value in string eq at t/lib/TestPerl5Package.pm line 19.
# Failed test at t/perl5package.t line 14
nine AlexDaniel: yeah, that's probably caused by github.com/niner/Inline-Perl5/comm...0b7d58d10e 13:20
AlexDaniel: I just thought that these errors were caused by my modifications to rakudo, so I wanted to finish those first
AlexDaniel alright 13:21
I was trying to make a prerelease for testing but it failed on that
13:37 ilbot3 joined
moderator Perl 6 language and compiler development 2.0 | Logs at irclog.perlgeek.de/perl6-dev/today | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
MasterDuke nine: could your optimization also be done for large hash literals? 13:38
nine MasterDuke: I think so 13:41
same would be true for constant folding of e.g. my %h = a => 1, b => 2; 13:42
MasterDuke nice
13:44 tadzik joined 13:52 lucasb joined
nine Now how do I create an Array[$type] from NQP? 13:58
jnthn I think Array.HOW.parameterize(Array, $type) 13:59
nine yep 14:10
14:15 ilmari[m] joined, AlexDaniel` joined, CIAvash[m] joined 14:16 skids joined
nine Oh. If I extend that optimization to typed arrays, we defer the type check: my str $a = "a"; my int @a = 1, $a; will not explode anymore. But say @a later on will. 14:17
Makes one spec test fail which expects that explosion immediately 14:18
Begs the question: is this a NO GO? Or is there a way to salvage?
jnthn What, how on earth can that happen? 14:19
Oh...for `my nativetype @a` then it's `array`, not `Array`, that should be parameterized 14:20
nine Ooops...I'd have never thought of that :) 14:21
14:29 lucasb joined
nine I guess I should use array instead of Array if it's parameterized with a Perl6::Metamodel::NativeHOW? 14:30
14:30 BenGoldberg joined
jnthn nine: Yes 14:32
That'll get all of the num and str cases too
Geth rakudo: 776ff354c3 | (Stefan Seifert)++ | src/Perl6/Optimizer.nqp
Avoid calling STORE with huge number of arguments for array literals

When initializing array literals like my @a = 1, 2, 3; instead of calling STORE on the array with a potentially very long argument list, we create code that pushes those values into a low level array and bind that to the Array's reifier. This then can lazily set up scalar containers and expand slips.
14:57
nine bartolin_: does that ^^^ fix the arg count issue? 14:58
Of course, native arrays will need completely different (albeit simpler) code...
Though the only sensible code structure that comes to mind is @target.STORE(nqp::p6bindattrinvres(nqp::create(List), List, '$!reified', nqp::list(1, 2, 3, 4, 5))); 15:06
Unless I generate the look push_Xing manually instead of going through nqp::list. 15:07
Btw. I still haven't found out how to get at Perl6::Metamodel::NativeHOW in the optimizer. 15:08
bartolin_ nine: yes, the code works now \\o/ 15:13
MasterDuke nine: is it much faster? 15:15
bartolin_ oops, but running the whole test file dies with 'Unhandled exception; category = 1'. I'll re-check if I have some local changes that are to blame ... 15:18
indeed, it was some kind of local hickup. I did a fresh install and S03-operators/set_subset.t passes now. nine++ 15:47
nine MasterDuke: I see between 1.4x and 17x speedup 15:48
MasterDuke nine: awesome 16:11
16:23 dogbert11 joined
jnthn nine: You can look it up in the setting scope as Metamodel::NativeHOW 16:25
18:32 Ben_Goldberg joined 18:36 Kaiepi joined 18:56 Kaiepi joined 19:59 Ven`` joined 20:21 Ven`` joined
[Tux] Rakudo version 2018.04.1-70-gfebcb9177 - MoarVM version 2018.04.1-98-g1aa02fe45
csv-ip5xs0.868 - 0.870
csv-ip5xs-208.698 - 8.799
csv-parser36.302 - 36.746
csv-test-xs-200.447 - 0.448
test8.916 - 9.019
test-t2.335 - 2.352
test-t --race0.994 - 1.004
test-t-2042.363 - 43.347
test-t-20 --race14.579 - 15.112
20:43
20:46 vendethiel- joined 20:56 AlexDani` joined
Geth rakudo: thundergnat++ created pull request #1822:
Rewrote Rat / FatRat stringification to be much faster.
21:04
21:05 AlexDani` joined