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