[Tux] This is Rakudo version 2017.04.3-95-g5e74017d6 built on MoarVM version 2017.04-44-gf0db8822 07:10
csv-ip5xs 3.110
test 13.319
test-t 5.209 - 5.275
csv-parser 13.083
lizmat Files=1192, Tests=56861, 210 wallclock secs (12.21 usr 4.84 sys + 1222.40 cusr 120.80 csys = 1360.25 CPU) 08:08
Geth rakudo/nom: 4 commits pushed by (Elizabeth Mattijsen)++ 08:15
rakudo/nom: f18d0dc04f | (Elizabeth Mattijsen)++ | src/core/Rakudo/Internals.pm
Add R:I.MULTIPLY-BAG-TO-BAG worker method

To be used for Baggy (.) Baggy in various places.
08:33
rakudo/nom: 3f97831d08 | (Elizabeth Mattijsen)++ | src/core/set_operators.pm
Make Baggy (.) Baggy about 35x faster

  - with a 100 element Bag with itself
  - give Baggy (.) Baggy its own candidate written using nqp ops
rakudo/nom: 9c9ebd0bb8 | (Elizabeth Mattijsen)++ | src/core/set_operators.pm
Make Map (.) Map about 2.5x faster

  - with a 26 element Hash with itself
  - give Map (.) Map its own candidate written using nqp ops
