Geth nqp: 19f9cdf4f6 | (Timo Paulssen)++ | t/nqp/019-file-ops.t
fix skip for symlink on windows
00:16
[Tux] This is Rakudo version 2017.03-159-gbbfb28d49 built on MoarVM version 2017.03-88-g21fc7a22 06:32
csv-ip5xs 3.262
test 12.469
test-t 4.973 - 5.013
csv-parser 12.879
samcv hoping will have 2.2x speed boost to regex [Tux] soon. if all goes as planned :) github.com/MoarVM/MoarVM/pull/574 06:33
hopefully will make your test go down
llfourn samcv++, to all regexes? 06:41
samcv most
llfourn is patiently exited 06:42
samcv anytime it is regex between an 8bit string and 8bit string or 32bit string and 32bit string. and may optimize it so if the needle is short and longer haystack, to convert needle to 32bit to get the fastness
'a' x 100000 ~ 'b' ~~ /b/ # is 2.2x faster and that's worst case. so may be better under other cases 06:43
well probably not worse than that lol
cause that is the worst
but will initially have a (totally made this up right now) 50% speed boost on mac, and 2.2x on linux? due to how memmem is implemented on BSD it's just normal 06:44
but i need somebody on mac to bench before/after so i can know what it *actually* is
llfourn ah ok
samcv travis builds and passes fine on mac
llfourn I got a mac :)
samcv ok :)
would you be willing to test it out for me?
llfourn yep sure. 06:45
doing it now.
[Tux] in my world, there should never be an else after return/die/croak/exit
samcv ok do `'a' x 1000000000 ~ 'b' ~~ /b/; say now - INIT now;`
a few times on before/after
what? 06:46
llfourn builds new nqp/moar from master first 06:49
samcv thank you llfourn :-) 06:50
i'll be right back ~20min 06:53
llfourn builds samcv's branch 07:07
samcv ty kindly 07:17
llfourn BEFORE: 8.56313 AFTER: 4.00579 # on mac 07:19
nicely done!!!
samcv: gist.github.com/LLFourn/a77fbe3f6c...b3e50b2818 # the script fyi 07:21
samcv yay 07:23
sweet
very good
am i famous yet
llfourn hopes the fame doesn't destroy samcv 07:24
samcv heh
'a' x 1000000000 ~ 'bcd' ~~ /abc/; say now - INIT now 07:53
can you test that too llfourn
llfourn samcv: yup 07:59
samcv yay
maybe even a longer one. try 'bcd' and 'bcdefghijklmno'
want to try different needle sizes and see how they compare under the mac version 08:00
llfourn BEFORE: 9.18799 AFTER: 7.29706 # mac 08:03
samcv:^
samcv cool
llfourn (tries larger one)
samcv yeah it should be faster in all cases than before at minimum 08:04
ty
yeah checking for 'abc' is slower unless it's optimized because the whole string has 'a' in it :P 08:05
so kind of what i'd guess the thing that would show the least improvement compared to before
llfourn samcv: longer one is roughly the same, 9.26053, 7.37217 08:09
samcv coolio
llfourn still pretty big improvement. I'm excited to see how much it improves the parsing of the grammars in my project. 08:10
samcv so looks about 220% to 125% speed
yeah
llfourn samcv++
samcv NeuralAnomaly, status 08:11
NeuralAnomaly samcv, [✘] Next release will be in 1 day and 1 week. Since last release, there are 18 new still-open tickets (7 unreviewed and 0 blockers) and 162 unreviewed commits. See perl6.fail/release/stats for details
samcv hmm is that a challenge... 08:13
would be cool to have it be in the next release
llfourn is that the next release of Moar or rakudostar? 08:17
it's rakudostar nvm. I'll make sure to test it before then ;) 08:19
samcv moar
moar/rakudo/nqp
llfourn oh ok. 08:24
lizmat Files=1185, Tests=56472, 200 wallclock secs (11.98 usr 4.91 sys + 1192.92 cusr 115.29 csys = 1325.10 CPU) 08:33
re RT #131112: somehow we need to teach MoarVM that IterationSet is the same as an nqp::hash 08:46
apparently something like that exists for IterationBuffer, as that precomps without any issue
Geth rakudo/nom: 14251e4e20 | (Elizabeth Mattijsen)++ | src/core/Rakudo/Iterator.pm
R:It.AllButLastNValues can take lazy iterator

So no need to test laziness, or take the extra parameter for a potential error message
09:12
rakudo/nom: 1fea4951b5 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm
Allow for .head(*-N)

If you're interested in all values of an Iterable *except* the last N ones, you now can with the .head method:
   $ 6 'dd (^10.head(*-6)'
   (0, 1, 2, 3).Seq
... (8 more lines)
09:17
rakudo/nom: 6ef7b59a84 | (Elizabeth Mattijsen)++ | src/core/set_operators.pm
Simplify 1-arg candidates for (|) and (&)
10:09
Zoffix m: my @a = ^10; say @a.head: * 10:17
camelia (0 1 2 3 4 5 6 7 8 9)
Zoffix m: my @a = ^10; say @a.tail: *
camelia Cannot resolve caller Numeric(Whatever: ); none of these signatures match:
(Mu:U \v: *%_)
in block <unit> at <tmp> line 1
Zoffix Is the latter meant to work?
Ah, not yet
lizmat not yet indeed I guess
I'll add it 10:18
Zoffix Check it out: 10:20
m: use nqp; my $seq = gather { nqp::indexingoptimized("aaaaaaaaaaa" x 10000).take for ^200000 }; $seq[^30000].tail(1).say
camelia MoarVM panic: Memory allocation failed; could not allocate 110000 bytes 10:21
Zoffix m: use nqp; my $seq = gather { nqp::indexingoptimized("aaaaaaaaaaa" x 10000).take for ^200000 }; $seq.head(30000).tail(1).say
camelia (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…
Zoffix It's now possible to 1-shot index into the middle of a seq without caching it :)
I guess it was possible before. But I just now realized it :) 10:22
lizmat .tail would be even faster
as opposed to tail(1)
Geth rakudo/nom: 495f9708b3 | (Elizabeth Mattijsen)++ | src/core/set_operators.pm
Make (-) a multi

Start of optimization work on (-)
10:56
rakudo/nom: 49c0ab6419 | (Elizabeth Mattijsen)++ | src/core/set_operators.pm
Make Setty (-) Setty about 40x faster

  - add a candidate for it
  - that is highly optimized and written in nqp
  - prevents potentially expensive .WHICH calculation
  - so many real live situations could be faster still
