japhb wishes jnthn's brane good sleep 00:07
AlexDaniel squashable6: next 00:37
squashable6 AlexDaniel, ⚠🍕 Next SQUASHathon in 1 day and ≈9 hours (2017-12-02 UTC-12⌁UTC+14). See github.com/rakudo/rakudo/wiki/Mont...Squash-Day
Geth rakudo: jstuder-gh++ created pull request #1283:
Issue 1238: Fix Hash clone not retaining all attributes
06:13
synopsebot RAKUDO#1283 [open]: github.com/rakudo/rakudo/pull/1283 Issue 1238: Fix Hash clone not retaining all attributes
[Tux] Rakudo version 2017.11-47-gf3b1289fd - MoarVM version 2017.11-22-g0406d4314
csv-ip5xs1.118 - 1.125
csv-ip5xs-2012.845 - 13.174
csv-parser12.501 - 12.574
csv-test-xs-200.447 - 0.450
test12.126 - 12.401
test-t3.210 - 3.240
test-t --race1.297 - 1.323
test-t-2059.081 - 59.721
test-t-20 --race21.879 - 21.924
08:25
lizmat commute& 10:11
DrForr Heh. '+v dalek' and I'm watching the BBC Doctor Who proms. 10:19
SmokeMachine m: say <abc xyz>.classify( *.contains: any 'a'..'f' ) # shouldn't return {False => [abc abc abc xyz xyz xyz xyz xyz xyz], True => [abc abc abc]}? 13:12
camelia {False => [abc xyz xyz xyz xyz xyz xyz], True => [abc]}
SmokeMachine that doesn't make sense in my mind...
timotimo SmokeMachine: the result of the contains is another junction, and that gets autothreaded into what classify does, causing big confusion 13:42
if the implementation were correct, it'd have to return something like {any(True, True, True) => [abc], any(False, False, False) => [xyz]} 13:43
SmokeMachine that makes sense, but we are testing that it should be exactly this response...
timotimo m: say <abc xyz>.classify( *.contains(any 'a'..'f').so ) 13:44
camelia {False => [xyz], True => [abc]}
timotimo we have a spec test for that?
how old is it?
SmokeMachine yes... 13:45
github.com/perl6/roast/blob/fca87f...ify.t#L121
timotimo RT #127803 13:46
synopsebot RT#127803 [resolved]: rt.perl.org/Ticket/Display.html?id=127803 [BUG] Error using .classify with Junction - ERR: P6opaque: no such attribute '$!reified'
timotimo ah
it's supposed to mirror hash assignment, i expect
m: my %result{Any}; %result{"abc".contains(any "a".."f")} = "abc"; say %result 13:47
camelia {False => abc, True => abc}
timotimo m: my %result{Any}; %result{"abc".contains(any "a".."f")} X= "abc"; say %result
camelia Cannot modify an immutable Any ((Any))
in block <unit> at <tmp> line 1
timotimo m: my %result{Any}; %result{"abc".contains(any "a".."f")}>>.push("abc"); say %result
camelia Cannot modify an immutable Any ((Any))
in block <unit> at <tmp> line 1
timotimo except hash assignment doesn't create arrays 13:48
SmokeMachine so, the right answer shouldn't be {False => [abc abc abc xyz xyz xyz xyz xyz xyz], True => [abc abc abc]}?
the way I think, abc contains the letter (True) in 3 possibilities of 'a'..'f' (a, b and c) and doesn't contains in another 3 (False) (d, e and f)... 13:49
timotimo m: my %result{Mu}; %result.classify-list(*..contains(any "a".."f"), <abc xyz>); say %result.perl 13:50
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
contains used at line 1. Did you mean 'cotanh'?
timotimo m: my %result{Mu}; %result.classify-list(*.contains(any "a".."f"), <abc xyz>); say %result.perl
camelia (my Any %{Mu} = Bool::False => $["abc", "xyz", "xyz", "xyz", "xyz", "xyz", "xyz"], Bool::True => $["abc"])
timotimo now this is interesting
m: my %result{Mu}; %result.classify-list(*.contains(any "a".."f"), <xyz abc>); say %result.perl 13:51
camelia (my Any %{Mu} = Bool::False => $["xyz", "abc", "abc", "abc"], Bool::True => $["abc"])
timotimo that is definitely wrong
SmokeMachine Im asking because I wrote this (github.com/FCO/rakudo/commit/6b582...2e0bb2b9c) and it returns what I expected, not whats being tested... 13:53
Geth nqp: b58c92d906 | pmurias++ | src/vm/js/nqp-runtime/reprs.js
[js] Implement (unsigned) smaller ints in VMArray
14:39
tbrowder .tell AlexDaniel is it worth trying EVAL to execute a generated test file input as a string in order to guarantee having ws ending a line? 15:15
yoleaux tbrowder: I'll pass your message to AlexDaniel.
Zoffix m: class Foo { has $.foo; submethod TWEAK (:$.foo) {} } 15:42
camelia 5===SORRY!5=== Error while compiling <tmp>
Virtual method call $.foo may not be used on partially constructed object (maybe you mean $!foo for direct attribute access here?)
at <tmp>:1
------> 3Foo { has $.foo; submethod TWEAK (:$.foo7⏏…
Zoffix Isn't the object is fully constructed by the time we call TWEAK?
ufobat___ it would be cool if this would be the case 15:47
Zoffix And the reason I wanted that is 'cause my method foo does coercing things to $!foo, but that doesn't happen during instantiation, so I was aiming to just stick $.foo into attribute and hope it just uses the method to set stuff :) 15:50
tbrowder .tell AlexDaniel it works! 15:51
yoleaux tbrowder: I'll pass your message to AlexDaniel.
Zoffix m: class Foo { has $.foo; method z (:$.foo) {} }; with Foo.new { .z = 42; say .foo }
camelia Cannot find method 'STORE' on object of type Any
in method z at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix It don't work anyway, so I guees nevermind...
ufobat___ it would be just nice to call regular methods in TWEAK, because TWEAK might want to do stuff that is "complicated" and should be in regular methods. imho 15:53
Zoffix ufobat___: you can call them
ZofBot: it would be nice if people would even try to see if things are there before saying it would be nice to have them
ZofBot Zoffix, in the grand scheme is it worth getting worked up over?
Zoffix m: class Foo { has $.foo; submethod TWEAK (:$foo) { self.foo = $foo }; method foo { Proxy.new: :STORE(-> $, Int() $!foo { $!foo }), :FETCH{ $!foo } } }.new(:foo(42.12)).foo.say 15:55
camelia 42
ufobat___ Zoffix, oups sorry
TimToady you can't really rely on TWEAK to have a fully constructed object, since TWEAK is still part of the build plan, and virtual methods can call into bits of the object that have not yet been tweaked properly 16:41
we make it possible to call virtual methods during initialization, but we try not to make it easy 16:42
if you do call a virtual method during initialization, you've essentially set up an extra non-liskovian contract with derived classes 16:45
AlexDaniel . 18:30
yoleaux 15:15Z <tbrowder> AlexDaniel: is it worth trying EVAL to execute a generated test file input as a string in order to guarantee having ws ending a line?
15:51Z <tbrowder> AlexDaniel: it works!
AlexDaniel squashable6: next
squashable6 AlexDaniel, ⚠🍕 Next SQUASHathon in ≈15 hours (2017-12-02 UTC-12⌁UTC+14). See github.com/rakudo/rakudo/wiki/Mont...Squash-Day
AlexDaniel stops even more bots so that his server does not run out of memory again… 19:38
timotimo: any news?
Geth roast: eda59114f6 | usev6++ | S05-match/capturing-contexts.t
[jvm] Unfudge now passing tests
19:59
roast: 98d3743d6c | usev6++ | S05-mass/properties-general.t
[jvm] Fudge two newly added Unicdoe tests
20:17
AlexDaniel tbrowder: fwiw for the future: when closing issues on RT it's better to include a link to the roast commit/PR. Makes it easier for others who follow notifications from RT 20:47
tbrowder: otherwise it begs the question “but are there any tests?” :) 20:48
tbrowder roger! i assume you fixed them or do i need to do it? 20:49
AlexDaniel tbrowder: no it's ok, we can leave it like this 20:50
tbrowder i will go back and add the roast reference (i was surprised i could close them at all) 20:52
AlexDaniel I don't think you should spend your time on this :)
thing is, people can go to the PR and there's a link, so that's OK
Geth rakudo: tbrowder++ created pull request #1287:
add code to fix rakudo repo issue #1282
21:12
synopsebot RAKUDO#1287 [open]: github.com/rakudo/rakudo/pull/1287 add code to fix rakudo repo issue #1282
Geth roast: tbrowder++ created pull request #361:
add new tests for fix to rakudo repo issue #1282
21:13
synopsebot SPEC#361 [open]: github.com/perl6/roast/pull/361 add new tests for fix to rakudo repo issue #1282
timotimo AlexDaniel: nothing good; mostly rsi-related non-moving today 21:24
AlexDaniel timotimo: btw, workrave is a really useful tool :) 21:25
timotimo it's nice, yeah
AlexDaniel I'm not sure if using it has any health benefits, but at least the dishes are clean and the workshop is getting more organized :D
and I do enjoy standing up and walking around every few minutes, so that's cool 21:27
jnthn Just realized, if I want to see if I made any dent in the Text::CSV numbers tomorrow I should revision bump :) 21:28
AlexDaniel tbrowder: I'm really happy that somebody got his hands on pod stuff
tbrowder++
tbrowder thanks, simple stuff for simple minds--it's been mostly fun! 21:29
AlexDaniel jnthn++ too, of course 21:30
squashable6: next
jnthn tbrowder++ indeed, glad somebody is tending that :)
squashable6 AlexDaniel, ⚠🍕 Next SQUASHathon in ≈12 hours (2017-12-02 UTC-12⌁UTC+14). See github.com/rakudo/rakudo/wiki/Mont...Squash-Day
jnthn The changes that I'm bringing in allow MoarVM to do more inlining, including postcircumfix:<[ ]> 21:31
Which means every array access will get a little faster :)
timotimo annoyingly, in my performance-critical code i already changed postcircumfix:<[ ]> to AT-POS and ASSIGN-POS instead 21:33
Geth nqp: f1b269296c | (Jonathan Worthington)++ | tools/build/MOAR_REVISION
Bump MOAR_REVISION for better inlining
¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...3f5ca16... No newline at end of file
jnthn huh, there's one right there :P 21:34
masak m: .say for << "faster arr" y >>.map(* ~ "ay")
camelia faster array
yay
jnthn I saw "faster arr" and thought it was talk like a pirate day :P 21:35
masak m: .say for << "faster arr" y "talk like a pirate d" >>.map(* ~ "ay")
camelia faster array
yay
talk like a pirate day
timotimo i wonder if this makes given/when code faster, too 21:37
jnthn It may well do
It lifts a restriction that blocked quite a few inlinings 21:38
timotimo m: for ^100_000 { when * %% 2 { print "." }; when * %% 3 { print "," }; when * %% 5 { print "^" }; when * %% 7 { print ":" } }; say now - ENTER now
camelia ..,.^.:.,...,...,..^.,...,.^..,...,..:.,..^.,...,.^..,...,.:..,..^.,..:.,.^..,...,...,..^.,.:..,.^..,..:.,...,..^.,...,.^..,.:..,...,..^.,...,.^..,...,...,.:.^.,...,.^.:.,...,...,..^.,...,.^..,...,..:.,..^.,...,.^..,...,.:..,..^.,..:.,.^..,...,...,..^…
timotimo hah, yeah, of course it doesn't display that
m: my str @out; sub print(Str $a) { @out.push: $a }; for ^100_000 { when * %% 2 { print "." }; when * %% 3 { print "," }; when * %% 5 { print "^" }; when * %% 7 { print ":" } }; say now - ENTER now; say @out.join(""); 21:39
camelia 0.41210858
..,.^.:.,...,...,..^.,...,.^..,...,..:.,..^.,...,.^..,...,.:..,..^.,..:.,.^..,...,...,..^.,.:..,.^..,..:.,...,..^.,...,.^..,.:..,...,..^.,...,.^..,...,...,.:.^.,...,.^.:.,...,...,..^.,...,.^..,...,..:.,..^.,...,.^..,...,.:..,..^.,..:.,.^.…
Geth rakudo: f78fd7c17a | (Jonathan Worthington)++ | tools/build/NQP_REVISION
Bump to latest NQP_REVISION
¦ rakudo: version bump brought these changes: github.com/perl6/nqp/compare/2017....baec7a4... No newline at end of file
jnthn This time I looked and yeah, the file before my change missed its newlie 21:40
*newline
The newline *is* a lie...
timotimo m: my sub print(Str $a) {}; for ^1_000_000 { when * %% 2 { print "." }; when * %% 3 { print "," }; when * %% 5 { print "^" }; when * %% 7 { print ":" } }; say now - ENTER now;
camelia 3.5088867
timotimo m: my sub print(Str $a) {}; for ^5_000_000 { when * %% 2 { print "." }; when * %% 3 { print "," }; when * %% 5 { print "^" }; when * %% 7 { print ":" } }; say now - ENTER now; 21:41
camelia 18.2038620
timotimo just need to wait for f78fd7 to show up ...
m: my sub print(Str $a) {}; for ^5_000_000 { when * %% 2 { print "." }; when * %% 3 { print "," }; when * %% 5 { print "^" }; when * %% 7 { print ":" } }; say now - ENTER now;
camelia 17.415179
timotimo i better time this locally, it seems noisy 21:42
jnthn :)
jnthn bbl 21:43
Geth roast: 994f5fea92 | (Samantha McVey)++ | S05-mass/properties-general.t
Correct unicode regex test which didn't specify property name