08:52
pmurias is MVM_num_neginf(tc) different from -1 * MVM_neg_inf(tc) on some platform? 10:38
* MVM_neg_posinf 10:41
jnthn m: use Test; is (42 but role { has int $.x = 100 }).x, 100 11:55
camelia Invalid BUILD_LEAST_DERIVED plan
in block <unit> at <tmp> line 1
pmurias jnthn: is the str type fully specced? it's only mentioned a few times in roast and not documented 11:59
jnthn pmurias: Yeah. We have to have *some* name for the thing inside of a Str (which is a P6opaque) 12:01
So str is that 12:02
It's not particularly widely known about/used, which is probably for the best :)
But we need it inside of CORE.setting, and some string-intensive code can - for the moment at least - get some performance wins by avoiding boxing overhead. 12:03
(In the future we should get better at optimizing away boxing in many cases.)
(Though even then there will still be cases where it can be a win.) 12:04
Funny you mention it 'cus I'm about to push another spectest that mentions it :-)
pmurias I'm working on the str to num MoarVM level conversion 12:05
jnthn: is it ok if I put it into src/strings/parse_num.c (it consists of a bunch of static functions and I don't want to clutter the coerce file)
Geth rakudo/nom: 43ad0db178 | (Jonathan Worthington)++ | src/core/Mu.pm
Correct a comment.
12:06
rakudo/nom: 6179ab344d | (Jonathan Worthington)++ | src/core/Mu.pm
Fix role mixins with native attrs with defaults.

So that `42 but role { has int $.x = 100 }` works.
jnthn pmurias: Seems reasonable
Geth roast: d8a07bb6f4 | (Jonathan Worthington)++ | S12-attributes/defaults.t
Test to cover RT #131181.
12:07
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=131181
pmurias jnthn: do we have a codepoint/grapheme number that can't occur in a string? 12:34
Geth rakudo/nom: 1a920dcc0d | (Elizabeth Mattijsen)++ | 2 files
Make all set operator helpers take nqp hashes

So that we can more easily use them internally without needing to upgrade them to proper Bags/Mixes.
12:36
dogbert17 m: say (2,(3,5)).Set 12:38
camelia set(5, 3, 2)
dogbert17 is the above correct behaviour? 12:40
lizmat dogbert17: fwiw, I have wondered that myself, but spectest breakage occurs if it doesn't flatten 12:41
m: say (2,$(3,5)).Set
camelia set((3 5), 2)
dogbert17 m: say (2,(3,5)).Bag 12:42
camelia bag(5, 3, 2)
lizmat yeah, the behaviour is consistent :-)
but not with arrays: 12:43
m: my @a = (2,(3,5)); dd @a
camelia Array @a = [2, (3, 5)]
dogbert17 we'll it would seem to be correct then if the flattening bahviour is in roast ...
was looking at RT #130973
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=130973
lizmat perhaps we need to discuss :-) 12:44
to me it was a bit of a WAT as well
dogbert17 :)
lizmat specifically because STORE doesn't flatten 12:45
and setifying could be considered a way of STORE
dogbert17 I couldn't say which bahaviour is the correct one but at least there should consistency (as you wrote) no? 12:46
dogbert17 grr it's spelt behaviour
some input from jnthn or TimToady would be nice :) 12:48
dogbert17 or would it be preferable to specify what behaviour the user want, e.g. (1,(2,3)).Set(:no-flat) 12:50
MasterDuke_ wouldn't that just be (1,(2,3)).flat.Set? 12:51
dogbert17 dunno, suppose you want the result to be 'Set(1, (2,3)) 12:52
MasterDuke_ er, i kind of said it backwards 12:53
i would have expected Set(1, (2,3)) unless i chose to put the .flat 12:54
dogbert17 sounds reasonable
m: say ("Zoffix", <Frameless Broken-Robot>).Mix 12:57
camelia mix(Broken-Robot, Zoffix, Frameless)
dogbert17 continues browsing RT looking for some LHF 12:59
Zoffix m: say mix("Zoffix", <Frameless Broken-Robot>) 13:04
camelia mix(Broken-Robot, Zoffix, Frameless)
dogbert17 Hi Zoffix 13:05
Zoffix m: ("Zoffix", <Frameless Broken-Robot>)Ā».item.Mix.say 13:06
camelia mix(Zoffix, (Frameless Broken-Robot))
Zoffix is -1 on `:no-flat` arg; we have methods to do that functionality 13:07
dogbert17 shot down in flames /o :) 13:08
it means you disagree with RT #130973
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=130973
Zoffix And nested lists are a pretty common sight, whereas wanting a set of lists is kind'f rarish
m: say join '|', ("Zoffix", <Frameless Broken-Robot>) 13:09
camelia Zoffix|Frameless|Broken-Robot
Zoffix m: ("Zoffix", <Frameless Broken-Robot>).join('|').say
camelia Zoffix|Frameless Broken-Robot
Zoffix And now I wonder if I have a bug somewhere in my code, because I thought both forms flattened /o\ 13:10
dogbert17 uh oh
Zoffix dogbert17: isn't it roast who disagrees with that ticket? (based on what was said above)
dogbert17 yeah, according to lizmat changing the flattening should break some tests 13:11
MasterDuke_ i thought perl 6 got rid of most auto-flattening 13:12
Zoffix m: ("Zoffix", <Frameless Broken-Robot>).Array.Mix.say # even simpler way
camelia mix(Zoffix, (Frameless Broken-Robot)) 13:13
dogbert17 so it's at least simple to get the non flattening behaviour if that's what you want
Zoffix: so what, if anything, will you do with 'join' 13:17
Zoffix Nothing. Will just remember that only sub form flattens :)
dogbert17 that is at least consistent with the docs :) 13:19
MasterDuke_ speaking of consistency... 13:24
m: class Bar { subset Positive of Int where * >= 0; has Positive $.y; submethod TWEAK(Positive :$x = 0) { $!y = $x } }; Bar.new(x => 3).perl.say; Bar.new(x => -3).perl.say
camelia Bar.new(y => 3)
Constraint type check failed in binding to parameter '$x'; expected Bar::Positive but got Int (-3)
in submethod TWEAK at <tmp> line 1
in block <unit> at <tmp> line 1
MasterDuke_ m: class Bar { subset Positive of Int where * >= 0; has Positive $.y; submethod BUILD(:$x = 0) { $!y = $x } }; Bar.new(x => -3).perl.say
camelia Type check failed in assignment to $!y; expected Bar::Positive but got Int (-3)
in submethod BUILD at <tmp> line 1
in block <unit> at <tmp> line 1
MasterDuke_ i noticed this over in #perl6. see the difference between the two errors? `parameter '$x'` vs `assignment to $!y` 13:25
i've noticed this other places as well. should we attempt to have consistency in how things like variable names, sub/method names, etc. are quoted or not in errors? 13:26
Zoffix ZOFVM: Files=1242, Tests=133839, 113 wallclock secs (21.57 usr 2.79 sys + 2333.10 cusr 144.71 csys = 2502.17 CPU) 13:44
Geth rakudo/nom: 475d9bcf9b | (Zoffix Znet)++ | src/core/IO/Path.pm
[io grant] Fix display of backslashes in IO::Path.gist