lizmat m: my @a = ^10; dd @a.tail(Inf) 11:13
camelia This type cannot unbox to a native integer: P6opaque, Num
in block <unit> at <tmp> line 1
lizmat m: my @a = ^10; dd @a.Seq.tail(Inf)
camelia (0, 1, 2, 3, 4, 5, 6, 7, 8, 9).Seq
lizmat Seq's already supported .tail(*) and .tail(Inf)
m: my $m = (a => 10).Mix; my $n = (a => 20).Mix; dd $m (-) $n # expected ("a" => -10).Mix 11:27
camelia ().Mix
lizmat I can understand this behaviour for Bags, but the whole point of Mixes was that the weight could also be negative 11:29
Zoffix I'd expected -10 too 11:41
m: dd (:10a).Mix (&) (:a(-20)).Mix 11:44
camelia ("a"=>-20).Mix
Zoffix we do do negatives up in here 11:45
lizmat indeed
lizmat tries that behaviour and waits for any spectest breakage 11:46
breakage :-( 12:07
Zoffix lizmat: is it breakage in 6.c-errata or in tests that aren't part of the language yet? 12:09
lizmat not sure yet
looks like post errata, with errata I get quite a number of tests passing 12:13
argh, testing with wrong version 12:15
ok, no errors in errata, only passing todo's 12:17
Zoffix So the change's good then :) 12:18
lizmat well, in errata it wasn't tested 12:19
tests have been added since
Zoffix lizmat: which tests fail? 12:22
lizmat t/spec/S03-operators/mix.rakudo.moar (Wstat: 1792 Tests: 135 Failed: 7) 12:23
Failed tests: 29, 31, 33, 35, 130, 132, 134
AlexDaniel Zoffix: I have a feeling that you hold the record for the number of rejected tickets :)
(rejected by you I mean) 12:24
lizmat aaaahhh I think I know why
AlexDaniel … possibly the other way round for me…
lizmat no I don't :-)
Zoffix m: my $a = bag <blood love>; my $m = ("blood" => 1.1, "rhetoric" => 1, "love" => 1.2).Mix; dd ($a (|) $m) (-) ($m (&) $a) 12:26
camelia ("rhetoric"=>1,"blood"=>0.1,"love"=>0.2).Mix
Zoffix m: my $a = bag <blood love>; my $m = ("blood" => 1.1, "rhetoric" => 1, "love" => 1.2).Mix; dd ($m (&) $a) 12:27
camelia ("blood"=>1,"love"=>1).Mix
lizmat needs to think a bit about that with some fresh air
Zoffix m: my $a = bag <blood love>; my $m = ("blood" => 1.1, "rhetoric" => 1, "love" => 1.2).Mix; dd ($a (|) $m)
camelia ("rhetoric"=>1,"blood"=>1.1,"love"=>1.2).Mix
lizmat afk for an hour or so&
Zoffix m: my $a = bag <blood love>; my $m = ("blood" => 1.1, "rhetoric" => 1, "love" => 1.2).Mix; dd $a (^) $m
camelia ("rhetoric"=>1,"blood"=>0.1,"love"=>0.2).Mix
Zoffix lizmat: don't really see why making (-) go into negative with Mixes would fail that test :/ Since it doesn't. 12:28
AlexDaniel: definitely not. 75% of rejected tickets were rejected even before I came to Perl 6: 12:30
rt.perl.org/Search/Results.html?Fo...7__NBSP__%
27%2C%0A%27%3Csmall%3E__Requestors__%3C%2Fsmall%3E%27%2C%0A%27%3Csmall%3E__CreatedRelative__%3C%2Fsmall%3E%27%2C%0A%27%3Csmall%3E__ToldRelative__%3C%2Fsmall%3E%27%2C%0A%27%3Csmall%3E__LastUpdatedRelative__%3C%2Fsmall%3E%27%2C%0A%27%3Csmall%3E__TimeLeft__%3C%2Fsmall%3E%27&Order=DESC&OrderBy=Created&Page=3&Query=Queue%20%3D%20%27perl6%27%20AND%20Status%20%3D%20%27rejected%27&Rows=50
dat url
AlexDaniel
.oO( and the other 25% were rejected by you :P )
12:32
Zoffix: anyway, nothing wrong with that
Zoffix Nah
271 tests new IO::Path.extension has. All sorts of weird cases and all... 13:06
And the VERY FIRST time I tried to use it in real code encountered a bug :|
m: dd "foo.".extension("bar")
camelia No such method 'extension' for invocant of type 'Str'
in block <unit> at <tmp> line 1
Zoffix m: dd "foo.".IO.extension("bar") 13:07
camelia "foo..bar".IO(:SPEC(IO::Spec::Unix),:CWD("/home/camelia"))
Zoffix :)
Line 102 in Path.pm needs to be extended to nqp::unless(nqp::chars($ext), nqp::eqat($base, '.', nqp::sub_i(nqp::chars($base), 1))) 13:08
Geth rakudo/nom: 1b34ea64b7 | (Elizabeth Mattijsen)++ | 2 files
Allow Array|List.tail(*) and .tail(Inf)

For consistency with .head. Spotted by Zoffix++
13:12
rakudo/nom: a6d49b42a9 | (Elizabeth Mattijsen)++ | 2 files
Make SANITY a public method

  - we still have a performance issue with private methods in roles
  - need to be able to access its logic from &infix:<(-)>
Zoffix
.oO( Perl 6 now publicly offers SANITY! )
13:13
lizmat :-) 13:14
Geth rakudo/nom: 19cdcd122a | (Elizabeth Mattijsen)++ | src/core/set_operators.pm
Make Mixy (-) Mixy produce negative results

