»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
japhb timotimo: I thought that case was already optimized when lizmat++ was reworking :exists and friends a few months ago ...? 00:00
timotimo i *think* we still create objects with the WHENCE property when descending into the hash 00:03
whereas if we knew we wouldn't allow autovivification, we could just use throwaway Any objects or something
it's probably not worth much
and i should go to bed :)
o/ 00:04
japhb Sleep well, timotimo!
TimToady we could do a lot better by propagating known lvalue and rvalue contexts downward, where rvalue context includes passing to any known parameter that isn't rw 00:52
so the only place such a pragma might be useful is in passing to a late-bound parameter
and I suspect we might find a way to optimize those too 00:53
such pragmas are always kinda smelly
one could turn a cascade of subscripts into a thunk, for instance, and delay evaluation till we know how it will be bound 00:55
TimToady WHENCE is really just a workaround to get correct behavior in the absence of a brilliant compiler 00:56
which rakudo is starting to show signs of :) 00:57
japhb \o/ # Flashes of brilliance! 00:58
BenGoldberg offers the bulbs from his flashlight to make rakudo brighter ;) 01:02
TimToady
.oO(Light Emitting Developers)
01:04
japhb
.oO( Organic Light Emitting Developers )
01:05
BenGoldberg That's easy -- just wear glow in the dark clothing.
japhb I emit lots of light -- it's just mostly in the infrared region of the spectrum 01:06
BenGoldberg But if the average surface temperature of your surroundings is the same as your skin temp, you will absorb the same amount of infrared light as you emit. 01:10
japhb If that was the case, it would either be a very hot room, or a very cold me.
BenGoldberg So you can't be said to be a luminous software developer, unless you're working in a cold room. 01:11
japhb ... and the fans on my desktop would be going crazy in the former case.
BenGoldberg: Of course, like a CPU, I'm more efficient when cool. :-)
BenGoldberg I said skin temp, not core body temp. Your skin temp is probably close to 70F.
japhb In fact, in body-temperature surroundings, I'm probably not coding at all.
Hmmm, just looked it up, skin is relatively warmer than surroundings, varying by location and amount/type of clothing, with bare feet being perhaps the closest to external temperature. 01:15
dalek ast/S26-WHY: 6347fe1 | (Rob Hoelz)++ | S26-documentation/why-both.t:
Start testing POD block stuff
01:29
ast/S26-WHY: ec01d1c | (Rob Hoelz)++ | S26-TODO.md:
Tabularize coverage matrix
kudo/S26-WHY: 1006e4f | (Rob Hoelz)++ | src/ (2 files):
Fix up POD blocks for why-both
hoelzro *much* prettier: github.com/perl6/roast/blob/S26-WH...d-by-tests
japhb Yeah, that's a big improvement 01:37
dalek ast/S26-WHY: 56268dc | (Rob Hoelz)++ | S26-documentation/why-both.t:
Fill out why-both tests a bit
03:49
ast/S26-WHY: 36d1e91 | (Rob Hoelz)++ | S26-TODO.md:
Fill out matrix a bit
hoelzro are macros installed into the lex pad/symbol table for runtime introspection? 03:51
it just occurred to me that they might not be...
hoelzro ah, it seems like it does 03:56
dalek ast/S26-WHY: db83983 | (Rob Hoelz)++ | S26- (4 files):
Test documentation on macros
04:04
ast/S26-WHY: 2bb7d87 | (Rob Hoelz)++ | S26-TODO.md:
Start coming up with a "merge back to nom" plan
dalek kudo/S26-WHY: 1fb5236 | (Rob Hoelz)++ | src/Perl6/Grammar.nqp:
Fix trailing docs for macros
04:27
Mouq FROGGS: Yay! :) 06:43
yoleaux 12 Aug 2014 19:08Z <FROGGS> Mouq: nice! and yes, this makes the Slangish module easier design wise...
masak morning, #perl6 06:58
moritz \o masak, *
Mouq o/ masak, just now I added Perl 6 to that wiki article you mentioned a few days ago: en.wikipedia.org/w/index.php?title...=618329590 07:01
though maybe s/subroutine/function/? 07:02
Mouq I'll do that and add a snippit of syntax, I suppose 07:04
Mouq Hmmm... Looking for a simple and accessible example from core.setting... 07:08
Mouq goes with multi infix:<+>(Int:D $x, Date:D $d) 07:11
masak Mouq++ 07:12
Mouq: I think "subroutine" is Perl lingo, and "function" is more broadly used.
gamo How do I shuffle a list in perl6? 07:20
Mouq m: say (2,3,4).pick(*) 07:21
camelia rakudo-moar 969e6c: OUTPUT«2 4 3␤»
Mouq m: say (1..100).pick(*)
camelia rakudo-moar 969e6c: OUTPUT«96 10 86 39 75 4 6 19 90 38 11 58 21 29 85 81 62 78 54 80 73 83 12 30 18 44 82 36 49 45 5 97 61 25 67 98 70 32 48 35 24 57 76 9 15 92 51 26 23 13 7 34 3 31 42 77 47 100 74 89 66 28 69 27 94 55 46 93 17 22 59 41 40 37 63 79 87 60 52 65 1 8 84 95 56 91 64 2 …»
gamo thanks 07:22
Mouq np :) 07:25
masak: How's it look now?
Mouq has to get on a plane in a few hours 07:26
Mouq thought his flight was on Friday until a few days ago, isn't quite in a "pack up and leave" mindset yet :/ 07:27
masak Mouq: slightly distracted, sorry. mid-commute. 07:29
Mouq masak: np, no rush :) if nothing else I'll probably see it in the backlogs 07:30
dalek ecs: 22d8cd4 | Mouq++ | S03-operators.pod:
Generalize ~~ calls to be on Setty, Baggy, & Mixy

  (To account for {Set,Bag,Mix}Hash)