We should only test Script and General Category if we don't specify the property we are testing for. Even though it works on MoarVM with just
  <:Digit>, it shouldn't be in roast since it isn't specced.
21:44
samcv that reminds me. i need to eventually come up with some way to deprecate it 21:47
argh 21:48
off the top of my head if we added a new nqp::unipropcode function that would only work with General_Category and Script and property value names, we could have that return that it couldn't find the value 21:50
timotimo bad news
that code was faster before the noinline improvement 21:51
samcv and if so we can show a deprecation error when we query a different function
chansen_ samcv: Digit is specced as compatibility property in TR18
samcv so it could still work until we deprecate
chansen_ www.unicode.org/reports/tr18/#Compa...Properties
timotimo jnthn: before your patch the code (with 2 million iterations) took 6.8s, after your patch it takes like 7.5 21:52
samcv well Numeric_Type=Digit is not the same as Digit
by what this says
we have \d for digit 21:53
so i don't see any issue
and we have <digit> and \d which perform the functions there
chansen_ true 21:54
samcv and <digit> is Numeric_Type=Decimal_Number while <:Numeric_Type<Digit>> is Numeric_Type=Digit 21:58
and atm <:Digit> does the latter, but just because it resolves the property value to the Numeric_type property which we eventually want to get away from
except for Script and General_Category 21:59
chansen_ Perl 5.26 switched from sc to scx \p{sc} equivalent to \p{scx=sc}) 22:09
jnthn timotimo: Hm, that doesn't make a lot of sense 22:39
timotimo: Profiling may be releaving, though
timotimo: Maybe it's one of those cases where more inlining means something can't be JIT
*revealing 22:40
timotimo: So, inlining went up from 23.21% to 28.13%, so around 5% more frames were inlined 23:01
And JITted did indeed drop: 85.21% down to 73.92% 23:02
oh wow, throwpayloadlex ain't JIT yet? 23:03
Will see if I've time to do that tomorrow :)
Seems quite a few exception-related ops ain't actually 23:04
timotimo is it as easy as calling the right c function and letting the generated throwish handler do the rest? 23:08
if so ... hackety hack :)
jnthn Probably, yes 23:09
timotimo right. might also have to jit lastexpayload? that ought to be a simple dynasm templatet hough 23:11
jnthn I think that one's already done 23:12
timotimo cool
bindexpayload and getexpayload now get us bailed 23:21
jnthn infix:<%%> is too big to inline because it does some checking if it can do a fast-path 23:31
At first I thought "hm, but Moar already does that fast-path"
But ripping it out makes things slower, but I guess it costs an extra allocation 23:32
Might be some more win in that area, anyways 23:33
timotimo succeed is inlined 99%, THROW is inlined 99% into that but it calls into "<anon> <unknown>:<unknown>" which is only speshed 23:41
i *think* that's the frame that gets bailed by exreturnafterunwind 23:42
easily jitted, of course ... 23:44
i got 28% inlined btw, how much did you get?
jnthn Same 23:47
timotimo with that op i get 98.24% jitted, without it it was 95.02%
there's a not-even-speshed frame in here, too. gets called 533334 times, maybe one of the blocks? 23:48
jnthn Oddness
Maybe the log has some hints 23:49
timotimo anyway, with all of this extra jitting the time it spends is now as much as it was before your work
jnthn Hm, but not less. Darn. 23:50
timotimo i put the one liner into multiple lines and it's now a sliver faster 23:51
still rather noisy
it's line 12, which means either the * %% 7 or the { } block with the print ":" 23:52
jnthn When I switched on the inline log in optimize.c, it told me %% wasn't being inlined, but print was 23:53
I enhanced that to include the reason for not inlining, btw
timotimo nice 23:54
it's like 2x faster if you replace each * with $_ 23:55
oh, %% has 55 BBs, eh ... that's really quite something 23:58