Removing an element for negative values is a bug, especially in the situation of a chained (-) where a later Mix with a negative value cannot "revive" a removed element. So on existence, just substract the value, and then at the end, remove the elements with value 0.
13:15
lizmat looks like test fail is in the use of (-) in a testing sub 14:07
Zoffix lizmat: rt.perl.org/Ticket/Display.html?id...xn-1450094 14:32
That's not bdfoy I'm telling to use IRC for discussions. Moreover, this is the third time he's asking support questions on the bug queue. The first two of which had a direct answer in the docs; the junctions one has an indirect answer: what would be the point of `one` junction if they collapsed the values? And all three would have an instant answer on IRC 14:34
"So please, treat everybody the same! :-)"
I am
lizmat Zoffix: point take :-) 14:37
*taken
looking at (^) tests, it looks like one set of fails is caused by improper expectation of (-) 14:39
but another set is actually caused by improper expectation of (^) wrt to Mixes 14:41
m: dd (a => 1.1).Mix (^) (a => 1.0).Mix
camelia ().Mix
lizmat is what I expect 14:42
because (^) is really only about keys / or existence of a key if you will
m: dd (a => 1.1).Mix (^) (b => 1.0).Mix
camelia ("b"=>1,"a"=>1.1).Mix
Zoffix c: HEAD~10 dd (a => 1.1).Mix (^) (a => 1.0).Mix 14:43
committable6 Zoffix, ¦HEAD~10: «("a"=>0.1).Mix»
Zoffix That's what I'd expect. And I think that's what abstr6ct implemented
lizmat docs state: Returns the symmetric set difference of all its arguments, i.e., a Set made up of all the elements that $a has but $b doesn't and all the elements $b has but $a doesn't 14:44
Zoffix ab5tract
lizmat so at least the documentation would be incomplete 14:45
wrt to Bags and Mixes
Zoffix And here's the PR: github.com/rakudo/rakudo/pull/934
lizmat if (^) would produce that, what would be the difference with (-) ?
Zoffix It ends with my asking to update the docs with no response
(a => 1.0).Mix (^) (a => 1.1).Mix would still produce ("a"=>0.1).Mix while (-) would produce ("a"=>-0.1).Mix 14:46
c: HEAD~10 dd (a => 5).Bag (^) (a => 10).Bag
committable6 Zoffix, ¦HEAD~10: «("a"=>5).Bag» 14:47
Zoffix m: dd (a => 5).Bag (^) (a => 10).Bag
camelia ("a"=>5).Bag
Zoffix Yeah, it still works that way for Bags
If both have elems, it takes largest value and subtracts the smaller ones from it. Which for sets has the effect of removing the item, since all the weights are 1 14:48
Oh and here's the first PR, specifically this comment: github.com/rakudo/rakudo/pull/911#...-257941267 14:49
lizmat m: dd (a => 6).Bag (^) (a => 10).Bag
camelia ("a"=>4).Bag
lizmat m: dd (a => 10).Bag (^) (a => 6).Bag
camelia ("a"=>4).Bag
lizmat m: dd (a => 10).Bag (-) (a => 6).Bag
camelia ("a"=>4).Bag
lizmat m: dd (a => 6).Bag (-) (a => 10).Bag 14:50
camelia ().Bag
Zoffix m: dd (a => 10).Bag (^) (a => 60).Bag (^) (a => 30).Bag
camelia ("a"=>20).Bag
lizmat ok, so (^) takes highest value, substracts all the others 14:51
Zoffix Yeah. 14:52
lizmat and (-) takes first value and substract all the others
Zoffix Yes.
lizmat for sets that doesn't matter
there's no difference
ok, so some of the tests are really bogus, because they implement the value to test in the same way as the code in the setting 14:54
Zoffix Between the ops? There's still the diff for sets: 14:55
m: dd set() (-) set(<a>)
camelia set()
Zoffix m: dd set() (^) set(<a>)
camelia set("a")
lizmat ah, good point :-)
hmmm... looks like I need to take on (^) before continuing with (-) 14:56
Zoffix: do you consider 19cdcd122a8b08dc7 to be ok or not ? 15:00
Zoffix lizmat: yeah OK. 15:06
m: dd (a => 2).Mix (^) (a => 10).Mix (^) (a => 2).Mix
camelia Type check failed in binding to parameter 'elems'; expected Any but got Mu (Mu)
in block <unit> at <tmp> line 1
Zoffix c: HEAD~10 dd (a => 2).Mix (^) (a => 10).Mix (^) (a => 2).Mix
committable6 Zoffix, ¦HEAD~10: «("a"=>6).Mix»
Zoffix So that ^ makes sense to me, but....
c: HEAD~10 dd (a => 8).Mix (^) (a => 10).Mix (^) (a => 8).Mix
committable6 Zoffix, ¦HEAD~10: «("a"=>6).Mix»
Zoffix wat?
lizmat 16 - 10 15:07
(8+8)-10
Zoffix Wouldn't then the first one be (2+2)-10 = -6?
Ahhhh 15:08
(8, 10) => (10-8) => 2; (2, 8) => (8-2) => 6
c: HEAD~10 dd (a => 8).Mix (^) (a => 10).Mix (^) (a => 3).Mix 15:09
committable6 Zoffix, ¦HEAD~10: «("a"=>1).Mix»
Zoffix cool
lizmat that is yuck
Zoffix :)
lizmat m: dd (a => 8).Mix (^) (a => 10).Mix (^) (a => 8).Mix 15:10
camelia Type check failed in binding to parameter 'elems'; expected Any but got Mu (Mu)
in block <unit> at <tmp> line 1
lizmat ah, I borked that
so, we expect a => -6 on that last one, right ? 15:11
aka 10 - 8 - 8
c: HEAD~10 dd (a => 8).Mix (^) (a => 10).Mix (^) (a => 10).Mix 15:12
committable6 lizmat, ¦HEAD~10: «("a"=>8).Mix»
lizmat wat ?
Zoffix lizmat: -6 would be my intutive expectation yeah: take largest value, subtract all of the rest out of it 15:13
(8, 10) => 2; (2, 10) => 8
lizmat ah, yes 15:14
Zoffix c: HEAD~10 dd set(<a>).Bag (^) set(<a>).Bag (^) set(<a>).Bag
committable6 Zoffix, ¦HEAD~10: «("a"=>1).Bag»
Zoffix But then... would that end up as empty?
1-1-1; vs (1-1) => 0; (1-0) => 1
¯\_(ツ)_/¯ 15:15
lizmat the coercion to bag is => 1
Zoffix Maybe TimToady has an idea
lizmat yeah, I'm thinking about reverting the last few commits
Zoffix c: HEAD~10 dd set(<a>) (^) set(<a>) (^) set(<a>)
committable6 Zoffix, ¦HEAD~10: «set()»
Zoffix This does end up empty. So *shrug*
NeuralAnomaly: status 15:17
NeuralAnomaly Zoffix, [✘] Next release will be in 1 day and 1 week. Since last release, there are 17 new still-open tickets (6 unreviewed and 0 blockers) and 170 unreviewed commits. See perl6.fail/release/stats for details
Geth rakudo/nom: 904db7a113 | (Elizabeth Mattijsen)++ | src/core/set_operators.pm
Revert work on (-) for now