07:34
masak Mouq++ # en.wikipedia.org/wiki/Operator_ove...ding#2000s 08:38
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...ml?id=2000
masak no, synopsebot, you silly.
Mouq: looks very nice.
colomon lizmat++ 09:19
github and/or my e-mail just dumped days' worth of specs commits to my inbox... 09:20
masak the spec emails tend to come in clumps, for some reason. 09:35
lizmat I'm pretty sure someone needs to OK them 09:36
nwc10 they've hit the list moderator
lizmat suspects TimToady
nwc10 Delivered-To: moderator for [email@hidden.address]
dalek ecs: e6fda2f | (Elizabeth Mattijsen)++ | S03-operators.pod:
Alas, mutable Set/Bag/Mix follow different rules

This reverts commit 22d8cd42ba02f242489a466d8e2377974cbb1cb5.
09:38
lizmat m: say <a b>.SetHash === <a b>.SetHash
camelia rakudo-moar 969e6c: OUTPUT«False␤»
lizmat m: say <a b>.SetHash ~~ <a b>.SetHash # something fishy here 09:39
camelia rakudo-moar 969e6c: OUTPUT«True␤»
masak lizmat: looks right to me. 09:39
analogous to this:
lizmat m: say <a b>.Set ~~ <a b>.Set
camelia rakudo-moar 969e6c: OUTPUT«True␤»
masak m: say <a b> === <a b>
camelia rakudo-moar 969e6c: OUTPUT«False␤»
masak m: say <a b> ~~ <a b>
camelia rakudo-moar 969e6c: OUTPUT«True␤»
lizmat well, then this line in the table is incorrect: 09:40
Set Set identical sets $_ === X
for the Setty case
masak I'm... not sure I'd want that semantics, no.
lizmat it works for Set, as it is immutable and value based 09:41
masak oh, right.
probably not the sane thing for mutable/reference types. 09:42
tadzik computer, messages 09:54
yoleaux 12 Aug 2014 23:11Z <ren1us> tadzik: gist.github.com/ren1us/01d724255dd57bbaab31 # panda issues
tadzik this is the closest thing to a Star Trek world that I have :o 09:55
ChoHag Perl just said this: µx@®¢-£y٭B¨B(¢- 09:56
It's not supposed to do that!
masak ChoHag: luckily, this is #perl6. which does not have that particular failure mode, AFAIK. 09:57
(we aim for different mistakes) :) 09:58
ChoHag Whether you aimed for that or not, that's what just got spat out. 09:59
ChoHag Most frustratingly, I *think* my code now does more or less what I think it does, but it keeps tripping over moar thread bugs so I can't tell what's my fault and what's not. 10:00
masak .oO( I think my code does what I think it does ) 10:01
ChoHag sic 10:04
dalek ecs: 5c86418 | (Elizabeth Mattijsen)++ | S03-operators.pod:
Hopefully correctly map Setty/Baggy/Mixy in ~~

  Mouq++ for pointing out to me I forget the xHash cases.