While in Str.gist we render, say, ļ½¢\fo\boļ½£ as just `\fo\bo`, with IO::Path.gist we show the value within double quotes and .IO coercer appended. This makes it a bit confusing, since backslashes do things when they're in double quotes.
Fix by using `.perl` of the Strs.
13:49
roast: fd308be0fd | (Zoffix Znet)++ | S32-io/io-path.t
Move path types into file-global constant

So all the tests can use them.
13:50
roast: 95d68a2e6c | (Zoffix Znet)++ | S32-io/io-path.t
[io grant] Test IO::Path.gist does escapes of backslashes

Rakudo impl: github.com/rakudo/rakudo/commit/475d9bcf9b
13:51
Zoffix mmmm
Don't like it. 13:52
All Windows users will see backslash galore.
MasterDuke_ does that effect rt.perl.org/Ticket/Display.html?id=130226 at all? 13:55
Zoffix ļ½¢foo\barļ½£.IO would be nice, but those chars aren't rendering in default cmd.exe :/
MasterDuke_: don't think so
timotimo then you could use Q[...]
and only escape ]
m: say Q[foo\bar\]baz].perl 13:56
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3say Q[foo\bar\]7ā5baz].perl
expecting any of:
infix
infix stopper
postfix
statement end
statement moā€¦
timotimo or not
m: say Q[foo\bar\q(])baz].perl
camelia 5===SORRY!5=== Error while compiling <tmp>
Unexpected closing bracket
at <tmp>:1
------> 3say Q[foo\bar\q(]7ā5)baz].perl
Zoffix It doesn't need to be executable
Just clear
timotimo oh, gist!
yes, yes
Zoffix IO(foo\bar) ? 13:57
no quotes
eh, leave it as is. 13:59
Geth roast: de89d25536 | (Zoffix Znet)++ | S32-io/io-path.t
Revert "[io grant] Test IO::Path.gist does escapes of backslashes"

This reverts commit 95d68a2e6cd01a8ef03d4d4a3bec239fc7838ac3.
rakudo/nom: 6ef2abdfc0 | (Zoffix Znet)++ | src/core/IO/Path.pm
Revert "[io grant] Fix display of backslashes in IO::Path.gist"

This reverts commit 475d9bcf9bf00e858feeefb28a42e2050ee4b51d.
roast: 9e8b154f43 | (Zoffix Znet)++ | S32-io/io-handle.t
[io grant] Test IO::Handle.close can be...

  ...non-explosively called on an already closed handle.