Until we have clarity on how (^) and (-) should work on Mixes and Bags.
15:18
lizmat hmmm... I'm wondering whether the chained behaviour of (^) and (-) isn't really the result of codegen 15:20
TimToady is too busy thinking about how to unify Cursor and Match to have any ideas... 15:28
Zoffix We just need to come up with behaviour for Mixes that degenerates into Bag and Set cases. 15:29
lizmat ok, no worries: $m (-) $m (-) $m and [(-)] $m,$m,$m execute the same way 15:32
TimToady do we allow antiballs in a Bag currently? seems to me if you want negative Mix values you need to allow negative Bag values...but then the problem becomes negative Set values, which set theory doesn't have
lizmat TimToady: I think we decided Bags should never have negative values 15:33
if you want negative Bag values, use a Mix with integer weights
TimToady well, but that's a semantic discontinuity, if you're looking for degenerate behavior to be the same... 15:34
so it seems like there has to be a discontinuity somewhere, we just need to be clear where it is
lizmat perhaps Bag (-) Bag should return a Mix
? 15:35
Zoffix "take largest value and subtract the rest" fits.
lizmat for (^) right?
and for (-): take first value and subtract the rest
Zoffix Right
TimToady maybe we need to distinuish signed Mixys from unsigned Mixys...
Zoffix And then (^) is symmetrical version of (-), where it doesn't matter how the args are ordered, you always get the same result. 15:36
m: dd (:a(-10)).Mix.Bag
camelia ().Bag
TimToady then we'd have UBag and UMix to represent the versions that clamp to positive 15:37
lizmat
.oO( I won't say "yuck" )
Zoffix And USet? :)
TimToady and Set is the same as USet :)
or we let people say Mixy[UInt] or so to get unsigny ones, or Mixy[Int] to get signy ones, whatever we pick for the default 15:40
Zoffix But then there's still this discontinuity that we currently have for Mix -> Bag; (:20a).Mix (^) (:30a).Mix (^) (:15a).Mix => (:a(-5)).Mix (:20a).Bag (^) (:30a).Bag (^) (:15a).Bag => ().Bag, so then if we're adding UBag, that'd be (:a(-5)).Bag; but then set(<a>) (^) set(<a>) (^) set(<a>) would need to end up as (:a(-1)).Set;
TimToady well, probably need another param for the key type eventually
this is probably an area where it's mathematically provable that we can't have our cake and eat it too :) 15:42
lizmat isn't that just moving the problem from Bag (^) Mix to Mix(Uint] (^) Mix ?
Zoffix Or we could leave the stuff the same and just not have negatives in Bags. (:20a).Bag (^) (:30a).Bag (^) (:15a).Bag => ().Bag would be the right answer an
lizmat
.oO( guess I picked the wrong time to be optimising set operators )
15:43
TimToady well, I think standard bag theory doesn't have negatives
Zoffix The -1 => nothing is the degenerativeness of a Mix -> Bag conversion to me, same as 1.1 -> 1
Is there standard mix theory?
lizmat pictures Tom Cruise 15:44
Zoffix heh "math bag theory" gives me big bang in google. It auto-suggests without even giving me an option to opt out of it :\
TimToady or maybe we want to clamp Mix like Bag, and then define something beyond Mix that also allows negatives, but throws them away when you downcast
lizmat but Mix has allowed negative weights since 6.c 15:45
TimToady and we can decide to leave it that way, recognizing that we're really trying to do two different things with it, I suppose 15:46
and Mix subtraction is an entirely different beasty than Bag subtraction
or is it "beastie"? 15:47
darn English orthography...
.oO(orthographie?)
Zoffix :P
lizmat summary: (^) will take largest value and subtract all of the others 15:49
Zoffix +1
lizmat (-) will take first value and subtract all of the others
only at the end of a chain of subtractions, will the elements with weight 0 be removed 15:50
TimToady if we're going to allow negatives in Mixes, we should make sure there's a handy method to remove negatives if positive clamping is wanted 15:52
lizmat so algorithmically, the difference between the two is that for (^) we first create a hash with the highest value * 2
as opposed to (-) where we just take the first
TimToady: we *have* been allowing negative weights in Mixes since way before Christmas 15:53
TimToady so do we have such a method?
lizmat no, but one would be easily created 15:54
Zoffix m: dd (:a(-10), :42b).Mix.grep(*.value > 0).Mix
camelia ("b"=>42).Mix
TimToady I guess that has to be done differently for Mix vs MixHash
MixHash could remove negatives in place
lizmat yeah 15:55
TimToady a Mix method would have to return a new Mix
lizmat so, name bikeshedding commences :-)
.positively
Zoffix .u
yoleaux2 Search for a Unicode character by codepoint, name, or raw character
TimToady well, or it always returns a new one, and you use .= on MixHash to do it in place
lizmat .Mix(UInt) ? 15:56
Zoffix But 1.5 isn't UInt 15:57
lizmat ah, yeah
TimToady in general, our coercers have not taken extra args
in general I'd prefer if type parameterizion stays in roles
Zoffix IMO we don't need a method unless we're adding a UMix type that will reject negatives same as Bag does. .grep(*.value > 0) isn't that much typing
lizmat Zoffix: but that explodes the combinatorial of Mix Umix Bag Set and its combinations wrt set operators 15:58
TimToady
.oO(MixyBridge...)
15:59
Zoffix How? Set < Bag < UMix < Mix; One fits a subset of the next one.
UMix (^) Mix returns a Mix
lizmat hmmm... UMix could actually be implemented as a subclass of Mix with its own SANITY method 16:00
Zoffix I dunno; is there any user demand for this stuff?
TimToady good question
lizmat well, one of the reasons I'm working on this is to make set ops like not be ultra, ultra slow so nobody wants to use them 16:01
TimToady it's not all that hard to write one's own mix to umix coercer, really
so I'm okay with leaving the current types with the current(ish) semantics 16:02
and we can leave enforcement of positive mixes in the user's operational sphere 16:03
unless we decide people are going to define .positively in the wrong way somehow
lizmat but (-) and (^) would still get unexpected behaviour for Mix.positively mixes if they're still Mixes 16:04
TimToady well, people would have to know when to apply it, and when not to
lizmat for a UMix (a => 10).UMix (-) (a => 20).UMix would be UMix() 16:05
but would be (a => -10).Mix for Mixes
TimToady yes, I'm not against adding a UMix type, though that's kind of an ugly name...
lizmat RealBag 16:06
:-)
TimToady but I'm also fond of not having combinatorial explosions :)
.oO(that person is a RealBagHash!)
16:07
Geth rakudo/nom: 15a25da899 | (Zoffix Znet)++ | src/core/IO/Path.pm
[io grant] Fix ambiguity in empty extension vs no extension

When we go to replace an extension, an empty string extension indicates both, lack of extension and a 1-part empty-string extension. Add an extra check for whether the basename ends with a dot to detect the latter.
Fixes ".".IO.extension("doc") ending up as "..doc" instead of just ".doc"
roast: 2f09f182cf | (Zoffix Znet)++ | S32-io/io-path-extension.t
[io grant] Fix incorrect test

  "." has a 1-part empty extension, so correct the test that expects
replaced version to be "..doc"
16:09
TimToady unfortunately, the "mix" metaphor most naturally fits with the unsigned semantics, but I'm not sure I'm willing to move the signed semantics to a different type
Geth roast: 305f206551 | (Zoffix Znet)++ | S32-io/io-path-extension.t
[io grant] Test empty-string extensions in IO::Path.extension

