|
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 18 May 2018. |
|||||||||||||||||||||||||||||||||||||||
| AlexDaniel | ok Data::MessagePack::pack( { a => Any, b => [ 1.1 ], c => { aa => 3, bb => [] } } ) ~~ Blob.new(131,161,97,192,161,99,130,162,98,98,144,162,97,97,3,161,98,145,203,63,241,153,153,153,153,153,154), "hash packed correctly"; | 00:17 | |||||||||||||||||||||||||||||||||||||
| I don't even know how to fix that test | 00:18 | ||||||||||||||||||||||||||||||||||||||
| there's a ticket though: github.com/pierre-vigier/Perl6-Dat.../issues/13 | 00:20 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | how's everybody's QAST-foo? i keep getting `Too many positionals passed; expected 1 argument but got 3` when attempting to re-write `@a[$b, $c]` into `@a[$b],@a[$c]` | 00:26 | |||||||||||||||||||||||||||||||||||||
|
00:28
Zoffix joined
|
|||||||||||||||||||||||||||||||||||||||
| Zoffix | MasterDuke: QAST-foo is excellent. What's the QAST?> | 00:28 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | gist.github.com/MasterDuke17/3a0bf...ffea4caeff | 00:29 | |||||||||||||||||||||||||||||||||||||
| gist updated | 00:31 | ||||||||||||||||||||||||||||||||||||||
| Zoffix | MasterDuke: can you run p6 --target=optimize -e 'my @a = ^10; my $b = (^10).pick; my $c = (^10).pick; say @a[$b, $c]' | ||||||||||||||||||||||||||||||||||||||
| and pastebin the dump | |||||||||||||||||||||||||||||||||||||||
| MasterDuke | it gets into my new code and dies | 00:32 | |||||||||||||||||||||||||||||||||||||
| Zoffix | MasterDuke: you got QAST::OP.new but it's Op not OP | 00:33 | |||||||||||||||||||||||||||||||||||||
| in | |||||||||||||||||||||||||||||||||||||||
| $op.push: QAST::OP.new(:op('callstatic'), :name('&postcircumfix:<[ ]>'), $array_var, $var); | |||||||||||||||||||||||||||||||||||||||
| nqp: QAST::OP.new(:op('callstatic'), :name('&postcircumfix:<[ ]>'), 1, 2) | 00:34 | ||||||||||||||||||||||||||||||||||||||
| camelia | Too many positionals passed; expected 1 argument but got 3 at gen/moar/stage2/NQPCORE.setting:587 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/NQPCORE.setting.moarvm:new) from <tmp>:1 (<ephemeral file>:<mainline>) from gen/moar/stage2/NQPHLL.nqp:153… |
||||||||||||||||||||||||||||||||||||||
| Zoffix | nqp: QAST::Op.new(:op('callstatic'), :name('&postcircumfix:<[ ]>'), 1, 2) | ||||||||||||||||||||||||||||||||||||||
| camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | oh damn, nice catch | ||||||||||||||||||||||||||||||||||||||
| timotimo | perhaps you're getting an NQPMu there by misspelling it | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | Zoffix++ | ||||||||||||||||||||||||||||||||||||||
| man, i've been trying to figure out that error for over an hour now. who knows how much longer it would have taken... | 00:35 | ||||||||||||||||||||||||||||||||||||||
| Zoffix | :) | 00:37 | |||||||||||||||||||||||||||||||||||||
|
00:37
Zoffix left
|
|||||||||||||||||||||||||||||||||||||||
| MasterDuke | cool, looks like it's working now | 00:37 | |||||||||||||||||||||||||||||||||||||
| timotimo | m: my @foo = <a b c d e f>; my $a = |(1, 2); my $b = 3; say @foo[$a, $b].perl | 00:41 | |||||||||||||||||||||||||||||||||||||
| camelia | ("b", "c", "d") | ||||||||||||||||||||||||||||||||||||||
| timotimo | MasterDuke: can you make sure this works with your optimization? | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | right now it outputs `("c", "d")` | 00:42 | |||||||||||||||||||||||||||||||||||||
| timotimo | oh | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | but that was something i wanted intput on | 00:43 | |||||||||||||||||||||||||||||||||||||
| timotimo | m: my @foo = <a b c d e f g h i>; my $a = |(4, 5); my $b = 6; say @foo[$a, $b].perl | ||||||||||||||||||||||||||||||||||||||
| camelia | ("e", "f", "g") | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | when exactly can this optimization be applied? | ||||||||||||||||||||||||||||||||||||||
| i.e., what conditions need to be met? | |||||||||||||||||||||||||||||||||||||||
| timotimo | hmm. if every variable in your list is typed as something that can't be Slippy, perhaps? | 00:44 | |||||||||||||||||||||||||||||||||||||
| if they are native typed ints, definitely go for it | 00:46 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | check when i looping through them all, and if any could be Slippy then just return the original $op? | ||||||||||||||||||||||||||||||||||||||
| timotimo | that sounds like a sane first approximation | 00:47 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | hm, how do i do that in nqp... | 00:48 | |||||||||||||||||||||||||||||||||||||
| timotimo | well, for natives you can check if the .returns has a primspec that's nonzero, there must be some place to cargo-cult this from | ||||||||||||||||||||||||||||||||||||||
| other than that i'm not sure what holds the type info of a variable | 00:49 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | afk for a bit, but i'll play around some more later | 00:50 | |||||||||||||||||||||||||||||||||||||
|
00:51
shareable6 joined
|
|||||||||||||||||||||||||||||||||||||||
| timotimo | i'll be afk for longer soon | 00:52 | |||||||||||||||||||||||||||||||||||||
| seeya, and good luck! | |||||||||||||||||||||||||||||||||||||||
| AlexDaniel keeps getting distracted | 01:31 | ||||||||||||||||||||||||||||||||||||||
| so many cool things happening, heh. Riot now supports stickers, lol | |||||||||||||||||||||||||||||||||||||||
| anyway, I still see some failing modules | 01:32 | ||||||||||||||||||||||||||||||||||||||
| investigating | |||||||||||||||||||||||||||||||||||||||
| I mean, everyone can see them: toast.6lang.org/ | |||||||||||||||||||||||||||||||||||||||
| there's something very weird going on with Spit | 01:33 | ||||||||||||||||||||||||||||||||||||||
|
01:57
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 | ||||||||||||||||||||||||||||||||||||||
|
03:22
greppable6 joined,
reportable6 joined,
notable6 joined,
quotable6 joined,
committable6 joined,
coverable6 joined,
evalable6 joined,
bloatable6 joined
03:23
bisectable6 joined,
releasable6 joined,
nativecallable6 joined,
unicodable6 joined,
benchable6 joined,
statisfiable6 joined,
squashable6 joined,
undersightable6 joined,
shareable6 joined
03:40
stmuk joined
03:58
entonian joined
|
|||||||||||||||||||||||||||||||||||||||
| AlexDaniel | maybe someone knows what's wrong with #1843 ? | 04:52 | |||||||||||||||||||||||||||||||||||||
| G#1843 | |||||||||||||||||||||||||||||||||||||||
| R#1843 | |||||||||||||||||||||||||||||||||||||||
| synopsebot | R#1843 [open]: github.com/rakudo/rakudo/issues/1843 [regression][⚠ blocker ⚠] Regression related to splice and something else (Spit module) | ||||||||||||||||||||||||||||||||||||||
| Geth | roast/cur-candidates: 92a63ad948 | (Nick Logan)++ (committed using GitHub Web editor) | S11-repository/cur-candidates.t Manually declare json for distribution tests |
04:57 | |||||||||||||||||||||||||||||||||||||
| roast/cur-candidates: d2ac49334b | (Nick Logan)++ (committed using GitHub Web editor) | S11-repository/cur-candidates.t Fix typo |
05:07 | ||||||||||||||||||||||||||||||||||||||
|
05:11
robertle joined
05:37
ufobat_ joined
|
|||||||||||||||||||||||||||||||||||||||
| AlexDaniel | if anyone is interested: gist.github.com/AlexDaniel/375b90f...68f8048b5a | 05:40 | |||||||||||||||||||||||||||||||||||||
| that's for the last run: toast.6lang.org/ | |||||||||||||||||||||||||||||||||||||||
| releasable6: status | 05:42 | ||||||||||||||||||||||||||||||||||||||
| releasable6 | AlexDaniel, No! It wasn't me! It was the one-armed man! Backtrace: gist.github.com/0802bc2dd50dfda18f...d35ec78977 | ||||||||||||||||||||||||||||||||||||||
| Geth | rakudo: 450663bc45 | (Aleks-Daniel Jakimenko-Aleksejev)++ | docs/ChangeLog Temporarily remove 2018.05 section Right now it makes releasable unhappy. |
05:44 | |||||||||||||||||||||||||||||||||||||
| AlexDaniel | releasable6: status | ||||||||||||||||||||||||||||||||||||||
| releasable6 | AlexDaniel, No! It wasn't me! It was the one-armed man! Backtrace: gist.github.com/34a1334b0951562e11...62269e9e4d | ||||||||||||||||||||||||||||||||||||||
|
05:52
robertle joined
|
|||||||||||||||||||||||||||||||||||||||
| AlexDaniel | releasable6: status | 06:00 | |||||||||||||||||||||||||||||||||||||
| releasable6 | AlexDaniel, Next release in ≈12 hours. 2 blockers. 88 out of 106 commits logged | ||||||||||||||||||||||||||||||||||||||
| AlexDaniel, Details: gist.github.com/f8d6089d155f3037f4...8185361aa6 | |||||||||||||||||||||||||||||||||||||||
|
06:12
shareable6 joined
|
|||||||||||||||||||||||||||||||||||||||
| Geth | rakudo: 4cacbf6685 | (Nick Logan)++ (committed using GitHub Web editor) | src/core/Distribution.pm6 Fix distribution path format on windows |
06:13 | |||||||||||||||||||||||||||||||||||||
| rakudo/cur-candidates: e1ef571eee | (Nick Logan)++ (committed using GitHub Web editor) | src/core/CompUnit/Repository/FileSystem.pm6 Fix distribution path format on windows |
06:29 | ||||||||||||||||||||||||||||||||||||||
| nqp: e4bb7fbd00 | usev6++ | src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance.java [JVM] Store value at right position The old code looked at the local variable start instead of the member variable (this.start). Fixes R#1838. Probably it makes sense to use a different name for the local variable, but that's for a different commit. |
06:32 | ||||||||||||||||||||||||||||||||||||||
| synopsebot | R#1838 [open]: github.com/rakudo/rakudo/issues/1838 [JVM] [JVM] Wrong results for Supply.from-list.rotor after recent optimization for @a.splice | ||||||||||||||||||||||||||||||||||||||
| rakudo/cur-candidates: 43 commits pushed by 12 authors review: github.com/rakudo/rakudo/compare/e...74b666ac55 |
06:33 | ||||||||||||||||||||||||||||||||||||||
|
09:28
FROGGS joined
09:47
shareable6 joined
|
|||||||||||||||||||||||||||||||||||||||
| [Tux] |
|
09:56 | |||||||||||||||||||||||||||||||||||||
|
10:18
ufobat_ joined
|
|||||||||||||||||||||||||||||||||||||||
| lizmat | hmmm... test-t race above 1 as well :-( | 10:26 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | did the reverted splice optimization help? looks like it could be re-reverted after github.com/perl6/nqp/commit/e4bb7fbd00, right? | 10:34 | |||||||||||||||||||||||||||||||||||||
| lizmat | MasterDuke: testing nonw | 10:42 | |||||||||||||||||||||||||||||||||||||
| hmmm... looks like we lost Geth | 10:43 | ||||||||||||||||||||||||||||||||||||||
| lizmat just pushed github.com/rakudo/rakudo/commit/8b...88a1e9a702 | 10:44 | ||||||||||||||||||||||||||||||||||||||
|
10:44
ExtraCrispy joined
10:45
ExtraCrispy joined
|
|||||||||||||||||||||||||||||||||||||||
| lizmat just pushed github.com/rakudo/rakudo/commit/fb...cfb3bca6b8 | 10:53 | ||||||||||||||||||||||||||||||||||||||
| moritz Zoffix AlexDaniel someone give Geth a nudge ? | 11:01 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | do any of the phasers get run before optimization? | ||||||||||||||||||||||||||||||||||||||
| lizmat | MasterDuke: you mean the static optimizer ? | 11:02 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | yeah | ||||||||||||||||||||||||||||||||||||||
| lizmat | if so, BEGIN is the only one afaik | ||||||||||||||||||||||||||||||||||||||
| that runs immediately at compilation | |||||||||||||||||||||||||||||||||||||||
| MasterDuke | thanks | ||||||||||||||||||||||||||||||||||||||
| lizmat | afk for a few hours& | 11:04 | |||||||||||||||||||||||||||||||||||||
| nine | MasterDuke: but BEGIN blocks are optimized before they are run: my $precomp := $comp.compile($compunit, :from<optimize>, :compunit_ok(1), :lineposcache($*LINEPOSCACHE)); my $mainline := $comp.backend.compunit_mainline($precomp); $mainline(); | 11:23 | |||||||||||||||||||||||||||||||||||||
| yoleaux | 16 May 2018 20:01Z <Zoffix> nine: nevermind, my fix didn't even compile. I unassigned from the Issue and left some of my findings on it: github.com/rakudo/rakudo/issues/18...-389647098 | ||||||||||||||||||||||||||||||||||||||
| 18 May 2018 18:43Z <MasterDuke> nine: a question you can probably answer irclog.perlgeek.de/perl6-dev/2018-...i_16180792 | |||||||||||||||||||||||||||||||||||||||
| nine | MasterDuke: @a[$b, $c] yes, but not @a[@b] | 11:24 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | nine: i've been playing around with @a[$b, $c]. got it working, just need to correctly restrict it to appropriate cases | 11:27 | |||||||||||||||||||||||||||||||||||||
|
11:35
shareable6 joined
|
|||||||||||||||||||||||||||||||||||||||
| MasterDuke | hm, but how can i know at optimize time that something could be Slippy? | 12:05 | |||||||||||||||||||||||||||||||||||||
| nine | In the static optimizer in general you can't, unless it's a known compile time value (aka constant) | 12:09 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | yeah, so i guess it's only safe to do this for literals and constants in the static optimizer | 12:12 | |||||||||||||||||||||||||||||||||||||
| timotimo | nine: you can't put (or even bind) something into a typed variable, though | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | wait, why does that transformation break for Slippy things? the Slip should still expand in its own [], right? | 12:14 | |||||||||||||||||||||||||||||||||||||
| timotimo | it will, but you'll get a list back that you're not flattening properly, potentially | 12:16 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | m: my @foo = <a b c d e f g h i>; my $a = |(4, 5); my $b = 6; say @foo[$a, $b].perl | ||||||||||||||||||||||||||||||||||||||
| camelia | ("e", "f", "g") | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | m: my @foo = <a b c d e f g h i>; my $a = |(4, 5); my $b = 6; say (@foo[$a], @foo[$b]).perl | ||||||||||||||||||||||||||||||||||||||
| camelia | ("c", "g") | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | i guess it just numifies it | 12:17 | |||||||||||||||||||||||||||||||||||||
| m: my @foo = <a b c d e f g h i>; my $a = |(4, 5, 6); my $b = 6; say (@foo[$a], @foo[$b]).perl | |||||||||||||||||||||||||||||||||||||||
| camelia | ("d", "g") | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | literals do already get some transformation done. the --target=optimize ast for @a[$b, $c] is not the same as for @a[1, 3] | 12:20 | |||||||||||||||||||||||||||||||||||||
| nine just pushed github.com/rakudo/rakudo/commit/84...94dd6de006 | 12:26 | ||||||||||||||||||||||||||||||||||||||
| Speed up module loading by avoiding IO::relative | 12:27 | ||||||||||||||||||||||||||||||||||||||
| We fully construct the path that we then relativize. So instead of the rather expensive .relative, we construct the path with just the relevant bits. | |||||||||||||||||||||||||||||||||||||||
| Saves about 10ms for a "use Inline::Perl5" | |||||||||||||||||||||||||||||||||||||||
| jnthn | Nice going :) | ||||||||||||||||||||||||||||||||||||||
| nine++ | |||||||||||||||||||||||||||||||||||||||
| nine | It's funny how such big wins are still to be had when I've already gone over this code 3 times | 12:28 | |||||||||||||||||||||||||||||||||||||
| timotimo | nine: what's 10ms in percentage? | 12:52 | |||||||||||||||||||||||||||||||||||||
| nine | time perl6 -e 'use Inline::Perl5' went from 0.150s to 0.140s | 12:53 | |||||||||||||||||||||||||||||||||||||
| timotimo | that's not too bad. how much is perl6 -e '' on that machine? | 12:54 | |||||||||||||||||||||||||||||||||||||
| nine | time perl6 -e '' is 0.095s. | ||||||||||||||||||||||||||||||||||||||
| :) | |||||||||||||||||||||||||||||||||||||||
| timotimo | cool | ||||||||||||||||||||||||||||||||||||||
| nine | So it's now about 45ms to load the 12 modules that make up Inline::Perl5. We may compile at glacial pace, but with precompilation we leave Perl 5 in the dust when loading large applications | 12:56 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | very cool. did anyone else see that post about python start up time? mail.python.org/pipermail/python-d...53296.html and HN discussion here news.ycombinator.com/item?id=16978932 | 12:57 | |||||||||||||||||||||||||||||||||||||
|
12:57
shareable6 joined
|
|||||||||||||||||||||||||||||||||||||||
| nine | Well, we already do a lot of things right that Python has yet to learn. Yet we still take 4.5x the time of python3 to start up and 10x as long as python2. | 13:06 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | p6 --stagestats -e '' shows 0.109 for parse, the next highest is mast at 0.005 | 13:08 | |||||||||||||||||||||||||||||||||||||
| isn't jnthn planning on some parsing optimizations soon? | 13:09 | ||||||||||||||||||||||||||||||||||||||
| jnthn | Yeah, already did one that knocked 13% off the time we spend evaluating NFAs, though that only gave 1% in the overall compile time | ||||||||||||||||||||||||||||||||||||||
| timotimo | i assume we don't do much NFA eval to parse the empty program ;) | 13:11 | |||||||||||||||||||||||||||||||||||||
| jnthn | No, but that's because loading CORE.setting is counted into stage parse | 13:13 | |||||||||||||||||||||||||||||||||||||
| timotimo | right | 13:14 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | a perf record of -e '' shows MVM_serialization_read_int second in the list (first is _int_malloc from libc) | 13:15 | |||||||||||||||||||||||||||||||||||||
| timotimo | we should turn NFAs into only one instead of one + however many pieces it has objects to deserialize :) | 13:16 | |||||||||||||||||||||||||||||||||||||
| jnthn | I think we're still storing NFAs in duplicate | 13:18 | |||||||||||||||||||||||||||||||||||||
| timotimo | yup | ||||||||||||||||||||||||||||||||||||||
| there isn't really a lifecycle point where loading the arrays from the nfa is pleasant, nor is there one where destroying the lists feels right | |||||||||||||||||||||||||||||||||||||||
| getting the lists before every operation that does stuff and destroying it after every optimize will penalize adding many operators in user code even more than it already is | 13:19 | ||||||||||||||||||||||||||||||||||||||
| which is a lot | |||||||||||||||||||||||||||||||||||||||
| jnthn | Well, until we implement tracking which NFAs need recalculation, at least | 13:20 | |||||||||||||||||||||||||||||||||||||
| timotimo | i mean, we have the <deserialize> frame that could handle this for us, but then we're just loading the nfa from the serialized blob, rather than immediately loading both from the serialized blob | 13:21 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | the ast for @a[1, 3] has a QAST::WVal(List) instead of QAST::Op(callstatic &infix:<,>), anyone know where that happens? | 13:26 | |||||||||||||||||||||||||||||||||||||
| timotimo | oh, is &infix:<,> marked "is pure"? | ||||||||||||||||||||||||||||||||||||||
|
13:44
Zoffix joined
13:45
Geth joined
|
|||||||||||||||||||||||||||||||||||||||
| Geth | rakudo: 8bde96d2dd | (Elizabeth Mattijsen)++ | tools/build/NQP_REVISION Bump NQP to get the JVM nqp::slice fixes Jeremy Studer++, bartolin++ |
13:45 | |||||||||||||||||||||||||||||||||||||
| rakudo: version bump brought these changes: github.com/perl6/nqp/compare/2018....4-ge4bb7fb fb0654cfb3 | (Elizabeth Mattijsen)++ | src/core/Array.pm6 This reverts commit 3642a879d9988c81cd0686c0cb18213f8ebb8dd7. Now that the problem on the JVM backend is fixed, it feels safe to reinstate this optimization. |
|||||||||||||||||||||||||||||||||||||||
| rakudo: 849ba56d24 | (Stefan Seifert)++ | src/core/CompUnit/Repository/Installation.pm6 Speed up module loading by avoiding IO::relative We fully construct the path that we then relativize. So instead of the rather expensive .relative, we construct the path with just the relevant bits. Saves about 10ms for a "use Inline::Perl5" |
13:47 | ||||||||||||||||||||||||||||||||||||||
| Zoffix | Isn't release like today? Would've thought any speedup commits would go into post release branch. | 13:49 | |||||||||||||||||||||||||||||||||||||
| Especially since the new way doesn't stringify IO::Path the right and proper way. I dunno where $.prefix comes from, but IO::Path.Str doesn't use CWD when stringifying. Is that safe for that code? | 13:52 | ||||||||||||||||||||||||||||||||||||||
| .tell lizmat if you give me your public key, I can set you up a sudoers account on hack. Then you'd be able to nudge geth yourself (sudo service geth restart) | 14:00 | ||||||||||||||||||||||||||||||||||||||
| yoleaux | Zoffix: I'll pass your message to lizmat. | ||||||||||||||||||||||||||||||||||||||
| Zoffix | nm, the IO::Path commit looks safe | 14:02 | |||||||||||||||||||||||||||||||||||||
| nine | Zoffix: it should end up as "sources/foo" and must not use CWD | 14:05 | |||||||||||||||||||||||||||||||||||||
| Zoffix: but point taken about speedups | |||||||||||||||||||||||||||||||||||||||
| Zoffix | nine: yeah, I see now that $.prefix isn't even used in the new version | ||||||||||||||||||||||||||||||||||||||
| k, geth restarted and all the missed webhooks redlivered | 14:09 | ||||||||||||||||||||||||||||||||||||||
|
14:09
Zoffix left
14:11
Zoffix joined
|
|||||||||||||||||||||||||||||||||||||||
| Zoffix | Correction: all MoarVM/nqp/rakudo/roast/doc missed hooks. I didn't check any other repos. | 14:12 | |||||||||||||||||||||||||||||||||||||
|
14:12
Zoffix left
|
|||||||||||||||||||||||||||||||||||||||
| nine | On -e performance: we spend ~ 25ms in HLL::Grammar::LANG but the profiler accounts for less than 1ms in callees. Yet the whole method is just 11 lines of code with no loops. | 14:18 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | timotimo: yeah, github.com/rakudo/rakudo/blob/mast....pm6#L1541 | 14:20 | |||||||||||||||||||||||||||||||||||||
| nine | MasterDuke: that list is constant folded. The optimizer sees that all values are constants, so it can create the resulting list at compile time, too. | 14:21 | |||||||||||||||||||||||||||||||||||||
| timotimo | the constant folding feature bites us in the butt when the code contains "a" x 100_000 | ||||||||||||||||||||||||||||||||||||||
| we constant fold that into a string, which we then serialize | |||||||||||||||||||||||||||||||||||||||
| at least i think we still do that | 14:22 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | yeah, i remember a commit i did to not serialize if a string is too big | ||||||||||||||||||||||||||||||||||||||
| nine | Sounds rather easy to special case | ||||||||||||||||||||||||||||||||||||||
| timotimo | ah | 14:23 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | nine: can i get at the contents of that constant folded list where i'm doing the array slice transformation? or should the array slice transformation be done elsewhere? | ||||||||||||||||||||||||||||||||||||||
| timotimo | you have access to the actual object, you can call methods on it or use nqp::getattr | 14:24 | |||||||||||||||||||||||||||||||||||||
| nine | MasterDuke: it's the QAST::WVal's .value | ||||||||||||||||||||||||||||||||||||||
|
14:25
ufobat_ joined
|
|||||||||||||||||||||||||||||||||||||||
| MasterDuke | thanks, i'll give that a shot | 14:25 | |||||||||||||||||||||||||||||||||||||
| (after i hopefully shoot a lot of people in the pubg match i just started) | 14:26 | ||||||||||||||||||||||||||||||||||||||
|
14:33
skids joined
|
|||||||||||||||||||||||||||||||||||||||
| nine | Apparently it's self.HOW that eats > 20ms in method LANG. And I'm reasonably sure that what we're actually doing there is deserializing the meta object. Though why that would take so long remains to be seen. | 14:42 | |||||||||||||||||||||||||||||||||||||
| jnthn | The meta-object holds references to the NFAs | ||||||||||||||||||||||||||||||||||||||
| So it may be that's what triggers all of them to be deserialized | 14:43 | ||||||||||||||||||||||||||||||||||||||
| timotimo | ah, heh. | ||||||||||||||||||||||||||||||||||||||
| jnthn | iirc | ||||||||||||||||||||||||||||||||||||||
| timotimo | that sounds very reasonable | ||||||||||||||||||||||||||||||||||||||
| Geth | rakudo/cur-candidates: 8 commits pushed by (Elizabeth Mattijsen)++, (Stefan Seifert)++
|
14:45 | |||||||||||||||||||||||||||||||||||||
|
14:45
ilmari[m] joined
|
|||||||||||||||||||||||||||||||||||||||
| lizmat | Files=1239, Tests=76365, 318 wallclock secs (15.66 usr 5.61 sys + 2203.42 cusr 217.91 csys = 2442.60 CPU) | 14:56 | |||||||||||||||||||||||||||||||||||||
| yoleaux | 14:00Z <Zoffix> lizmat: if you give me your public key, I can set you up a sudoers account on hack. Then you'd be able to nudge geth yourself (sudo service geth restart) | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | while we're talking about serializing, anybody have ideas for optimizing MVM_sc_find_object_idx ? | 15:03 | |||||||||||||||||||||||||||||||||||||
| it's the second most expensive function when install-core-dist.pl is running at the end of a `make install` | 15:04 | ||||||||||||||||||||||||||||||||||||||
| timotimo | what's the percentage? | 15:06 | |||||||||||||||||||||||||||||||||||||
| i wonder what the hit percentage for the cache is there | 15:07 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | some slightly older info here irclog.perlgeek.de/moarvm/2017-10-01#i_15241998 and here irclog.perlgeek.de/moarvm/2017-09-01#i_15099056 | 15:08 | |||||||||||||||||||||||||||||||||||||
| timotimo: 7.6%, first is MVM_interp_run at 8.3% | |||||||||||||||||||||||||||||||||||||||
| timotimo | OK | ||||||||||||||||||||||||||||||||||||||
| i'm not sure there's any way to sort the objects in the list or something | 15:09 | ||||||||||||||||||||||||||||||||||||||
| lizmat | weekly: twitter.com/tef_ebooks/status/9531...6913056768 | 15:10 | |||||||||||||||||||||||||||||||||||||
| notable6 | lizmat, Noted! | ||||||||||||||||||||||||||||||||||||||
| timotimo | i wonder how we missed this for the weekly back then | 15:11 | |||||||||||||||||||||||||||||||||||||
| lizmat: the tweet, i mean | |||||||||||||||||||||||||||||||||||||||
| lizmat didn't notice and nobody told me | |||||||||||||||||||||||||||||||||||||||
| timotimo | !(18091), _(71620) | 15:13 | |||||||||||||||||||||||||||||||||||||
| that's cache hits as "!" and cache misses as "_" | |||||||||||||||||||||||||||||||||||||||
| m: say 18091 / (18091 + 71620) | |||||||||||||||||||||||||||||||||||||||
| camelia | 0.201659 | ||||||||||||||||||||||||||||||||||||||
| timotimo | 20% hit rate, hm. | ||||||||||||||||||||||||||||||||||||||
| lizmat | do% cache hit :-( | ||||||||||||||||||||||||||||||||||||||
| *20 | |||||||||||||||||||||||||||||||||||||||
| MasterDuke | `Cannot iterate object with P6opaque representation (List)`, do i need to get its $reified or something like that? | 15:15 | |||||||||||||||||||||||||||||||||||||
| timotimo | yes | 15:16 | |||||||||||||||||||||||||||||||||||||
| if we had a bloom filter, we could potentially abort faster in the cache miss cases | |||||||||||||||||||||||||||||||||||||||
| MasterDuke | there's got to be some open-source, single-file, bloom filter we could just drop in | 15:20 | |||||||||||||||||||||||||||||||||||||
| timotimo | i'm considering putting in an array that has abbreviated pointers so we can go through the array at 4x speed and only occasionally look in the real array | 15:22 | |||||||||||||||||||||||||||||||||||||
| it has to be careful about invalidation, as GC can move the objects in root_objects | |||||||||||||||||||||||||||||||||||||||
| MasterDuke | sounds good. fwiw, install-core-dist.pl takes 12s for me during a make install | 15:24 | |||||||||||||||||||||||||||||||||||||
| so any improvement would be nice | |||||||||||||||||||||||||||||||||||||||
|
15:36
committable6 joined,
reportable6 joined,
coverable6 joined,
bloatable6 joined,
releasable6 joined,
unicodable6 joined,
statisfiable6 joined,
squashable6 joined
15:38
zostay joined
|
|||||||||||||||||||||||||||||||||||||||
| timotimo | getting good hits on the abbreviated thing | 15:42 | |||||||||||||||||||||||||||||||||||||
| few false-positives, too | 15:43 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | nice. notice any speedup for install-core-dist.pl? | 15:44 | |||||||||||||||||||||||||||||||||||||
| timotimo | it looked like it's now taking forever to run | ||||||||||||||||||||||||||||||||||||||
| but i've also set optimize to 0 | |||||||||||||||||||||||||||||||||||||||
| ooh there's the false-positives | 15:45 | ||||||||||||||||||||||||||||||||||||||
| wow that's crazy | 15:46 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | crazy fast i hope? | 15:47 | |||||||||||||||||||||||||||||||||||||
| timotimo | no | 15:48 | |||||||||||||||||||||||||||||||||||||
|
15:49
Zoffix joined
|
|||||||||||||||||||||||||||||||||||||||
| MasterDuke | any fast? | 15:51 | |||||||||||||||||||||||||||||||||||||
| Zoffix | You guys do realize there are no positive options in that "poll"? It openly mocks the language, implying the only one who "belives in" it is Larry Wall. Doesn't sound like Weekly material TBH. Core devs might have thick skin to handle that but do our users? :) | ||||||||||||||||||||||||||||||||||||||
| timotimo | the "hash" values are not quite so good :D | 15:52 | |||||||||||||||||||||||||||||||||||||
| Zoffix | those polls are pretty funny, if you're not too close to the subject being mocked :P | 15:54 | |||||||||||||||||||||||||||||||||||||
| timotimo | we seem to have a whole bunch of null pointers in these root lists?? :\\ | 15:56 | |||||||||||||||||||||||||||||||||||||
| MasterDuke | argh, `my $reified := nqp::getattr($op[1].value, $!symbols.find_in_setting("List"), '$!reified'); for $reified ...` gives `Unknown QAST node type Int` | ||||||||||||||||||||||||||||||||||||||
| timotimo | do we ever remove objects from the sc? | ||||||||||||||||||||||||||||||||||||||
| yeah, you forgot to wrap that in a WVal | |||||||||||||||||||||||||||||||||||||||
| whereever you're putting an int in there | 15:57 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | ah, you mean when i stick the values from $reified into the new op? | ||||||||||||||||||||||||||||||||||||||
| Zoffix | QAST::WVal.new(:value($the-stuff)) | 15:58 | |||||||||||||||||||||||||||||||||||||
| timotimo | yeah, you probably accidentally just put the values right in there | ||||||||||||||||||||||||||||||||||||||
| looks like what we really need to make lookup faster is a way to skip over null pointers in the sc? :\\ | 15:59 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | why are there null pointers there in the first place? | 16:00 | |||||||||||||||||||||||||||||||||||||
|
16:01
Zoffix left
|
|||||||||||||||||||||||||||||||||||||||
| timotimo | yes, why indeed | 16:01 | |||||||||||||||||||||||||||||||||||||
| looks like we're just not putting anything there? | 16:09 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | don't know why i'm having such trouble with this. `Cannot find method 'WVal' on object of type QAST` | 16:10 | |||||||||||||||||||||||||||||||||||||
| lizmat | Zoffix: "Who are you?" "I am Negan" :-) | 16:11 | |||||||||||||||||||||||||||||||||||||
| timotimo | what were you trying? | ||||||||||||||||||||||||||||||||||||||
| potentially QAST.WVal.new? | |||||||||||||||||||||||||||||||||||||||
| MasterDuke | QAST.WVal.new(:value($var)) | ||||||||||||||||||||||||||||||||||||||
| lizmat | Zoffix: FWIW, I *do* think it's P6W material | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | where $var comes from `for $reified -> $var {` | ||||||||||||||||||||||||||||||||||||||
| timotimo | yeah, needs to be QAST::WVal | 16:12 | |||||||||||||||||||||||||||||||||||||
| three extra dots, please | |||||||||||||||||||||||||||||||||||||||
| MasterDuke facepalms. what is with not being able to see anything? | |||||||||||||||||||||||||||||||||||||||
| m: my @a = ^10; my @d; @d = @a[3, 5] for ^100_000; say @d; say now - INIT now | 16:16 | ||||||||||||||||||||||||||||||||||||||
| camelia | [3 5] 2.01863611 |
||||||||||||||||||||||||||||||||||||||
| MasterDuke | m: my @a = ^10; my @d; @d = @a[3], @a[5] for ^100_000; say @d; say now - INIT now | ||||||||||||||||||||||||||||||||||||||
| camelia | [3 5] 0.3907429 |
||||||||||||||||||||||||||||||||||||||
| AlexDaniel | Zoffix: as I understand weeklies have always linked to all kinds of materials | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | now both those run the same speed locally | ||||||||||||||||||||||||||||||||||||||
| AlexDaniel | even if it was somewhat making fun of perl 6 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | it would be nice to get that for non-constants also though... | 16:17 | |||||||||||||||||||||||||||||||||||||
| timotimo | facepalm | 16:32 | |||||||||||||||||||||||||||||||||||||
| of course there's loads of null pointers there | |||||||||||||||||||||||||||||||||||||||
| we do lazy deserialization | |||||||||||||||||||||||||||||||||||||||
| and skipping over them must be done carefully, as deserializing parts of the list would invalidate any skip list you may have | 16:34 | ||||||||||||||||||||||||||||||||||||||
| a bitmap might work | 16:39 | ||||||||||||||||||||||||||||||||||||||
| but only if there's loooong stretches of zeroes | 16:42 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | whoops, shouldn't do the array slice transformation on assignment | 16:44 | |||||||||||||||||||||||||||||||||||||
| timotimo | debug output that makes me hopeful: | 16:46 | |||||||||||||||||||||||||||||||||||||
| could have skipped 55354 values | |||||||||||||||||||||||||||||||||||||||
| MasterDuke | that would be good | ||||||||||||||||||||||||||||||||||||||
| lizmat | timotimo: how large are these null values? 16 / 32 / 64 ? | 16:47 | |||||||||||||||||||||||||||||||||||||
| timotimo | pointers | 16:48 | |||||||||||||||||||||||||||||||||||||
| lizmat | ah, so 64 ? | ||||||||||||||||||||||||||||||||||||||
| timotimo | yes | ||||||||||||||||||||||||||||||||||||||
|
16:49
Kaiepi joined
|
|||||||||||||||||||||||||||||||||||||||
| lizmat | and we need to check these sequentially? | 16:49 | |||||||||||||||||||||||||||||||||||||
| timotimo | at the moment, yes | ||||||||||||||||||||||||||||||||||||||
| lizmat | feels to me some compression could be helpful ? | ||||||||||||||||||||||||||||||||||||||
| timotimo | can't, every slot has to be ready to have a pointer inserted at any moment | ||||||||||||||||||||||||||||||||||||||
| lizmat | ah, ok | 16:50 | |||||||||||||||||||||||||||||||||||||
| timotimo | oh, that output is likely wrong | ||||||||||||||||||||||||||||||||||||||
| i forgot to reset the counter %) | |||||||||||||||||||||||||||||||||||||||
| lizmat decides to go off for some extended deadpooling instead of bothering timotimo | |||||||||||||||||||||||||||||||||||||||
| timotimo | oooh | 16:51 | |||||||||||||||||||||||||||||||||||||
| have fun! | |||||||||||||||||||||||||||||||||||||||
| lizmat | will do: Deadpool and Deadpool 2 consecutively :-) | 16:53 | |||||||||||||||||||||||||||||||||||||
| timotimo | that's an olympic sized pool, isn't it | ||||||||||||||||||||||||||||||||||||||
| lizmat | quite a few hours long, yes :-) | ||||||||||||||||||||||||||||||||||||||
| afk& | 16:54 | ||||||||||||||||||||||||||||||||||||||
|
17:20
Zoffix joined
|
|||||||||||||||||||||||||||||||||||||||
| Zoffix | AlexDaniel: yeah, and regulars then swarm those resources and try to desperately defend the language | 17:21 | |||||||||||||||||||||||||||||||||||||
| And it looks just like that: desperation | 17:23 | ||||||||||||||||||||||||||||||||||||||
| And I don't know what benefit coming across desperate offers. | |||||||||||||||||||||||||||||||||||||||
| "If you're not pissing anyone off, you're not doing anything important"—Some Smart Person | |||||||||||||||||||||||||||||||||||||||
| AlexDaniel | hehe | 17:24 | |||||||||||||||||||||||||||||||||||||
| nine, Zoffix: Maybe you guys want to take a look at github.com/rakudo/rakudo/issues/1843 | |||||||||||||||||||||||||||||||||||||||
| Zoffix | I'm at $work for the next 1-5 hours | 17:27 | |||||||||||||||||||||||||||||||||||||
|
17:30
pmurias joined
17:36
shareable6 joined
17:47
Zoffix left
18:10
shareable6 joined
|
|||||||||||||||||||||||||||||||||||||||
| AlexDaniel | hmhm I wonder why shareable6 keeps doing that… | 18:11 | |||||||||||||||||||||||||||||||||||||
|
18:51
Ven`` joined
|
|||||||||||||||||||||||||||||||||||||||
| Geth | roast: eaf42233b9 | usev6++ | MISC/bug-coverage.t [JVM] Unfudge test that no longer dies |
19:07 | |||||||||||||||||||||||||||||||||||||
|
19:51
shareable6 joined
|
|||||||||||||||||||||||||||||||||||||||
| Geth | rakudo: MasterDuke17++ created pull request #1844: Rewrite @a[1,3] to @a[1],@a[3] for literal indices |
20:03 | |||||||||||||||||||||||||||||||||||||
|
20:06
softmoth joined
|
|||||||||||||||||||||||||||||||||||||||
| MasterDuke | nine, timotimo, Zoffix, et al.: comments welcome ^^^ | 20:25 | |||||||||||||||||||||||||||||||||||||
| jnthn | MasterDuke: Didn't read it yet, but does the opt check there's no custom overriding of slicing? | ||||||||||||||||||||||||||||||||||||||
| Geth | nqp: 54ed6a4491 | (Paweł Murias)++ | src/vm/js/nqp-runtime/package.json [js] Update dependency |
20:26 | |||||||||||||||||||||||||||||||||||||
| nqp: 146e567ade | (Paweł Murias)++ | 3 files [js] Use Buffer.alloc and Buffer.allocUnsafe instead of deprecated new Buffer |
|||||||||||||||||||||||||||||||||||||||
| MasterDuke | jnthn: hm, i think i copied some checks and then removed them when i was having trouble getting things working | 20:27 | |||||||||||||||||||||||||||||||||||||
| just add `$!symbols.is_from_core(the two relevant ops (postcircumfix:<[ ]> and infix:<,>))`? | 20:29 | ||||||||||||||||||||||||||||||||||||||
| jnthn | MasterDuke: Something like taht, yes | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | k, i'll add that | 20:30 | |||||||||||||||||||||||||||||||||||||
| oh, just need the postcircumfix, because right now it only fires when the infix gets constant folded away anyway | 20:34 | ||||||||||||||||||||||||||||||||||||||
|
20:36
dct joined
|
|||||||||||||||||||||||||||||||||||||||
| MasterDuke | jnthn: hm, now the optimization doesn't get triggered after i added `&& $!symbols.is_from_core($op.name)` right after `&& $op.name eq '&postcircumfix:<[ ]>'` | 21:10 | |||||||||||||||||||||||||||||||||||||
| just running 'my @a = ^10; my @d; @d = @a[3, 5] for ^100_000; say @d; say now - INIT now' to test | 21:11 | ||||||||||||||||||||||||||||||||||||||
| jnthn | Hmm...interesting. | 21:18 | |||||||||||||||||||||||||||||||||||||
|
21:32
Zoffix joined
|
|||||||||||||||||||||||||||||||||||||||
| Zoffix | MasterDuke: FWIW there's .op_eq_core method that does the `eq` and the from core test | 21:32 | |||||||||||||||||||||||||||||||||||||
| MasterDuke: as for it not finding anything. Try sticking something like this `try` before it: github.com/rakudo/rakudo/blob/mast...1579-L1582 | 21:33 | ||||||||||||||||||||||||||||||||||||||
| I forget whether it was from_core lookup, but there's some feature that needs this sort of priming. | |||||||||||||||||||||||||||||||||||||||
| (I think it was the from_core thing, back when I was converting ≥ to ascii variants) | |||||||||||||||||||||||||||||||||||||||
| MasterDuke: does this work with your opt? my @a = lazy 1, 2, 3; say @a[1,2] | 21:38 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke: ah, nm, misread where the $reified was coming from | 21:39 | ||||||||||||||||||||||||||||||||||||||
| This probably crashes with a different error now: my @a; say @a[List] | 21:40 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke: if we know postcircumfix is from core, would we ba able to optimize further and rewrite it to .AT-POS instead of postfixcircumfix:<[ ]>? | 21:41 | ||||||||||||||||||||||||||||||||||||||
| MasterDuke | Zoffix: afk for a bit, will check your suggestions after | 21:42 | |||||||||||||||||||||||||||||||||||||
| Zoffix | m: my @a; say @a[BEGIN List.new: 1, lazy 1, 2, 3] | 21:43 | |||||||||||||||||||||||||||||||||||||
| camelia | ((Any) ()) | ||||||||||||||||||||||||||||||||||||||
| Zoffix | m: my @a = ^10; say @a[BEGIN List.new: 1, lazy 1, 2, 3] | ||||||||||||||||||||||||||||||||||||||
| camelia | (1 (1 2 3)) | ||||||||||||||||||||||||||||||||||||||
| Zoffix | m: my @a = ^10; say @a[BEGIN List.new: 1, |lazy 1, 2, 3] | ||||||||||||||||||||||||||||||||||||||
| camelia | (1 1 2 3) | ||||||||||||||||||||||||||||||||||||||
| Zoffix | MasterDuke: reading the code, I think ^ that last eval won't work with your opt. I guess maybe need to `try` calling `.elems` on it before grabbing `.reified` and aborting it if we fail | 21:44 | |||||||||||||||||||||||||||||||||||||
| MasterDuke: and using the same technique to create a `List` object with abitrary stuff up in it, I'd see what happens with things like Slips (both in indexing list and in array itself, including bound to an array cell directly, rather than containerized). Does the result end up being the same as before the opt. | 21:48 | ||||||||||||||||||||||||||||||||||||||
| m: my @a = <a b c d e f g h i j>; @a[4] := Slip.new: <meow moo>; say @a[BEGIN List.new: 1, Empty, Empty, 4] | 21:49 | ||||||||||||||||||||||||||||||||||||||
| camelia | (b (meow moo)) | ||||||||||||||||||||||||||||||||||||||
| Zoffix | m: my @a = <a b c d e f g h i j>; @a[4] := Slip.new: <meow moo>; say &[,](@a[1], @a[Empty], @a[Empty], @a[4]) | ||||||||||||||||||||||||||||||||||||||
| camelia | (b () () (meow moo)) | ||||||||||||||||||||||||||||||||||||||
| Zoffix | MasterDuke: ^ yeah, I suspect it'll differ there ^ | ||||||||||||||||||||||||||||||||||||||
| Oh nm, Empty won't be an item in the List | 21:50 | ||||||||||||||||||||||||||||||||||||||
|
21:53
Zoffix left
22:06
stmuk_ joined
22:46
cognominal joined
22:48
ZofBot joined
|
|||||||||||||||||||||||||||||||||||||||
| MasterDuke | Zoffix++, adding `try $!symbols.find_lexical($op.name)` made the optimization trigger again, even with `self.op_eq_core($op, '&postcircumfix:<[ ]>')` | 23:41 | |||||||||||||||||||||||||||||||||||||