14:15
Zoffix Is it possible to lose data if you don't .close your handle? 14:34
Doesn't look like we buffer anything ATM, so it's kinda hard to check :/
jnthn In theory, yes 14:49
Zoffix hm. OK :) 14:51
Zoffix amends .close docs 14:52
jnthn Though running out of handles is also reason enough to take care to close things :) 14:53
Zoffix Yeah 14:54
m: class Foo { method close { say "closed" } }; for ^3 { my $fh will leave {.close} = Foo.new } 16:32
camelia closed
closed
closed
Zoffix m: class Foo { method close { say "closed" } }; for ^3 { my $fh will leave *.close = Foo.new }
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing block
at <tmp>:1
------> 3"closed" } }; for ^3 { my $fh will leave7ā5 *.close = Foo.new }
expecting any of:
block or pointy block
Zoffix gottabeablock?
ZofBot: once you go block you never go back 16:34
ZofBot Zoffix, minmax(&by); # default &infix:<cmp> Produces a "Supply" that, for each value emitted, produces "Range"s with the minimum and maximum values seen thus far on the specified "Supply"
Geth roast: 853f76f719 | (Zoffix Znet)++ | S32-io/pipe.t
[io grant] Test IO::Pipe.close returns pipe's Proc
16:39
Zoffix ZofBot: rock it with me \o/ www.youtube.com/watch?v=09U69zGLXwE 18:04
ZofBot Zoffix, Zoffix: yes
Zoffix Good bot!
Zoffix just learned to play the start of that song ???????????? 18:32
Not as good with one guitar :/
ZofBot: learn to play an instrument, you bum.
ZofBot Bool::False
Zoffix heh
samcv morning everyone 18:39
Zoffix morning
A while back I said `my Mu $foo` was pointless since variables are Mu anyway, but it's not pointless, it changes the `is default` 18:54
m: my Mu $x; dd $x
camelia Mu $x = Mu
Zoffix m: my $x; dd $x
camelia Any $x = Any
Zoffix m: -> +a { dd a.elems }( %(:42a, :72b, :55z) ) 19:39
camelia 3
Zoffix Is it supposed to behave this way?
Feels like we're mis-using nqp::istype(..., Iterable) somewhere.
or more precisely:
m: -> +a { dd a; dd a.^name; dd a.elems }( %(:42a, :72b, :55z) ) 19:40
camelia (:z(55), :a(42), :b(72))
"List"
3
Zoffix It ends up being a list of Pairs instead of a 1-el list with a Hash
pmurias does any of :ratchet, :sigspace, :ignorecase, :ignoremark or :dba allow a number argument? 19:55
m: my token foo { :777ignorecase } # example of argument 19:56
camelia ( no output )
pmurias if none of them allow it, I'll remove this anti-feature
Zoffix pmurias: don't know about :dba, but rest of them "yes" but only in a sense that they're Bool and Bool is an Int 19:57
m: say 'foo' ~~ m:ignorecase/FOO/
camelia ļ½¢fooļ½£
Zoffix m: say 'foo' ~~ m:ignorecase(0)/FOO/
camelia 5===SORRY!5=== Error while compiling <tmp>
Adverb ignorecase value must be known at compile time
at <tmp>:1
------> 3say 'foo' ~~ m:ignorecase(0)7ā5/FOO/
Zoffix ... it is bruh :/
m: my token foo { :1ignorecase FOO }; say 'foo' ~~ &foo 19:58
camelia ļ½¢fooļ½£
Zoffix m: my token foo { :0ignorecase FOO }; say 'foo' ~~ &foo
camelia Nil
Zoffix m: my token foo { :0ignorecase foo }; say 'foo' ~~ &foo
camelia ļ½¢fooļ½£
Zoffix There we go
pmurias Zoffix: I forgot about :1 and :0 :( 20:00
Zoffix Maybe I'm wrong though. I was thinking of named args to Str.match. If these need to be known at compile time and it refuses to take :colon(form), then they're not even Bool but maybe just `int`s
AlexDaniel timotimo++ # trisectable XD 20:03
Zoffix Note to self: nqp::until(:nohandler, ā€¦) is not the same thing as nqp::until(ā€¦, :nohandler) :/ 20:08
\o/ I cracked the andthen->orelse chaining issue \o/ 20:17
m: say (Date.today - Date.new('2016-11-10'))/30 20:18
camelia 5.666667
Zoffix Took almost 6 months, but went from hopelessness to a tidy solution :)
nine Zoffix++ # perseverance :) 20:21
Zoffix And as a cherry on top, `orelse` is also 2.4x faster 20:25
timotimo AlexDaniel: i'm the master of names :)
Geth rakudo/nom: 37316f8220 | (Zoffix Znet)++ | src/core/operators.pm
Fix andthen-orelse chaining; make orelse 2.4x faster