Rakudo fix: github.com/rakudo/rakudo/commit/15a25da899
TimToady though that is the sort of thing we can think about breaking in a language upgrade 16:10
Zoffix Can we though? From briefly scanning the upgrade doc, replacing the types or making their methods do different things is a hard thing to do.
TimToady but only if we add a new type and deprecate any negative Mixes we see 16:11
Zoffix huggable: versioning
huggable Zoffix, gist.github.com/jnthn/c10742f9d51da80226fa
TimToady we can't always be additive in a 100-year language, so some deprecation cycles will have to be allowed 16:12
Zoffix Great :D
TimToady but certainly additive is preferable when we can get away with it
jnthn I'd hope we can at least manage additive for a few years, to give us the breathing space we need to figure out non-additive. :) 16:13
yoleaux2 6 Apr 2017 13:06Z <lizmat> jnthn: looking at github.com/rakudo/rakudo/blob/nom/...ble.pm#L82 , I'm not sure how Iterable.lazy actually works. Feels to me at least the comments are incorrect
6 Apr 2017 13:14Z <lizmat> jnthn: I also don't grok why Iterable.lazy is not initialized with the iterator to start with
6 Apr 2017 15:13Z <Zoffix> jnthn: I'd like to add nqp::p6int_I(); that truncates an Int to fit into `int`. There are many places where super large values don't make sense, but to give PDG errors we stick to Int nqp ops, and lose some perf. With nqp::p6int_I() we'll truncate all super large Ints into int and use the int p6 ops on them. Do you see problems with adding such a thing? In .extension() using int instead of Int gives a
6 Apr 2017 15:13Z <Zoffix> jnthn: ~30% perf boost
6 Apr 2017 15:17Z <Zoffix> jnthn: or rather... in my bench: using Ints is 2x slower than old method; using ints is 1.66x slower; whatever the diff there is is the benefit of ints that I want to capture.
jnthn o.O
lizmat :-)
TimToady I'm okay with leaving Mix as is, anyway, and we can slide in a different type for umix/rbag if we decide it's warranted 16:14
lizmat m: dd (a => 1).Mix (-) (a => 2).Mix # do we agree this is wrong ? 16:15
camelia ().Mix
lizmat that it should be (a => -1).Mix ?
TimToady how long has that been broken? 16:16
lizmat quite long I'm afraid
TimToady and nobody's complained? there's a data point... :D
lizmat TimToady: the implementation is *ultra* slow
it's not for nothing that some improvements I've made are like 80x faster 16:17
the data point could be as much as people don't use slow systems
b: dd (a => 1).Mix (-) (a => 2).Mix
bisectable6 lizmat, On both starting points (old=2015.12 new=b62d1a7) the exit code is 0 and the output is identical as well
lizmat, Output on both points: «().Mix»
TimToady it's still possible that nobody has used Mixes with the intention of having negatives 16:18
lizmat true 16:19
Zoffix lizmat: yeah, I agree. Both that it should be :a(-1) and that people avoided them due to slowness (it was a direct comment on my advent mixies/baggies article)
lizmat and the 80x improvement is for objects with fast .WHICH methods 16:20
if you would create sets of hashes, it would probably be even order of magnitudes slower 16:21
because .WHICH would get recalculated many times over 16:22
any Mix{} or Mix.AT-KEY() would imply a .WHICH calculation
dinner& 16:37
jnthn .tell lizmat I don't see anything immediately wrong in the comment. Note that the hiding of push-at-least is implicit (the method it gets from the role just delegates to push-exactly) 16:44
yoleaux2 jnthn: I'll pass your message to lizmat.
jnthn .tell lizmat I guess it only obtains the iterator when needed as part of its laziness. 16:45
yoleaux2 jnthn: I'll pass your message to lizmat.
Zoffix fwiw lizmat pointed out that my nqp::p6int_I op won't get speshed and so won't get perf boost I see, so I'm not so keen on adding it anymore.
But would be nice to have something nicer than stuff like this: 16:46
m: ^10 .head: *-Inf
camelia This type cannot unbox to a native integer: P6opaque, Num
in block <unit> at <tmp> line 1
jnthn When would you actually want to truncate silently?
Zoffix jnthn: like IO::Path.extension. You won't have more than 2**63-1 extension parts 16:47
"x" xx 2**63-1 stuff like this maybe?
jnthn We've had so many RTs that complain about "I fed this super unreasonably use value to foo and it overflowed/truncated to some special number" that I really don't feel like introducing an op that explicitly makes that happen :P 16:48
*unreasonably huge
Well, the policy we've gone with so far is "if it's too big just throw"
So just use nqp::unbox_i, which I think will throw on ridiculously big
And is otherwise pretty efficient 16:49
Zoffix jnthn: those RTs would be solved by the truncation. The tickets were: I used super large number and it becomes negative; or I've used this unreasonbly large Int and it threw an LTA error
jnthn Yes, and we've largely fixed those by making nqp::unbox_i throw a decent error, no?
Plus various other such cases
m: my int $i = 2 ** 65
camelia Cannot unbox 66 bit wide bigint into native integer
in block <unit> at <tmp> line 1
Zoffix And IIRC all of these LTA errors were avoided by switching to using slow, big_I path
At least, that's what I done in .extension
jnthn You only need to unbox the value once at entry to the method, though? 16:50
Zoffix Inf alone makes just-unboxing tough
since it isn't an int
m: use nqp; nqp::unbox_i(Inf)
camelia This type cannot unbox to a native integer: P6opaque, Num
in block <unit> at <tmp> line 1
jnthn Adding an unbox_I isn't going to help on that front 16:51
Or whatever you wanted to call it :)
I'd just make that case fall out of multi-dispatch, though
Zoffix nqp::p6int_N() would :) It would turn it into 2**63-1 :D
I guess I need to catalogue all these usecases first :) 16:52
jnthn So have a candidate that works on Num or so, and does the extra checks there and delegates to an Int candidate 16:53
And for the common case where an Int is passed, then you don't have to execute that code dealing with Num and Inf at all
Zoffix That's what I did for .extension yesterday: github.com/rakudo/rakudo/blob/nom/...#L348-L373 16:54
And .extension(:parts(1..1)) is like 10x slower than .extension(:parts(1))
m: my $p = "foo.txt".IO; for ^100_000{ $ = $p.extension: :parts(1) }; say now - INIT now 16:55
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing block (whitespace needed before curlies taken as a hash subscript?)
at <tmp>:1
------> 3 ^100_000{ $ = $p.extension: :parts(1) }7⏏5; say now - INIT now
expecting any of:
b…
Zoffix m: my $p = "foo.txt".IO; for ^100_000 { $ = $p.extension: :parts(1) }; say now - INIT now
camelia 0.796016
Zoffix m: my $p = "foo.txt".IO; for ^100_000 { $ = $p.extension: :parts(1..1) }; say now - INIT now
camelia 5.580508
Zoffix m: my $p = "foo.txt".IO; for ^100_000 { $ = $p }; say now - INIT now 16:56
jnthn Are people liable to actually write 1..1? :)
camelia 0.0647822
Zoffix m: say (5.52/.73)
camelia 7.561644
Zoffix 7.5x
jnthn
.oO( They aren't if it's 7.5x slower :P )
Zoffix :) 16:57
But anyway, don't want to add any ops anymore, but will keep an eye on when this clash of HLL vs. native types occurs, to see if there's a Better Way™ 16:58
jnthn fwiw, && and || compile into nqp::if and nqp::unless
So your nqp::if nest at the start of the routine could be written with && instead of nqp::if for no loss, and a readability win :) 16:59
Zoffix jnthn: ah, thanks.
jnthn yay, pizza is here :) 17:00
bbl
AlexDaniel \o/ more rejected tickets 17:10
:)
Zoffix m: say so any("flarg",42)».Numeric 17:17
camelia True
Zoffix AlexDaniel: I'm just gonna ignore it. 17:18
Clearly I'm doing something wrong every time I interface with humans, so I'll stick to code.
And an AI robot who'll keep me company in here \o/
AlexDaniel Zoffix: I was referring to another ticket of mine which was closed not so long ago by jnthn
or, rejected by jnthn but closed by [Coke] :) 17:19
Zoffix AlexDaniel: ah, I see
AlexDaniel: putting a dent into my record? :)
AlexDaniel heh
but it makes sense. As the language is getting more mature, design decisions are sorted out and clarified, so more rejected tickets because of a clearer picture 17:20
I wonder if you graph the number of rejections over months, will you see it going up like crazy? :) 17:21
Zoffix m: say any("flarg",42)».Numeric.WHAT 17:22
camelia (Junction)
Zoffix Is there a way to make it print out the types inside the junction?
Oh, right
m: say sub ($_) { .^name }( any("flarg",42)».Numeric ) 17:23
camelia any(List, List)
Zoffix .. list? :S
m: say sub ($_) { .^name }( any("flarg",42).Numeric )
camelia Cannot resolve caller Numeric(Str: ); none of these signatures match:
(Mu:U \v: *%_)
in block <unit> at <tmp> line 1
Zoffix m: say sub ($_) { .^name }( +any("flarg",42) )
camelia any(Failure, Int)
Zoffix Success \o/.
AlexDaniel m: say Numeric(any(52,42)) 17:24
camelia Cannot invoke this object (REPR: Uninstantiable; Numeric)
in block <unit> at <tmp> line 1
AlexDaniel I wonder if this should work
Zoffix m: try say sub ($_) { .^name }( any("flarg",42) == 42 )
camelia ( no output )
AlexDaniel or, at least, not give an error like this?
Zoffix m: try { say sub ($_) { .^name }( any("flarg",42) == 42 ) } 17:25
camelia ( no output )
Zoffix m: try { say sub ($_) { .^name }( any("flarg",42) == 42 ); CATCH { default { .resume } } } 17:26
camelia This exception is not resumable
in block at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix m: any("flarg",0).Numeric 17:29
camelia Cannot resolve caller Numeric(Str: ); none of these signatures match:
(Mu:U \v: *%_)
in block <unit> at <tmp> line 1
Zoffix AlexDaniel: well, I would've expected ^ that to work :/
AlexDaniel Zoffix: that's a method called on a junction, no? 17:30
Zoffix AlexDaniel: which propagtes it into all elements, no?
m: dd any("flarg",42).uc 17:31
camelia any("FLARG", "42")
Zoffix m: dd any("flarg",42).flip
camelia any("gralf", "24")
AlexDaniel Zoffix: but if so, how would you call methods of Junction?
hm
m: say Junction ~~ Cool
camelia False
Zoffix AlexDaniel: you define them in Junction.pm, I guess. Rather verbose .Bool and .defined are there 17:32
AlexDaniel m: say any(52.5,42.5).Int 17:33
camelia any(52, 42)
AlexDaniel so you can do .Int but not .Real or .Numeric
Zoffix method AUTOTHREAD is that what does all the magic?
Or CALL-ME? github.com/rakudo/rakudo/blob/nom/...on.pm#L221
m: class { method CALL-ME (|) { say "here" }; method AUTOTHREAD { say "there" } }.meows
camelia No such method 'meows' for invocant of type '<anon|78278192>'
in block <unit> at <tmp> line 1
Zoffix :(
Looks like all the magic is in the binder that passes stuff through Junction.AUTOTHREAD 17:37
AlexDaniel m: say 42; say +any(‘abc’, 42.5) 17:41
camelia 42
===SORRY!===
Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5abc' (indicated by ⏏)
AlexDaniel ok, that's not good
Zoffix Why not?
Missing line number? 17:42
AlexDaniel Zoffix: run time ===SORRY!===, no line number
Zoffix Ah
AlexDaniel mch: say 42; say +any(‘abc’, 42.5)
committable6 AlexDaniel, ¦2015.12,HEAD(b62d1a7): «42␤===SORRY!===␤Cannot convert string to number: base-10 number must begin with valid digits or '.' in '03⏏04abc' (indicated by ⏏) «exit code = 1»»
Zoffix files the Numeric(Str:) one
Junction bug day \o/
AlexDaniel ya
maybe we can also make them faster along the way
Zoffix heh 17:43
AlexDaniel ok RT #131118 17:48
… I mean #RT 131119
Zoffix toggles the power switch on synopsebot 17:50
\o/
RT#131119
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=131119
Zoffix And mine is rt.perl.org/Ticket/Display.html?id=131120
Zoffix & for the rest of the day 17:51
Geth rakudo/nom: 7ba2fc5a0e | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm
Make error on .head(*-Inf) less LTA

Spotted by Zoffix++
17:53
AlexDaniel m: say (25, 42, 50).tail(*-2) 18:03
camelia Cannot resolve caller Numeric(WhateverCode: ); none of these signatures match:
(Mu:U \v: *%_)
in block <unit> at <tmp> line 1
lizmat AlexDaniel: it's .head, not .tail 18:10
yoleaux2 16:44Z <jnthn> lizmat: I don't see anything immediately wrong in the comment. Note that the hiding of push-at-least is implicit (the method it gets from the role just delegates to push-exactly)
16:45Z <jnthn> lizmat: I guess it only obtains the iterator when needed as part of its laziness.
AlexDaniel lizmat: d-oh! Thanks! 18:11
m: say (25, 42, 50).head(*-2)
camelia (25)
lizmat the d-oh was on me last night :-) 18:12
AlexDaniel commit: HEAD say (25, 42, 50).head(*-2)
committable6 AlexDaniel, ¦HEAD(b62d1a7): «Cannot resolve caller Real(WhateverCode: ); none of these signatures match:␤ (Mu:U \v: *%_)␤ in block <unit> at /tmp/mZtldtwblK line 1␤ «exit code = 1»»
lizmat m: say (^Inf).head(* - 5).[^10]
camelia (0 1 2 3 4 5 6 7 8 9)
AlexDaniel slaps committable6
what the hell, why is it stuck on some really old commit 18:13
Zoffix m: say (25, 42, 50).tail(3-2)
camelia (50)
Zoffix m: say (25, 42, 50).tail(*)
camelia (25 42 50)
Zoffix m: say (25, 42, 50).tail(*-2)
camelia Cannot resolve caller Numeric(WhateverCode: ); none of these signatures match:
(Mu:U \v: *%_)
in block <unit> at <tmp> line 1
Zoffix m: say (25, 42, 50).head(2) 18:14
camelia (25 42)
Zoffix
.oO( .tail(*-2) => "all but the first two" )
lizmat yeah, was thinking that just now
Zoffix &
lizmat makes sense I guess
AlexDaniel commit: 7ba2fc5a0e92 say (25, 42, 50).head(*-2) 18:15
committable6 AlexDaniel, ¦7ba2fc5: «Cannot find this revision (did you mean “34a4c0a”?)»
AlexDaniel committable6: I'll kill you :S
committable6 AlexDaniel, ¦I'll: «Cannot find this revision (did you mean “all”?)»
cowens What are CompUnit::Repository::AbsolutePath<140211490473264>, CompUnit::Repository::NQP<140211475454056>, CompUnit::Repository::Perl5<140211475454096>? I assume they are additional ways to get modules, but do they have file paths? 18:17
TimToady is there any way in nqp to do the equivalent of: constant ThisType = ThatType; ? 18:19
jnthn: ^^
(trying to get around some bootstrapping issue on my experiment in cursor/match unification) 18:20
samcv good morning everyone
TimToady very nearly good afternoon :) 18:21
perlnecrohacker gm 18:31
[Coke] o/
perlnecrohacker \m/ 18:32
jnthn TimToady: Um...trying to think of one 18:33
TimToady: You just need a way to alias a symbol to a value?
(At compile time)
TimToady: I think the simplest way is for me to just implement it :P 18:37
TimToady well, the specific case is that I would like to make NQPMatch an alias to NQPCursor, or vice versa, because I have an nqp where those really are the same thing, and compiles up all the way through to trying to compile the P6 setting before it blows sky high :) 18:42
but I think turning .MATCH into (close to) a no-op is going to be much faster in the long run 18:43
though for now the Cursor is just being a Capture in addition to cursoring, and .MATCH just builds the array/hash into the capture instead of the match object
jnthn Will my constant do or do you need package scoped? 18:44
TimToady (the cursor still has a stub $!match because certain things depend on it algorigthmically, but that is likely to change to a boolean, rather than an object that does nothing but return true :)
Geth roast: 6aa2290b4b | (David Warring)++ | 2 files
add fudged test for RT #131112
18:45
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=131112
TimToady well, I suppose that depends on where stage1 is looking up the old names
I can certainly try 'my constant' to see if it's enough
eventually I'd like to populate the "capture" inside the cursor/match lazily, but nqp isn't up to that yet 18:47
so it still has to build it at MATCH time for now
when we do get it lazily, we can also get rid of the artificial distinction of throwing in {} randomly to force .MATCH calls
jnthn I'll add my and our :) 18:48
lizmat jnthn: also, if you could give me a pointer on: rt.perl.org/Ticket/Display.html?id=131112 18:49
I think that's a release blocker atm 18:50
jnthn Ah
Yeah, we've not used that as a standlone REPR before I guess 18:51
TimToady currently nqp runs fine with only NQPCursor, and no NQPMatch, but I'd think I'd like to unify under the Match name rather than the Cursor name, and that's where I run into the bootstrap issue
samcv jnthn, what version of MSVC should i download which is whatever the earliest we support 18:52
want to try compiling on windows
Geth nqp: 4bb9e64157 | (Jonathan Worthington)++ | 2 files
Quick, partial, implementation of `constant`.

  * Needs writing as `my constant A := B` or `our constant C := D`
  * Only supports having a typename on the RHS so far