10:05
jnthn
.oO( Grammar errors make me [sic] )
masak ooh, it's actually Perl 6-related? I didn't get that part until now.
ChoHag Well I did. Now I made the mistake of not changing anything so it's started blowing up every time.
masak well, hope you manage to golf and submit the thread bug.
jnthn ChoHag++ passed me the code last night 10:06
So I'll reproduce when I get chance and try to fix it...
lunch &
ChoHag This one's common: death by Internal error: inconsistent bind result: in method Stringy at src/gen/m-CORE.setting:5777
dalek kudo/nom: 4e28c75 | (Elizabeth Mattijsen)++ | lib/Test.pm:
Make isnt a bit more verbose on failure, like is
10:37
timotimo to err is human. to err well is butterfly. 10:42
lizmat jnthn, moritz: puzzled by following lines in lib/Test.pm 11:05
# XXX no regexes yet in nom
my $bad_death = $ee.Str.index('Null PMC access ').defined;
feels like a fossil, is it?
FROGGS[mobile] yeah
jnthn yes, looks like :) 11:06
lizmat ok, will clean up and run spectest :)
lizmat also, it feels like dies_ok and eval_dies_ok could be merged 11:10
just like throws_like, which can take a Str or a Callable
dalek kudo/nom: 42dfe38 | (Elizabeth Mattijsen)++ | lib/Test.pm:
Remove fossil from eval_dies_ok
11:11
lizmat actually, same for lives_ok and eval_lives_ok 11:14
it would also seem we need to change a lot of (eval_|)dies_ok to throws_like 11:15
FROGGS[mobile] that makes sense 11:16
... and might be the cause for ten more tickets
ChoHag Every time I run this thing and then get caught up doing something else, I come back to find the log of a clean run through, suggesting that my bugs are mostly of the cosmetic variety. 11:23
So I run it again and it refuses to do anything other than trip over thread bugs while I watch.
ChoHag I think I need to put a sticker over the camera so the computer can't tell when I'm watching. 11:24
lizmat cycling& 11:30
sergot o/ filip.sergot.pl/en/blog/perl6/gsoc_status/ 11:31
yoleaux 11 Aug 2014 10:10Z <timotimo> sergot: you haven't posted to your blog about the gsoc for quite a while; isn't there some kind of requirement (possibly not strict) to have a public progress report on a biweekly basis?
sergot timotimo: you are right, there is a requirement
timotimo: I just did a longer break before the last post about this project. :) 11:32
made
had 11:33
...
:)
masak "did", "made" and "had" all work there.
but they mean slightly different things :)
sergot yeah, made is the best one here I think 11:35
:)
masak oh, and "took" is also possible :) 11:37
moritz taken 12:24
dalek ast/S26-WHY: ea34542 | (Rob Hoelz)++ | S26-TODO.md:
Move variables row down