Fixes RT#130798: rt.perl.org/Ticket/Display.html?id=130798
The OP issue in the ticket is due to `Empty` from andthen messing up positions of args in orelse, making the thunked args shift up and be returned as blocks instead of evaled. ... (6 more lines)
20:44
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=130798
roast: 59d56a4cc1 | (Zoffix Znet)++ | S03-operators/orelse.t
Test andthen+orelse+orelse chaining

RT#130798: rt.perl.org/Ticket/Display.html?id=130798 Rakudo fix: github.com/rakudo/rakudo/commit/37316f8220
20:45
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=130798
Zoffix ZOFVM: Files=1242, Tests=133841, 106 wallclock secs (18.68 usr 3.36 sys + 2057.14 cusr 216.04 csys = 2295.22 CPU) 20:50
nine Working on in-process precompilation again. Seems like the break was actually helpful, as while trying to find out where I left off, I realized that my issue is not objects leaking into the precompilation, but objects leaking out. 21:08
timotimo oh, interesting!
nine This means that when I get an error during precompilation, I just have to try again and it will get further as it can use the already precompiled files. 21:09
Intriguingly at least one of the issues may be connected with multis.
Test is: echo 'use B;' > A.pm && echo 'unit class Foo; multi method new() {}' > B.pm && rm -Rf .precomp && perl6 -I. -MA -e ''
If i just remove the "multi" it works fine 21:10
It also works if I manually create the proto! 21:12
Indeed. When I add the missing protos in NativeCall::Types, I can compile and load all of NativeCall in a single process 21:23
jnthn That's...intriuging, though I don't immediately have any guesses 21:30
Proto auto-generation is implemented in terms of generic instantiation 21:31
Though from a pre-comp perspective I'm not immediately seeing why that's not just a comparatively boring bit of meta-programming.
Geth rakudo/nom: 3c8822e80d | (Zoffix Znet)++ | src/core/operators.pm
Fix Empty as arg to andthen; make andthen 2.5x faster

Postfix `with` compiles to andthen and fix+speedup applies to it too.
Empty as arg disappears in the `+@foo` slurpy, so we use nqp::p6argvarray op and emulate `+@foo` slurpy to avoid Empty dissappearance.
Fixes issues mentioned in comments on RT#130798:
  rt.perl.org/Ticket/Display.html?id=130798
21:36
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=130798
roast: 8993a2434b | (Zoffix Znet)++ | S03-operators/andthen.t
Test `Empty` as arg to andthen/postfix with

RT#130798: rt.perl.org/Ticket/Display.html?id=130798 Rakudo fix: github.com/rakudo/rakudo/commit/3c8822e80d
21:37
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=130798
Zoffix m: use nqp; sub foo (+a) { my $a = nqp::atpos(nqp::p6argvmarray(), 0); dd $a[0]; dd a[0] }; foo %(:42a, :72b) 21:47
camelia Hash % = {:a(42), :b(72)}
:a(42)
Zoffix dammit
m: dd [orelse] %(:42a, :72b) 21:48
camelia :a(42)
Zoffix m: dd infix:<orelse>( %(:42a, :72b) )
camelia Hash % = {:a(42), :b(72)}
Zoffix star: dd infix:<orelse>( %(:42a, :72b) ) 21:49
camelia :a(42)
Zoffix Well, not really "dammit". It changed from how +@foo was handling it, but I think it's +@foo is wrong :/ 21:50
.ask jnthn is it normal that +a slurpy breaks up hashes into a list of pairs? e.g. -> +a { dd a; dd a.^name; dd a.elems }( %(:42a, :72b, :55z) ) gives Ā«(:z(55), :a(42), :b(72))ā¤"List"ā¤3ā¤Ā» I would've expected Ā«(%(:z(55), :a(42), :b(72)),)ā¤"Hash"ā¤1ā¤Ā» 21:51
yoleaux Zoffix: I'll pass your message to jnthn.
Zoffix m: -> *@a { dd @a }( %(:42a, :72b, :55z), 42 ) 21:53
camelia [:z(55), :a(42), :b(72), 42]
Zoffix Same with *@a slurpy...
I guess it's supposed to be this way...
.tell jnthn never mind; I see *@a does it too. I guess it's normal, since Hash is Iterable... just weird. 21:55
yoleaux Zoffix: I'll pass your message to jnthn.
Zoffix ummm... but Hashes are unordered :o 21:57
jnthn Yes, it's being Iterable that matters 22:02
yoleaux 21:51Z <Zoffix> jnthn: is it normal that +a slurpy breaks up hashes into a list of pairs? e.g. -> +a { dd a; dd a.^name; dd a.elems }( %(:42a, :72b, :55z) ) gives Ā«(:z(55), :a(42), :b(72))ā¤"List"ā¤3ā¤Ā» I would've expected Ā«(%(:z(55), :a(42), :b(72)),)ā¤"Hash"ā¤1ā¤Ā»
21:55Z <Zoffix> jnthn: never mind; I see *@a does it too. I guess it's normal, since Hash is Iterable... just weird.
jnthn **@a and |c are the ones that don't do it
Those just collect arguments as they are 22:03
Zoffix noted. Thanks.
nine Ah, looks like there _is_ still a leaking in issue as well, as I've just got a NativeCall::Types precomp file depending on Inline::Perl5::Interpreter 22:06
Geth rakudo/nom: e1994d94d8 | (Zoffix Znet)++ | src/core/operators.pm
Fix 1-arg Hash cases for andthen and orelse