18:53
jnthn TimToady: See if ^ will help
TimToady \o/
lizmat jnthn: nqp::hash() precomps fine afaics
jnthn Sure
This is an...interesting bit of legacy :)
Should be easily addressed 18:54
lizmat hmmm 18:55
jnthn Yeah, src/6model/reprs/MVMHash.c needs the serialize and deserialize functions implemented
Mildly surprised that didn't happen already :)
lizmat well... if that happens, we can actually precomp quite a bit of initialization in the setting as well 18:56
or am I missing something there ?
(BTW, I was wrong about nqp::hash precomping ok()
$ cat Tst.pm 18:57
class Tst { use nqp; our constant X = nqp::hash }
$ perl6 -I. -MTst -e 'say Tst::X'
===SORRY!===
Missing serialize REPR function for REPR VMHash (BOOTHash)
jnthn Yeah, can -e it too 18:59
perlnecrohacker perl6 -I. -MTst -e 'say Tst::X'
===SORRY!===
Could not find Tst at line 1 in:
/home/perlowcoder
/root/.perl6
/root/.rakudobrew/moar-nom/install/share/perl6/site
/root/.rakudobrew/moar-nom/install/share/perl6/vendor
/root/.rakudobrew/moar-nom/install/share/perl6
CompUnit::Repository::AbsolutePath<-1172939160>
CompUnit::Repository::NQP<-1173688368>
CompUnit::Repository::Perl5<-1173688344>
jnthn If you --target=mbc
lizmat jnthn: so do you tnink we will see nqp::hash precomp support in the next week? 19:00
otherwise, I will need to take some action :-(
samcv quick! what msvc is our oldest supported! somebody 19:01
jnthn samcv: I don't know that we've declared any official policy on that 19:04
samcv so what should i download
jnthn I've got Microsoft (R) C/C++ Optimizing Compiler Version 17.00.61030 for x64 if that helps :)
samcv so what msvc version is it 19:05
i am very confused about this 19:06
and does dling the visual C++ also build C?
jnthn Yeah, it compiles C too 19:08
TimToady jnthn: unfortunately, it just blows up earlier since stage1 doesn't know 'my constant', oh well
samcv ok i think that may be 2012?
jnthn TimToady: You can always update the bootstrap :)
samcv based on what this says en.wikipedia.org/wiki/Microsoft_Vi...C_versions
since you have 17 i'm guessing that's _MSC_VER 1700
jnthn samcv: Yes, that appears to be it :)
Sorry, forgot the numbers don't map usefully to the thing they label it as 19:09
samcv well i can get 2017 community for free. but they won't let me get earlier without subscription 19:10
well found 2015 build tools landinghub.visualstudio.com/visual-...uild-tools maybe that's what i need. 19:11
well. gonna go to windows computer and try to install i think maybe i found build tools 2013. so maybe that will have what i need 19:13
jnthn lizmat: github.com/MoarVM/MoarVM/commit/9653dc6aa1 should do it 19:15
lizmat whee...
ok if I bump Moar and nqp ?
jnthn lizmat: Yes, but please can you spectest it first?
Need to visit the shop before it closes :) 19:16
lizmat ack
jnthn Well, set off a spectest here too, but it won't be done before I go :)
bbiab :)
samcv kk gonna try building ona 32-bit machine 19:20
strawberry perl, git, installing msvc. then that should be what i need right?
lol @strawberry perl can't be installed in a directory with spaces :O 19:21
Geth rakudo/nom: a4b30dc7d1 | (Elizabeth Mattijsen)++ | 3 files
Make sure we get an IterationSet when assigning

