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 |