The fixes in previous commits[^1][^2] did not emulate the +@foo slurpy correctly for the cases where 1-arg non-Positional, non-Seq Iterable
  (like a Hash) was given.
Fix by .List-ifying that case.
  [1] github.com/rakudo/rakudo/commit/3c...7d1059517e
  [2] github.com/rakudo/rakudo/commit/37...80774c0998
22:10
roast: e036c4e287 | (Zoffix Znet)++ | 2 files
Test 1-arg Hash case for andthen and orelse

Rakudo fix: github.com/rakudo/rakudo/commit/e1994d94d8
BenGoldberg m: dd Empty; 22:11
camelia Empty
BenGoldberg m: dd { Empty }(); 22:12
camelia Empty
BenGoldberg m: dd $_ for { Empty }(); 22:13
camelia ( no output )
Zoffix Empty is slip() 22:17
ZOFFLOP: t/spec/S17-promise/start.t 22:27
Geth rakudo/nom: fdb2b2abad | (Zoffix Znet)++ | src/core/operators.pm
Fix Empty given to notandthen; make notandthen 2.5x faster

postfix `without` compiles to notandthen, so fix and speedup affects it as well.
Empty as arg disappears in the `+@foo` slurpy, so we use nqp::p6argvarray op and emulate `+@foo` slurpy to avoid Empty dissappearance.
22:31
roast: 50b54916db | (Zoffix Znet)++ | S03-operators/notandthen.t
Test Empty given as arg to notandthen

Rakudo fix: github.com/rakudo/rakudo/commit/fdb2b2abad
Zoffix eh, we have really poor tests for these. Just spotted another bug I introduced into all three ops and none of the tests caught it 22:33
Well, poor-ish, I guess, it's 1-arg case it's busted up on
Geth rakudo/nom: 1ed76a9034 | (Zoffix Znet)++ | src/core/operators.pm
Fix andthen, notandthen, and orelse for 1-arg Iterable case

Be sure we update the $els var after we swap the 1-arg iterable to be our list of args.
22:48
roast: 200a4e8fb1 | (Zoffix Znet)++ | 3 files
Test 1-arg Iterable arg to andthen, notandthen, and orelse

Rakudo fix: github.com/rakudo/rakudo/commit/1ed76a9034
Zoffix ZofBot: no andthen! I refuse to play your Chinese food mind games! 22:49
ZofBot Zoffix, spurt() sub spurt ($where, $what, Str :$enc = $*ENC, Bool :append = False, Bool :$createonly = False, --> Bool ) is export Writes the indicated contents (2nd positional parameter) to the location indicated by the first p
Zoffix calls it a day
\o
jnthn o/ Zoffix++