If a (Set|Bag|Mix)Hash was created empty, and was later assigned to it, it would create an internal nqp::hash instead of an IterationSet, causing havoc down the line.
19:30
samcv oh it used gcc 19:35
but idk where gcc came from. or what itstalled it. but that wasn't what i wanted. and it didn't actually compile properly
Geth rakudo/nom: de983bc4dd | (Elizabeth Mattijsen)++ | src/core/Mix.pm
Make Mix.MixHash coercion about 25x faster

For a 10 element Mix.
19:36
roast: a906ddc387 | (Elizabeth Mattijsen)++ | S11-modules/require.t
Unfudge now passing todo
20:00
Zoffix m: dd [\<] 8, 9, 2 20:08
camelia (Bool::True, Bool::True, Bool::False).Seq
Zoffix I thought the triangle reduce used previous value, so it'd be True < 2 for the last one, which is True, not false 20:09
m: dd [\+] 8, 9, 2 20:10
camelia (8, 17, 19).Seq
Zoffix m: dd True < 2 20:11
camelia Bool::True
Zoffix m: dd [\(^)] (:10a).Mix, (:30a).Mix, (:20a).Mix 20:12
camelia (("a"=>10).Mix, ("a"=>20).Mix, ().Mix).Seq
Zoffix m: dd [\<=] 8, 9, 2 20:13
camelia (Bool::True, Bool::True, Bool::False).Seq
Zoffix shrugs 20:14
lizmat this could be a bug
otoh, <= coerces Bool to 0|1 20:15
AlexDaniel commit: 7ba2fc5a0e92 say (25, 42, 50).head(*-2) 20:30
committable6 AlexDaniel, ¦7ba2fc5: «(25)»
AlexDaniel ok, fixed
Zoffix lizmat: yeah, it does. So the True from 8 <= 9 is treated as 1 and 1 <= 2 is True not False that it gives for the last value 20:36
lizmat AlexDaniel: so is there still something I should look at performance wise ?
Zoffix But maybe it's normal, so that it gives right ansfer for the final result 20:37
Basically, I came upon this when thinking of using the (^) op in there. 'cause it has to know of the entire chain to give right result innit? 20:38
If we make it subtract stuff from largest elements
lizmat not for (^) per se, but for (-) yes
Zoffix Oh yeah, for (-) too :/ 20:40
AlexDaniel lizmat: possibly, but not sure if I can propose something :(
Zoffix m: dd [\(-)] set(<a>), bag(<a b>), (:a(-20), :b(2), :c).Mix 20:42
camelia (set("a"), ().Bag, ().Mix).Seq
Zoffix m: dd [\(-)] set(<a>), bag(<a a a b>), (:a(-20), :b(2), :c).Mix 20:45
camelia (set("a"), ().Bag, ().Mix).Seq
Zoffix Right, 'cause it'd be -22 for 'a', but since Bag part would not do the negative the final result would be onpy -20 for 'a' 20:46
SmokeMachine: see now why I was hesitant to say [\...] would always return final item same as […]? :) Sometimes it can't, turns out 20:49
lizmat hmmm.. did we lose Geth? 20:55
I did 2 commits since github.com/rakudo/rakudo/commit/de983bc4dd
Zoffix: perhaps Geth needs a kick ? 20:57
Zoffix: can we "replay" the last 2 commits ? 20:59
rakudo commits ?
Zoffix weird. It was still connected and responsive (showed you talk in the log). Maybe GitHub's webhooks were down
lizmat: they can be replayed by clicking resend in Settings Webhooks in rakudo's repo but I don't have sufficient perms to the repo to do it myself 21:00
lizmat I'll be committing shortly again
lizmat doesn't see any Settings at all 21:02
Zoffix no issues in status.github.com/
geekosaur I would expect the web hooks to be best effort 21:25
jnthn I see some webhooks it claims were successfully delivered but didn't pop up here, fwiw 21:27
Geth rakudo/nom: 2d8ac1e916 | (Elizabeth Mattijsen)++ | src/core/Mix.pm
Make Mix.BagHash coercion about 28x faster