Since I don't intend to implement it until later
12:39
ast/S26-WHY: e05a1fa | (Rob Hoelz)++ | S26- (4 files):
Test more S26 things
dalek kudo-star-daily: 5d9a65d | coke++ | log/ (14 files):
today (automated commit)
12:53
dalek blets: a067826 | (Herbert Breunung)++ | docs/ (3 files):
straighten out operator related terms
13:08
pmichaud good morning, #perl6 13:14
nwc10 steals someone else's line 13:17
good Am, Pm 13:18
"too slow"
(that being my usual line at london.pm when running off to the bar)
masak g'day, pm 13:26
[Coke] pmichaud: hio 13:47
pmichaud: good day! 13:48
pmichaud [Coke]: o/ 14:05
A good day to you too, sir!
sjn pmichaud: happy survived-another-trip-around-the-sun day for you, sir. :) 14:11
masak oh, is it today_ 14:18
?
jnthn m: say join ', ', 'Happy birthday ' <<~<< ('to you' xx 2, 'pmichaud', 'to you') 14:20
camelia rakudo-moar 42dfe3: OUTPUT«Happy birthday to you, Happy birthday to you, Happy birthday pmichaud, Happy birthday to you␤»
masak jnthn++ # metaops for great congrats! 14:20
m: say join ', ', 'Happy birthday ' <<~<< ('to you' xx 2, $_, 'to you') given 'pmichaud' 14:21
camelia rakudo-moar 42dfe3: OUTPUT«Happy birthday to you, Happy birthday to you, Happy birthday pmichaud, Happy birthday to you␤»
masak factored out the pmichaud ;)
PerlJam masak: he's been factored out far too much lately. We need him factored in more :-) 14:22
masak oops, sorry :)
PerlJam pmichaud: Happy Birthday! :)
pmichaud: you're 31 this year, n'est pas? :) 14:24
masak m: say 0x31
camelia rakudo-moar 42dfe3: OUTPUT«49␤»
pmichaud Oui, j'ai 31 ans. 14:26
masak .oO( nice ans-wer )
pmichaud Yes, I survived another trip around the sun... but there are an awful lot of rocks in this neighborhood. I guess one can say I had a rocky start. 14:27
moritz pmichaud.age++, pmichaud++ 14:30
geekosaur well, that's 3 so far (including one coworker). not enough days in a year, I guess :) 14:32
masak geekosaur: ever heard of the birthday paradox? :)
geekosaur yes, in fact I was kinda sideways referring to it 14:33
hoelzro morning #perl6 14:51
TimToady doesn't moderate mailing lists, only RosettaCode, and that sporadically 15:05
PerlJam has had to use "stty sane" twice this week (for the first time in years) 15:08
japhb PerlJam: That begs the question of exactly what is making your TTY insane. 15:24
PerlJam japhb: git and perl6 apparently. (though, the time it was perl 6, I really just needed to turn echo back on, so maybe that doesn't count as "insane") 15:27
TimToady gah, the smartmatch table has evolved into a complete mess 15:28
TimToady thinks about how to clean it up 15:29
dalek rl6-roast-data: 732d17c | coke++ | / (6 files):
today (automated commit)
15:31
TimToady you can't use === between the keys of hashes/sets like that 15:32
there's no guarantee the keys come out in the same order 15:33
dalek p-js: ae705ed | (Pawel Murias)++ | / (9 files):
Basic variable support.

Start creating a revised runtime in src/vm/js/nqp-runtime. Implement the bind opo. QAST::Call with a single QAST::BVal argument. Add some mini tests to t/js/mini (They don't all produce tap so they are not yet run by a harness)
15:58
dalek ecs: b99ecf4 | TimToady++ | S03-operators.pod:
whack down the smartmatch table

The semantics of smartmatches should largely be inferable from the X argument, and should not imply heavy run-time processing of the X value. In general, smartmatches should not be providing implicit any/all semantics except in a few cases where no other interpretation is possible. Since we now have Sets, Hash smartmatch no longer needs to emulate sets, and can be eqv identity. Regex on LHS now considered too magical, but we provide provide Callable escape value for reverse match of Associative and Positional. (Reverse Regex match on keys can be written { .keys.any ~~ /.../ } ~~ %hash for instance.) c58b918 | TimToady++ | S03-operators.pod: put back non-slice hash item lookups
These seem obvious, and work well with junctions on the LHS.
16:30
TimToady there's little point in having a smartmatch table that you have to look things up in constantly 16:38
TimToady arguably the hash slice existence tests should be thrown out as well, since they can be done with the Callable escape valve 16:41
and that will force the any/all intent to be made clear
dalek ecs: 629dbe9 | TimToady++ | S03-operators.pod:
hash smartmatching just shouldn't try to guess

With our lovely junctions available for clarity, we should just force the user to be clear.
17:04
TimToady now feels he has some small hope of remembering most of the smartmatch table 17:10
and this might even help spesh a bit, with fewer types flopping all over the floor of the boat 17:12
TimToady so basically, @list ~~ Hash or @list ~~ Regex will now tell you to clarify the LHS with any/all/cat/join 17:15
TimToady smartmatching is really stupidmatching when both the computer and the user are guessing 17:19
masak TimToady: +1 to all of the above 18:00
FROGGS_ o/ 18:17
FROGGS m: grammar G { token TOP { <a> }; proto token a {*}; token a:sym«<foo>» { <sym> } }; class A { method a:sym«<foo>»($/) { say("awesome") } }; G.parse("<foo>", :actions(A) ) # bug 18:52
camelia ( no output )
FROGGS nqp-m: grammar G { token TOP { <a> }; proto token a {*}; token a:sym«<foo>» { <sym> } }; class A { method a:sym«<foo>»($/) { say("awesome") } }; G.parse("<foo>", :actions(A) ) # no bug
camelia nqp-moarvm: OUTPUT«awesome␤»
FROGGS rakudo tries to call a:sym<<foo>> 18:53
ChoHag God damn it. Switched to freebsd and now my terminal doesn't understand unicode, so this channel always looks funky. 18:54
FROGGS :«(
eww, that was not intended to look that germish >.< 18:55
moritz 19:05
lizmat r: my @a = <a b c>; my %h = (a => 1, b => 2, d => 3); say @a; say %h; say @a ~~ %h # something that should fail from now on 19:06
camelia rakudo-{parrot,jvm,moar} 42dfe3: OUTPUT«a b c␤("a" => 1, "b" => 2, "d" => 3).hash␤True␤»
PerlJam Seems like LHF modulo the wording of the fail message. 19:08
lizmat should we do a deprecation cycle for these now failing smartmatch combo's ?
PerlJam lizmat: oh, good question. I tend towards "yes" 19:09
(but who would be relying on it now?)
lizmat someone with a wrong understanding of smartmatch ?
cognome I am not smart enough to use that. 19:15
PerlJam cognome: sounds like you're smart enough to use it appropriately then! :) 19:16
(i.e. not at all)
cognome does that constitute a right understanding? 19:17
PerlJam possibly.
TimToady There's little wrong with the BSDs that cannot be explained by the fact that they're still mostly competing wity System V. 19:25
*with 19:26
huf the golden age? :) 19:27
TimToady well, I wouldn't trade vim for the old vi... 19:32
for one thing, vim understands Unicode :D 19:34
lizmat and unlimited undo across sessions :-) 19:35
dalek kudo/nom: daf80f8 | (Elizabeth Mattijsen)++ | lib/Test.pm:
Kill another fossil: no such thing as a bad death
19:36
TimToady hates it when he undoes too far and ends up in some other random file
lizmat was taught that anything with "too" in it, is generally no good 19:37
TimToady too true
lizmat is just glad it's not TimToody :-) 19:38
carlin "There's little wrong with the BSDs" ~ Larry Wall, 2014 19:39
:p
BinGOs TomTiady 19:41
Ven moritz: yeah, I know the learnxiny has some quirks atm 19:43
I'm on holidays atm, no wifi, but I'm going to download it now to change some stuff
lizmat Ven++ 19:44
Ven err, 3 days without checking them full-time, and already 121 github notifs. 19:45
[Coke] wonders how lizmat found these fossils!
lizmat [Coke]: going back through the Synopses, checking S24 for validity against the source of lib/Test.pm 19:46
[Coke] dedication.
Ven does @<foo> work (s05) ?
TimToady not yet, I think
jnthn I thought it got impl'd a month or so ago... 19:47
lizmat there are plenty of spectests with @< in them 19:48
TimToady m: $_ = "a:b:c"; /$<foo>=\w % ':'/; say @<foo>
camelia rakudo-moar 42dfe3: OUTPUT«===SORRY!===␤Unrecognized regex metacharacter % (must be quoted to match literally)␤at /tmp/nu2id1sa_9:1␤------> $_ = "a:b:c"; /$<foo>=\w ⏏% ':'/; say @<foo>␤Unable to parse regex; couldn't find final '/'␤at…»
TimToady m: $_ = "a:b:c"; /$<foo>=\w+ % ':'/; say @<foo>
camelia rakudo-moar 42dfe3: OUTPUT«␤»
Ven my rakudo is two weeks old
not that one, TimToady 19:49
m: my $_ = 'a:b:c'; / @<foo>=[ \w ':' ] /; say $/; my $_ = 'a:b:c'; / $<foo>=[ \w ':' ] /; say $/
camelia rakudo-moar 42dfe3: OUTPUT«Potential difficulties:␤ Redeclaration of symbol $_␤ at /tmp/erNpyt6bMs:1␤ ------> my $_ ⏏= 'a:b:c'; / @<foo>=[ \w ':' ] /; say $/␤ Redeclaration of symbol $_␤ at /tmp/erNpyt6bMs:1␤ ------> '; / @<foo…»
FROGGS @<foo> compiles to $<foo>.list 19:50
(right now)
Ven FROGGS: not that @<foo>
I mean @<foo> inside of a regexp
FROGGS ahh 19:51
k
Ven well, I'll manually merge sjn++'s PR now, and fix the remaining stuff 19:52
lizmat m: use Test; dies_ok {...}, "foo" # why does this go outside of the "dies_ok" ?
camelia rakudo-moar 42dfe3: OUTPUT«Unhandled exception: Stub code executed␤ at <unknown>:1 (/home/p6eval/rakudo-inst-1/languages/perl6/runtime/CORE.setting.moarvm:throw:4294967295)␤ from src/gen/m-CORE.setting:12986 (/home/p6eval/rakudo-inst-1/languages/perl6/runtime/CORE.setting.mo…»
Ven I probably don't have a markdown converter tho
lizmat m: use Test; dies_ok {die}, "foo" # and this doesn't?
camelia rakudo-moar 42dfe3: OUTPUT«ok 1 - foo␤»
lizmat not really important, just wondering
sjn Ven: apologies for not doing it, I've been rather distracted :-\ 19:53
Ven sjn: well, it'd have been fine doing the little nitpicks, I mostly wanted a rebase so that I could merge 19:54
now I'll do it by hand, cause my little phone internet won't handle the pulling etc :p
(where "by hand" means "using vim") 20:00
sjn vim ftw :) 20:04
timotimo for the vim! 20:11
dalek kudo/nom: 88326ed | (Elizabeth Mattijsen)++ | lib/Test.pm:
Make (dies|lives)_ok also take nonCallable to EVAL
20:35
lizmat moritz: in Test.pm, shouldn't "die_on_fail" also be "is export" ? 20:39
or is "die_on_fail" a fossil (does not seem to be used in roast)
moritz: asking you has git blame has your name on it :-) 20:40
*as
grondilu tried to translate rosettacode.org/wiki/The_ISAAC_Cipher from C to Perl 6 but failed 20:41
grondilu is to lazy to insist but in case someone wants to go on: gist.github.com/grondilu/0f5ab49ae102f73c01b4 20:42
s/to/too/
hoelzro lizmat: I noticed the same 20:51
I was going to fix it as a part of my test-betterer branch 20:52
lizmat how? by adding the "is export", or by removing it ?
hoelzro adding is export 20:54
lizmat Actually, I'm wondering whether that shouldn't be read from an %*ENV variable 20:57
hoelzro lizmat: as long as you're thinking about Test.pm, I've been thinking about how best to emulate P5's $Test::Builder::Level in P6 21:00
I'm trying to think of a "Perl 6y" way to do it
any insights (from lizmat or others) would be appreciated!
lizmat that's about where to report errors in your own test routines, right ? 21:01
couldn't that be handled by "is hidden_from_backtrace" ? 21:02
hoelzro I tried that, didn't work =/ 21:04
I don't think callframe respects that 21:05
lizmat hmmm....
dalek blets: 779af62 | (Herbert Breunung)++ | docs/ (3 files):
update op tables
21:06
dalek p: a5f15a2 | (Timo Paulssen)++ | src/NQP/Optimizer.nqp:
can also integerize mod_n, neg_n and abs_n.
21:29
dalek blets: e93f403 | (Herbert Breunung)++ | docs/appendix-b-grouped.txt:
repairing smartmatch table
21:41
blets: af68469 | (Herbert Breunung)++ | docs/appendix-b-grouped.txt:
repair Associativity table
21:42
donaldh finally got around to looking for performance bottlenecks on JVM backend. 21:51
yoleaux 17 Jul 2014 19:35Z <[Coke]> donaldh: - can you add some notes to the README for perl6-eclipse-plugin about how to install it in eclipse?
donaldh oh, has it been that long.
timotimo hey donaldh 21:52
nice to see you again :)
donaldh Found a worthwhile performance improvement in serialization: gist.github.com/donaldh/1c7b535762d6dc3f8997
timotimo holy hell!
that is a *nice* win
donaldh Stage jast : 56.511 becomes 15.708
jnthn omg 21:53
donaldh++!
donaldh Turns out that indexOf is the culprit for getting sc ids.
I'm storing indexes in a hash just now, but maybe it would be better to just push the indexes into SixModelObject, a bit like Moar does. 21:54
jnthn *nod*
A hash is a nice solution for now though
timotimo donaldh: did you follow the changes jnthn has been doing to MoarVM and the jit project brrt did for GSoC? 21:55
donaldh Well I'll clean it up a bit and commit it. Probs tomorrow now.
timotimo did you use a specific tool to figure this out?
donaldh timotimo: I've been reading your status reports, yes. But I don't know any of the details.
timotimo details: MoarVM starts up quite a bit faster and uses quite a bit less RAM for simpler programs in perl6 21:56
donaldh Well I've been getting frustrated with jvisualvm profiling actually crashing the JVM.
timotimo i remember having that problem myself
donaldh So I've resorted to using -Xprof
donaldh If you wonder what the impact of turning off JIT is: gist.github.com/donaldh/a9af6bb2422027982042 21:57
4911.95 secs to compile the CORE.setting 21:58
jnthn o.O
diakopter hee
timotimo oooooooh
wow.
donaldh Well, that's -Xint which might do more than just turn off JIT.
BenGoldberg After you've applied your optimization, what does that profile with -Xprof look like? 22:00
donaldh which, the -Xint one? 22:01
BenGoldberg Yeah
donaldh I haven't run it yet. I t t a k e s a w h i l e 22:02
BenGoldberg Presumably something other than ArrayList.indexof tops the list.
Hmm... can you run with -Xprof without -Xint?
lizmat good night, #perl6! 22:03
BenGoldberg G'night lizmat :)
timotimo gnite lizmat!
jnthn o/ lizmat
donaldh Yeah, but you get split numbers some before JIT kicks in, some after. 22:04
donaldh is running it ATM
BenGoldberg Considering the gargantuan speed difference between jit vs interpreted, there ought to be some way to first warm up the JVM (including getting JIT done), then start profiling. 22:05
donaldh Oh, -noverify gives a 2s improvement in startup on my machine.
possibly -Xbatch which does all the JIT. That comes at a huge cost too :-( 22:06
BenGoldberg wonders whether -Xbatch or -Xint is costlier. 22:07
donaldh I think what I have identified is that a gazillion calls to indexOf is slow when JITed and mindbogglingly slow when interpreted.
BenGoldberg :) 22:08
donaldh should have an -Xint -Xprof list in 20min or so. 22:10
donaldh timotimo: I'm guessing some of the MoarVM performance gains are present on other backends too - parse and optimise stages are certainly faster on JVM. 22:12
timotimo yes. but there are even bigger wins to be had once the jvm is taught how these new optimizations work 22:13
donaldh Well jvm still has the priorInvocation thing in StaticCodeInfo which I think causes it to retain a lot more in heap than necessary. 22:15
I never got my head around how to do it the MoarVM way. 22:16
timotimo neither have i
donaldh that one requires jnthn fu 22:17
timotimo :)
it's a tiny bit disappointing that turning on moarvm's jit for compiling rakudo is a tiny bit slower than without 22:19
but that *does* mean we're getting the time spent jitting code back by having slightly faster code execute often enough ... OSLT 22:21
jnthn The other thing is that if you profile the CORE.setting compile, only around 30% or so of the time is actually spent in the interpreter itself doing small ops. 22:22
TimToady well, a compiler runs lots of different bits of code a few times, so it's not where you'd see a lot of gain from a JIT anyway
timotimo that's right
jnthn Plus what TimToady said
If you run the JIT on loopy things it can handle, it's quite a win.
TimToady for a compiler, you'd wanna snapshot the JIT at some point to make it a precompile 22:23
timotimo jnthn: yeah, and then the frustrating thing is that we don't get to see the wins in perl6-bench yet :)
TimToady or feed the jit-me signal back to the original somehow
jnthn timotimo: The one I posted the other day that was a big win was directly out of perl6-bench :)
timotimo oh? 22:24
does that mean i should run perl6-bench against moar-jit now?
jnthn Well, you might want to wait while I work on bigint ops a bit
timotimo oh! :)
jnthn add_I being jittable will probably helps some other benchmarks :)
BenGoldberg It's too bad you can't cache the jit-ed code between runs.
timotimo do we actually need to change that much?
jnthn timotimo: No
And it's not that hard 22:25
timotimo ah, so the same kind of deal i've been doing all along :)
jnthn A little code-reorg is all
We can actually use type info to do better at these in the future too
TimToady could think about how to integrate that with an incremental compiler in the future
oh, this routine is the same, *WHAM* 22:26
timotimo do you think we can in-line the "smallbigint" computation in the jit and drop back into the "full" function if we're above 16 bit integers?
jnthn timotimo: Eventually yes
Well, probably
It needs an allocation though
So I dunno
The extra code size we'd produce in doing it may not be a win over the function call
timotimo OK 22:27
TimToady JIT might prefer pushing smallbigints all the way back into the original pointer
like most LISPs do
then you get smallbigints that are nearly your pointer size
timotimo well, if the code knows the number is actually inside the pointer and it can properly emit overflow checks, that would sound like a good improvement 22:28
jnthn We already do union the smallint with the mp_int pointer, iirc
Inside the Int body
timotimo that's true, but we still need a bit of "flag" data to signal it's not a regular big int
we can't have full 64bit for the smallbigint for that reason iirc 22:29
jnthn We already have that; that's how it knows today that it's a smallbigint :)
Yes, that's true, but 32 bits should be enough for anyone :P
timotimo except 64bit would be much better! :)
jnthn Could have 63 and use the LSB, then bit-shift by 1... :) 22:30
TimToady that gets you a sign for free
though you'd like a spare bit up top for fast addition overflow check 22:31
japhb timotimo: Are you planning a p6weekly this week?
jnthn Oh, yeah...the overflow check...
TimToady multiplication overflow is harder 22:31
timotimo i meant to, then i got distracted and then i got more distracted
japhb sub distract() { think; wander; sit; distract; } 22:32
timotimo japhb: do you have suggestions? because all i can think of this week is some more spec work lizmat did, the improvements jnthn did to memory usage and sergot's newest blog post
TimToady but for something like static multi-dim array calculations, you can pretty much guarantee that your indices are not going to approach 2^60 any time soon
japhb I think I did some perl6-bench commits since your last one, but I haven't checked.
There's been all of hoelzro's work, but as it's not merged to nom yet, I don't know if you would include that or not. 22:33
timotimo i think i should!
TimToady
.oO("I wonder as I wander"?)
japhb But I must admit to mostly being a consumer rather than producer as far as p6weekly content is concerned ...
hoelzro the matrix is almost complete =D
timotimo :)
jnthn timotimo: And async process stuff, and JIT improvements, and JIT merge... :)
hoelzro github.com/perl6/roast/blob/S26-WH...d-by-tests
japhb Oh right, the JIT merge happened this week!
hoelzro wow, only subsets and constants left 22:34
maybe I'll try to squeeze in variables
jnthn timotimo: I think there were some other compile time opts too...
japhb Also, (async process stuff)++
timotimo oh, i had "jit" mentioned in that sentence and then restructured it and it got missed :\
hoelzro gah, multi methods too =/
TimToady timotimo: I made large pushes like 4 times faster
japhb timotimo: git log --reverse --since=<previous-p6weekly-date> 22:35
:-)
timotimo oh! yes, you did 22:35
TimToady give or take a few orders of magnitude; let's just say it scales much better now when you @a.push(@a)
one almost wants to implement 0 xx $large with that now 22:36
japhb TimToady: Is there a perl6-bench test for that now?
TimToady notyet
been fighting the hardware wars at home
not to mention the wetware wars...
japhb
.oO( Sega v. Nintendo? )
TimToady actually, setting up dialysis infrastructure for my brother-in-law so he doesn't have to carry big buckets of fluid around every day 22:37
it's now a series of tubes :) 22:38
japhb Your brother-in-law is the Internet now?
TimToady and we no longer have extension cords running down the hallway because I grounded the outlet in his bedroom now
japhb Good on ya for all of that, especially while recovering from your own med stuff. 22:39
TimToady well, it wasn't too hard on my eye, but I'm still pretty sore from all the crawling under the house...
japhb is reminded of an old interview with Michael J. Fox, in which he was asked if he helped out with the kids, and said that in no uncertain terms he was not suddenly absolved from making PB&J sandwiches. 22:40
donaldh Latest -Xprof info for JVM gist.github.com/donaldh/1f4449171070ce390e20
timotimo wow, isinstance, eh? 22:41
TimToady is that like :D or somethin'? 22:42
japhb TimToady: From name I'd guess that it's $object ~~ Type
timotimo oh
that's right, japhb 22:43
japhb So either we do that A LOT, or the implementation in the JVM is slow.
Or both.
timotimo i think we really do that a lot
TimToady hoist spesh up to nqp now? 22:44
timotimo we may be doing that a whole lot in the ops
TimToady or copy spesh over into JVM support?
TimToady well, I guess the guards would still have to check the type... 22:45
japhb TimToady: It does seem like the parts dependent on staticly determined info ought to be caught in the NQP/Rakudo optimizers, not as late as spesh, but waddooIknow
timotimo we can only do a tiny amount of that in nqp's optimizer
TimToady I suspect we could do better with subscripting not delegating to at_pos and such
timotimo especially since we have monkey typing and subclassing
TimToady that's why S12:2172 22:48
synopsebot Link: perlcabal.org/syn/S12.html#line_2172
TimToady at FINAL time you can start to make assumptions
timotimo hmm 22:49
TimToady we've thank a lot about optimizability over the years
not that FINAL is implemented yet... 22:50
timotimo our optimizer can run earlier than that, right? 22:50
for example when we precompile
TimToady FINAL might be a misleading name, I suppose
timotimo actually ... also when we just "use" a class and it gets compiled for us
TimToady well, you can do a lot at CHECK time, but really, this is LINK time 22:51
so maybe we should call it LINK instead of FINAL
timotimo i wonder how we can actually do optimizations at that point; we usually only have the qasts of very small methods/subroutines at that points
jnthn TimToady: The problem is that it's application level, meaning that by then - unless you precompiled - modules have already been compiled 22:52
TimToady: Thus it really is in the realm of dynamic opt to take the FINAL and do stuff based on it
TimToady but that includes, like, throwing away guards, n'est pa?
and jitting to code that does at_pos directly rather than delegating 22:53
jnthn Are we talking REPR-level at_pos here? 22:54
That is already elligible for de-virtualization
Just not actually implemented yet
TimToady I'm talking about the at_pos called all over the place in List.pm
jnthn Potentially, at_pos can be inlined into whatever is calling it. 22:55
Trouble is that it's quite sizable 22:56
timotimo do we have too many checks? 22:57
TimToady though I think we'll get more immediate win from static analysis of lvalue vs rvalue vs unknown 22:59
donaldh java.lang.Class.isInstance is being called by any java code that needs a dynamic cast. MethodHandle binding is the first I've found. 23:00
timotimo donaldh: did you look for any actual isInstance calls in the RakudoOps.java? 23:01
donaldh None exist.
timotimo oh
TimToady actually, I was thinking more of staticalizing a lot of the dispatch decisions in array_slice.pm 23:02
timotimo oh
i meant instanceof
do you think that compiles to the same thing?
donaldh nope, instanceof is done at compiletime. 23:06
timotimo oh? 23:07
donaldh sorry, statically. It's an op or someting.
timotimo OK
so the isInstance thing is an even more "late-bound" version of instanceof 23:08
or something like that
donaldh java.lang.Class.isInstance gets called for dynamic cast decisions, when LHS and RHS are both objects
timotimo ah, so instanceof is only for compile-time-known RHS 23:09
donaldh it gets called pretty much all the time by the invokedynamic stuff.
timotimo oh, mhm
donaldh e.g. all the MethodHandle.invoke* methods 23:11
timotimo the next java is supposed to be better at indy, right?
or was that the current one@s
?
dalek ecs: 3071eed | TimToady++ | S (3 files):
s/FINAL/LINK/ for clarity

We don't want people confusing this with any other kind of finalization.
23:15
timotimo is off to bed 23:16
dalek d: de015ef | TimToady++ | viv:
avoid a new experimental warning in P5
23:20
d: 81e0d07 | TimToady++ | STD.pm6:
s/FINAL/LINK/ to match spec
TimToady japhb: also, I didn't want to commit without testing, and it seems there are a lot of prerequisites for getting perl-bench going that I haven't got around to dealing with 23:22
jnthn ugh, such tired... 23:27
jnthn slept badly the last 2 nights
Let's see if tonight works out better... :)
o/
japhb TimToady: Hmmm, sounds like I need to do something to make it easier to install perl6-bench then. 23:29
Good luck, jnthn
TimToady japhb: oh, and niecza breaks with my current mono :/ 23:33
(v3.2.8) 23:34
TimToady gist.github.com/anonymous/bd3bea04ce9ce249aa40 if anyone's interested in the failure to install niecza on mono 3.2.8 23:37
(3.2.8 being what comes from Ubuntu these days) 23:39
japhb Ubuntu 14.04? 23:49