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] Rakudo version 2018.04.1-107-g4cacbf668 - MoarVM version 2018.04.1-119-g6bb647d74
csv-ip5xs0.877 - 1.002
csv-ip5xs-208.857 - 9.150
csv-parser25.691 - 25.860
csv-test-xs-200.468 - 0.470
test8.968 - 9.058
test-t2.404 - 2.413
test-t --race1.004 - 1.124
test-t-2042.263 - 43.440
test-t-20 --race14.612 - 15.559
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