For a 10 element Mix.
21:34
lizmat seems it works again
commits missed:
github.com/rakudo/rakudo/commit/78...ccdbf6f018 21:35
(Bump NQP_REVISION)
github.com/rakudo/rakudo/commit/d7...8af966b39e
(Make prefs/prop-mappings initialize at compile time)
Geth rakudo/nom: af50e064f8 | (Elizabeth Mattijsen)++ | src/core/Mix.pm
Make Mix.Bag coercion about 28x faster

For a 10 element Mix. Also abstract logic from .BagHash coercion into !BAGGIFY method.
22:00
lizmat and that concludes my hacking for today
good night, #perl6-dev!
Zoffix Night 22:01
It should be possible to make geth log recent commits and then tell it to (auto?) report the missing ones when it unbreaks
Gonna work on IRC::Client and bots after IO grant :) 22:02
[Coke] .seen rjbs 22:25
yoleaux2 I haven't seen rjbs around.
Zoffix /msg yoleaux .tell dpk Hey. Is there any way for you to dump yoleaux's pending messages to users (possibly limited to #perl6 users)? We'd like to use our yoleaux2 bot in #perl6, but without losing all the pending messages that yoleaux has 22:33
Zoffix eyes metacpan.org/pod/Mojo::File#sibling 22:52
m: say '/home/sri/.bashrc'.IO.parent.child('.foo') 22:53
camelia "/home/sri/.foo".IO
Zoffix ^ that is sort-of the same, but isn't if the original path is a directory
m: say '/home/sri/.bashrc/'.IO.parent.child('.foo')
camelia "/home/sri/.foo".IO
Zoffix Oh wait
Oh yeah tis the same.
Then nevermind. 22:54
I do want to steal the creation of IO::Path from a list of parts tho / splitting to parts; at least in the $*SPECless world. I think that's one usecase I recall thinking about that isn't replicated by IO::Path and needs use of $*SPEC 22:57
m: dd <a b c>.join('/').IO
camelia "a/b/c".IO(:SPEC(IO::Spec::Unix),:CWD("/home/camelia"))
Zoffix shrugs
Maybe isn't as needed
AlexDaniel Zoffix: you maintain yoleaux2 now, right? 23:04
Zoffix: irclog.perlgeek.de/perl6/2017-04-07#i_14395253 23:05
Zoffix: if I give you a list of undelivered messages, will you be able to feed them into yoleaux2? 23:06
Zoffix ... 23:11
Now that we finally find who the author is, people find reasonable alternatives -_-
kindf
mst Zoffix: yeah, well, I was afk when [Coke] first asked me :)
Zoffix AlexDaniel: isn't the bot is also in #parrot or #pugs or something or other? You'd need to parse more than 1 channel. 23:12
'cause it delivers them cross-channel too
mst Zoffix: I looked
the bot is not in any other perl6-ish channels anymore
so I think if we handle perl6 we've probably got almost all of them 23:13
Zoffix OK 23:14
AlexDaniel: yeah, that'll work, I guess.
mst I mean, we can try and track down dpk 23:15
it's just at what point it becomes easier to just say "fuck it" and do the import
AlexDaniel .seen dpk
yoleaux2 I haven't seen dpk around.
AlexDaniel <yoleaux> I saw dpk 28 Feb 2017 12:10Z in #swhack: <dpk> ⬑ bettar
mst ...
00:15 -!- idle : 0 days 1 hours 22 mins 55 secs
did nobody try /msg yet?
Zoffix hah 23:16
I used a bot to .tell a message but it didn't occur to me to see if the user was online :P
mst did 'info dpk' on nickserv then /whois
y'all suck :P
Zoffix :)
mst (which is why I encourage you to ask me about this stuff ;)
AlexDaniel and just in case, it is dpkendal at dpk.org.uk 23:17
anyway, who is going to /msg ? :) 23:18
mst Zoffix is, because now we have to co-ordinate getting yoleaux and yoleaux2 synced anyway :D
Zoffix I'm shy. 23:19
And I'm wroking on a bot to replace human interaction.
AlexDaniel :S 23:20
Zoffix Also, I tried opening yoleaux2's "tell.db" with sqlite3 and it didn't work, so short of feeding all the messages through IRC I don't yet know how to add them to yoleaux2 :) 23:21
mst where's the source?
AlexDaniel: can you ping dpk?
AlexDaniel mst: github.com/dpk/yoleaux 23:22
sure
mst Zoffix: oh lol it's using ruby's Storable 23:23
github.com/dpk/yoleaux/blob/master/database.rb
Zoffix ah 23:24
mst easy enough to stuff/unstuff in that case though
AlexDaniel hm… but what if we simply run yoleaux on all channels? 23:27
I mean, ask him to make it join other ones
mst so you're ok losing any messages from on here since you put it in here? 23:29
AlexDaniel he says that it doesn't really store where these messages originated from 23:30
so we cannot easily import messages from its DB
but, he says that if we give him yoleaux2 db, he can feed it into yoleaux
mst I wasn't expecting us to, only import *into* yoleaux2's db if we went that route
the only thing that you'd do with yoleaux's db is xref which messages are still outstanding 23:31
you'd still parse the #perl6 logs to know which messages were *sent* there
but consolidating the yoleaux2 db back into yoleaux would also seem fine to me
Zoffix AlexDaniel: OK: temp.perl6.party/tell.db 23:33
It's from ~/.yoleaux/ is that the right one?
huh TIL weechat autocompletes your paths with TAB
AlexDaniel yes
Zoffix OK, then bring yoleaux here and I'll kill yoleaux2 23:34
And #moarvm
AlexDaniel ok, here's the plan
Zoffix And #perl6-toolchain or what was it
AlexDaniel dpk will come here tomorrow around 18:00 CEST
(he can't do it now)
Zoffix OK 23:35
AlexDaniel it would be nice to have a list of channels we want yoleaux on, yes
mst see, this is why I was wondering if we might not be better running one we can reconfigure 23:36
AlexDaniel mst: unless it's written in perl 6, I don't think we should bother 23:37
mst shrugs
I said 'if' advisedly
AlexDaniel huggable: bots 23:39
huggable AlexDaniel, The #perl6 irc channel normally hosts several helpful bots. I am a bot, and everyone else voiced on this channel is a bot. See the full list here: github.com/perl6/doc/issues/711#is...-235414744
AlexDaniel (oh… actually, *before* 18:00 CEST. In any case, I've sent him the link to tell.db) 23:45