TimToady also wonders how many times he's mistyped --ll-exceptions by now... | 00:04 | ||
samcv | m: my Array[Int] $thingy; $thingy.push("string") | 00:11 | |
camelia | rakudo-moar 4efcc2: OUTPUT«Type check failed in assignment to ; expected Int but got Str ("string") in block <unit> at <tmp> line 1» | ||
samcv | how do i find out which exception this threw? | ||
IOninja | m: my Array[Int] $thingy; try $thingy.push("string"); say $!.^name | 00:14 | |
camelia | rakudo-moar 4efcc2: OUTPUT«X::TypeCheck::Assignment» | ||
samcv | thx :) | ||
TimToady | samcv: there's something slightly "off" about the current $*COLLATION interface, insofar as we should be encouraging people to do "my $*COLLATION = ..." and our current .set method instead encourages people to clobber the PROCESS::<$COLLATION>, which is a bit antisocial | 00:55 | |
especially if we ever get to the point of running separate interpreters, where each has its own GLOBAL for that sort of stuff | 00:56 | ||
samcv | hmm | ||
so how should I change it? | |||
TimToady | so we should think about putting it into GLOBAL at some point, but more than that, figure out how to do 'my %*FOO' such that it knows the type of an outer %*FOO somehow | 00:57 | |
don't quite know how to do that yet | |||
samcv | ah k | ||
TimToady | otherwise we get "my Collation $*COLLATION .= set()" and such, which is a bit wordy | 00:58 | |
maybe "temp %*FOO" should be more like that | |||
STD actually rewrote that to "my %*FOO = CALLERS::<%*FOO>" or so, but rakudo doesn't really support that model of dynvars yet | 00:59 | ||
but that form of temporization would automatically pull down the type of the caller's dynvar | 01:01 | ||
so we wouldn't have to repeat it everywhere, if it were the same | |||
samcv | ah | ||
TimToady | well, it'd probably have to clone the outer one, so that local mods aren't propagated upstream | 01:02 | |
s/outer/caller/ | |||
or we could do something like automatically default any untyped my %*FOO to be the same as an ancestor; hafta think about the ramifications of that | 01:03 | ||
m: say PROCESS::.pairs | 01:04 | ||
camelia | rakudo-moar 4efcc2: OUTPUT«($ERR => IO::Handle<IO::Special.new(what => "<STDERR>")>(opened, at octet 0) $SPEC => (Unix) $COLLATION => collation-level => 15, Country => International, Language => None, primary => True, secondary => True, tertiary => True, quaternary => True &chdir =>…» | ||
TimToady | m: say $*COLLATION.VAR.^name | 01:06 | |
camelia | rakudo-moar 4efcc2: OUTPUT«Scalar» | ||
TimToady | m: say $*COLLATION.VAR.^of | ||
camelia | rakudo-moar 4efcc2: OUTPUT«No such method 'of' for invocant of type 'Perl6::Metamodel::ClassHOW' in block <unit> at <tmp> line 1» | ||
TimToady | m: say $*COLLATION.VAR.of | ||
camelia | rakudo-moar 4efcc2: OUTPUT«(Mu)» | ||
TimToady | well, if we bind an immutable collation value, the people have to use some kind of constructor to set their own 'my $*COLLATION =' | 01:08 | |
so the current .set method, which implies mutable, was probably a bad idea on my part | 01:09 | ||
so at the moment we should probably aim for an interface that looks more like: my $*COLLATION = Collation.new(options) | 01:10 | ||
and then maybe think about how we can get a type on the left so we can use .= new instead | |||
but that would at least fix the magical-action-at-a-distance problem | 01:11 | ||
or render it much less likely, anyway | |||
m: say PROCESS::.keys | 01:12 | ||
camelia | rakudo-moar 4efcc2: OUTPUT«($ERR $SPEC $COLLATION &chdir $AWAITER $IN %ENV $OUT)» | ||
TimToady | m: PROCESS::<$ERR> = 42 | 01:13 | |
camelia | ( no output ) | ||
TimToady | m: $*ERR = 42 | ||
camelia | ( no output ) | ||
TimToady | m: say $*PID | ||
camelia | rakudo-moar 4efcc2: OUTPUT«13519» | ||
TimToady | m: say PROCESS:<$PID> | 01:14 | |
camelia | rakudo-moar 4efcc2: OUTPUT«5===SORRY!5=== Error while compiling <tmp>Undeclared name: PROCESS:<$PID> used at line 1» | ||
Geth | rakudo/nom: 46313fae88 | (Samantha McVey)++ | 2 files Add an experimental collate method and a Cool:D multi for `coll` |
||
samcv | TimToady, so with my $*COLLATION it would be dynamic but not tied to the process? | 01:15 | |
TimToady | well, the processes PID shouldn't be modifiable either... | ||
*s's | |||
your entire mainline can just set my $*COLLATION at the top if it wants | 01:16 | ||
and that is effectively global to everything you call | |||
samcv | yeah | ||
and then do we just have a default $*COLLATION declared in rakudo | |||
and in case they don't declare it just uses that one | 01:17 | ||
TimToady | we could poke the root of it into GLOBAL, if we decide the default is something that is global to an interpreter rather than to the process | ||
samcv | i think that is reasonable | 01:18 | |
TimToady | m: say GLOBAL::.keys | ||
camelia | rakudo-moar 4efcc2: OUTPUT«()» | ||
TimToady | obviously we haven't thought much about poking things into GLOBAL yet | ||
but if we're ever gonna have an apache-alike that runs multiple virual processes, we have to keep those from interfering with each other | |||
samcv | yeah | 01:19 | |
TimToady is a little surprised that $*PID doesn't originate from PROCESS, which kinda "duh" | |||
*seems | |||
samcv | heh | ||
TimToady | anyway, .set was twinging my conscience this morning after you went to bed, so I thought I'd say something... | 01:21 | |
samcv | thanks for letting me know | 01:22 | |
TimToady | no problem, thanks for putting up with me always juggling way too many balls at once :) | ||
samcv | Ball juggler in chief? | 01:26 | |
is that like the court jester ;P | |||
TimToady | I made a fool of myself... | ||
(alluding to The Court Jester, of course) | 01:27 | ||
samcv | you may now continue your juggling :) | 01:32 | |
for it pleases the court | |||
timotimo clickbaits p6weekly.wordpress.com/2017/02/07/...fter-math/ | 01:55 | ||
Geth | rakudo/nom: 192387883e | (Samantha McVey)++ | 2 files Hide unicmp coll and .collate behind experimental :collation Seems to be a better permanent name for these features than unicmp |
02:30 | |
MasterDuke | samcv: i think you may have broken the rakudo jvm build. `Stage jast : Error while compiling op unicmp_s (source text: "nqp::unicmp_s(\n nqp::unbox_s(a), nqp::unbox_s(b), 15,0,0)"), no registered operation handler` | 04:11 | |
samcv | hmm i compiled it on jvm | 04:12 | |
i will recompile though | |||
MasterDuke | i'm a commit or two behind HEAD, i can try pulling and recompiling | ||
samcv | i will try | 04:13 | |
i may have it broken a few commits back tbh tho | 04:15 | ||
before i put in #?if moar and stuff | |||
would be nice if we could make travis only check if rakudo compiles and runs some basic tests on jvm or something | 04:16 | ||
what commit are you on MasterDuke? | 04:18 | ||
MasterDuke | doesn't it already do jvm? or maybe it did and then that got turned off because jvm was broken for a while? | 04:19 | |
samcv | no it does jvm | 04:20 | |
but it doesn't pass all tests so it is always failing | |||
even when it is compiling | |||
MasterDuke | well, i pulled, so i'm on HEAD now (192387883eb4856d906660978ab1cb64c9dcb650) | ||
samcv | make: *** [CORE.setting.jar] Error 137 is what TravisCI says | 04:22 | |
but it will take a while for nqp and rakudo to compile | |||
and i will investigate | |||
MasterDuke | thanks | ||
samcv | it says Stage jast : Killed | 04:23 | |
is that what you got? | |||
MasterDuke | that's usually the oom killer | 04:25 | |
how much free memory do you have? | |||
samcv | no that is travis | 04:28 | |
i'm gonna try this out blog.endpoint.com/2012/08/automatic...g-too.html | 04:30 | ||
for when MVM goes mental and uses all my memory forcing me to hard power off | |||
MasterDuke | killed my box, had to hard reset | 04:31 | |
samcv | hasn't happened recently but. always horrible when it does | ||
it is very fast at being able to allocate memory lol | |||
i have a SSD and 32GB of swap, and it still does it to my computer as SOON as it hits the swap point | |||
i'm sure doesn't help i have full hard drive encryption | 04:32 | ||
MasterDuke | i need more ram, only have 8gb | 04:34 | |
samcv | uhm i think it compiles fine tbh | 04:35 | |
it's not yet done but | |||
Creating './perl6-j' | |||
oh wait maybe not. ok it's on stage jast so i guess i'll find out soon | 04:36 | ||
MasterDuke | i don't consider it done until a `make install` completes successfully. i've had some changes compile fine, but fail there | 04:37 | |
samcv | compiled fine MasterDuke | 04:45 | |
MasterDuke | ah, excellent | ||
samcv | :D | 04:46 | |
MasterDuke | now if it fails i know it's my change | ||
Geth | nqp: 9ecb40703c | MasterDuke17++ | 6 files Intify things that cause the most MVM_coerce_smart_numify These are variable that cause lots of calls to MVM_coerce_smart_numify. |
04:52 | |
MasterDuke | nqp and rakudo both built on the jvm with that PR, so i merged it | 04:53 | |
samcv | MasterDuke, how do I fix java.nio.file.NoSuchFileException: blib/Perl6/BOOTSTRAP.jar | 05:11 | |
MasterDuke, also does that change speed things up? | |||
MasterDuke | did you do `perl Configure.pl ...`? | 05:12 | |
and not noticeably | |||
samcv | yes i did | ||
let's pretend it made it 10x faster | |||
MasterDuke | may just have to `make clean`, the jvm building is just a little more finicky all around | 05:13 | |
samcv | ^ | ||
MasterDuke | i could live with that | ||
it did remove something like 15 million calls to MVM_coerce_smart_numify | 05:14 | ||
samcv | nice! | 05:15 | |
↑5 | |||
MasterDuke | yeah, it seems like a good thing overall, they just weren't terribly expensive | ||
samcv | it's scientifically proven i make 100 1% speed improvements, it will then become instantaneous and require no time at all | 05:16 | |
MasterDuke | science never lies | 05:17 | |
samcv | yep! 100 * 1% = 100% so it will take 100% - 100% = 0! | 05:18 | |
TimToady | wait, I thought 0! was defined as 1... | 05:35 | |
samcv | m: for ^10 { say $++ } | 05:49 | |
camelia | rakudo-moar 192387: OUTPUT«0123456789» | ||
samcv | TimToady, what magic makes $ become 0 | 05:50 | |
when it's usually just (Any) | |||
TimToady | multi postfix:<++>(Mu:U $a is rw) { $a = 1; 0 } | 05:59 | |
samcv | heh | 06:00 | |
smart | |||
TimToady | it was mandated by the specs | 06:01 | |
samcv | multi dispatch ftw | 06:02 | |
Geth | rakudo/nom: 56114251e1 | (Samantha McVey)++ | src/core/Any-iterable-methods.pm Add .collate method to Any-iterable-methods.pm |
07:08 | |
rakudo/nom: 9f7e618fc0 | (Samantha McVey)++ | src/core/Any-iterable-methods.pm Trim whitespace in Any-iterable-methods.pm |
|||
samcv | TimToady, .sort for Hashes only sorts the keys right? | 07:09 | |
and returns the pairs | |||
when I add collate to Any-iterable-methods.pm say %hash.collate | 07:10 | ||
Cannot resolve caller infix:<coll>(Pair, Pair); | |||
should I just add a multi which collates the keys when given two pairs? | |||
eventually should be able to make collate only get the value of $*COLLATION.collation-level once and mostly remove the speed decrease from having to call it so many times | 07:14 | ||
when using coll | |||
i guess that's sorta an unrelated aside | |||
but for now the collate methods just call self.sort(&[coll]) | |||
TimToady | m: say :a(1) cmp :a(2) | 07:24 | |
camelia | rakudo-moar 192387: OUTPUT«Less» | ||
TimToady | m: say :a(2) cmp :a(1) | ||
camelia | rakudo-moar 192387: OUTPUT«More» | ||
TimToady | pair comparison includes the values | ||
of course, if you know you have a hash, the keys can't be identical | 07:25 | ||
well, they could be identical from a collation point of view, I suppose | |||
so you have to include the keys | 07:26 | ||
er, values | |||
samcv | so doing by pair sorts by key and then falls back to value? | 07:27 | |
so the answer is i should make a multi, yes? | |||
TimToady | sounds like | 07:34 | |
samcv | great | 07:40 | |
Geth | rakudo/nom: 6990133410 | (Samantha McVey)++ | src/core/Str.pm Add multi's for coll and unicmp for (Pair:D, Pair:D) |
08:08 | |
rakudo/fix-thunks: aec4f5fad9 | (Pawel Murias)++ | 3 files Emit properly nested blocks for the combination of default value to params and subs/->. |
11:42 | ||
jnthn | pmurias++ | 11:43 | |
Well, I didn't read the patch yet, but... :) | |||
pmurias | jnthn: it's still being spectested so it might have some horrible flow | 11:48 | |
nine | Patch looks sensible at a first glance | 11:49 | |
timotimo | patch looks glancible at first sense | 11:53 | |
pmurias | If the patch looks sane I'll expand it to fix up '$foo where sub {...}' and other thunks | 12:16 | |
IOninja | NeuralAnomaly: status | 14:39 | |
NeuralAnomaly | IOninja, [✘] Next release will be in 1 week and 4 days. Since last release, there are 30 new still-open tickets (30 unreviewed and 0 blockers) and 173 unreviewed commits. See perl6.fail/release/stats for details | ||
IOninja | 1.5 weeks till release :o | ||
Time flies | |||
Geth | rakudo: pmurias++ created pull request #1016: Emit properly nested blocks for the combination of default value to p… |
17:01 | |
nqp: 4e7eee01b7 | (Zoffix Znet)++ | src/HLL/CommandLine.nqp Fix typos in POD Part of fixing #346 |
17:29 | ||
IOninja | How come this line (and some others) do `my $laze = values.is-lazy; values.map(&code).lazy-if($laze)` instead of just `values.map(&code).lazy-if(values.is-lazy)` ? github.com/rakudo/rakudo/blob/nom/...s.pm#L1951 | 18:46 | |
timotimo | mapping over the values might reify it completely? | 18:48 | |
IOninja | Wouldn't values.is-lazy be obtained before that? | ||
timotimo | don't think so | 18:49 | |
well, it depends on whether or not the map immediately does something | |||
to be honest, i haven't looked at this part of the code in a long while | |||
IOninja | m: sub x (\values) { values.map({$_}).lazy-if(values.is-lazy) }; say (x lazy 1, 2, 3).is-lazy | 18:50 | |
camelia | rakudo-moar 699013: OUTPUT«This Seq has already been iterated, and its values consumed(you might solve this by adding .cache on usages of the Seq, orby assigning the Seq into an array) in sub x at <tmp> line 1 in block <unit> at <tmp> line 1» | ||
IOninja | m: sub x (\values) { my $laze = values.is-lazy; values.map({$_}).lazy-if($laze) }; say (x lazy 1, 2, 3).is-lazy | ||
camelia | rakudo-moar 699013: OUTPUT«True» | ||
IOninja | Ahhhh | ||
Well, half-an-ahh. | 18:51 | ||
m: sub x (\values) { $ = values.is-lazy; $ = values.map({$_}); 42 }; say (x lazy 1, 2, 3) | 18:52 | ||
camelia | rakudo-moar 699013: OUTPUT«42» | ||
IOninja | m: sub x (\values) { $ = values.map({$_}); $ = values.is-lazy; 42 }; say (x lazy 1, 2, 3) | ||
camelia | rakudo-moar 699013: OUTPUT«This Seq has already been iterated, and its values consumed(you might solve this by adding .cache on usages of the Seq, orby assigning the Seq into an array) in sub x at <tmp> line 1 in block <unit> at <tmp> line 1» | ||
IOninja | So it *is* called after it's (started to) mapped | ||
m: sub x (\values) { $ = values.map({say "$_"}); $ = values.is-lazy; 42 }; say (x lazy 1, 2, 3) | 18:59 | ||
camelia | rakudo-moar 699013: OUTPUT«This Seq has already been iterated, and its values consumed(you might solve this by adding .cache on usages of the Seq, orby assigning the Seq into an array) in sub x at <tmp> line 1 in block <unit> at <tmp> line 1» | ||
IOninja | s: (lazy 1, 2, 3), 'map', \({;}) | 19:00 | |
SourceBaby | IOninja, Sauce is at github.com/rakudo/rakudo/blob/6990...ods.pm#L17 | ||
IOninja | ZOFVM: Files=1224, Tests=132853, 145 wallclock secs (21.73 usr 3.16 sys + 2703.73 cusr 215.98 csys = 2944.60 CPU) | 19:16 | |
Geth | rakudo/nom: 51b0aba8e8 | (Zoffix Znet)++ | src/core/Iterable.pm Make Iterable.flat propagate `is-lazy` irclog.perlgeek.de/perl6/2017-02-07#i_14059136 |
19:19 | |
IOninja is failing to find any non-accidental tests for .flat :( | 19:22 | ||
TimToady | I see what you mean | 19:24 | |
I guess all the GLR testing was rather more ad hoc... | 19:25 | ||
(of flat) | |||
Geth | roast: f00494253b | (Zoffix Znet)++ | S02-types/array.t Test Iterable.flat propagates .is-lazy Note that routine &flat does not propagate it and based on the source comments[^1], it appears it wasn't meant to. [1] github.com/rakudo/rakudo/blob/51b0...1377-L1382 |
20:02 | |
IOninja | or maybe I'm misreading that source comment.... | 20:04 | |
m: multi x(Seq $x) { $x.is-lazy.say }; multi x(**@x) { @x.is-lazy.say }; x(lazy 1, 2, 3) | 20:05 | ||
camelia | rakudo-moar 51b0ab: OUTPUT«True» | ||
IOninja | hmmmm | ||
m: multi x(Seq $x) { $x.is-lazy.say }; multi x(**@x) { @x.is-lazy.say }; x(42, lazy 1, 2, 3) | |||
camelia | rakudo-moar 51b0ab: OUTPUT«False» | ||
IOninja | m: multi x(Seq $x) { $x.is-lazy.say }; multi x(**@x) { @x.is-lazy.say }; x(1..*) | ||
camelia | rakudo-moar 51b0ab: OUTPUT«False» | ||
IOninja | m: multi x(Iterable $x) { $x.is-lazy.say }; multi x(**@x) { @x.is-lazy.say }; x(1..*) | 20:06 | |
camelia | rakudo-moar 51b0ab: OUTPUT«True» | ||
IOninja | guess that multi can be shoved in there to make it propagate .is-lazy in cases where it can; unsure if that covers all the core things or user subclasses | 20:07 | |
m: sub (*@x) { say @x.is-lazy }(1..*) | 20:08 | ||
camelia | rakudo-moar 51b0ab: OUTPUT«True» | ||
IOninja | m: sub (**@x) { say @x.is-lazy }(1..*) | ||
camelia | rakudo-moar 51b0ab: OUTPUT«False» | ||
IOninja | or is the slurpy supposed to propagate it? | 20:09 | |
[Coke] | jnthn: if you have time tomorrow, any help on github.com/perl6/doc/issues/1175 would be greatly appreciated. Please let me know if you need more golf. | 20:48 | |
jnthn | [Coke]: Ah, yes, I keep meaning to look at that... | 21:58 | |
jnthn sticks it in a browser tab | 21:59 | ||
RabidGravy | I have stuff that stays in a browser tab for months | 22:08 | |
jnthn | Me too, but I tend to see the ones at the top of the stack :) | 22:10 | |
MasterDuke | IOninja: timotimo has a moarvm PR waiting to merge the coverage branch | 22:16 | |
timotimo | it'll need to be fixed again since new ops were introduced recently | 22:18 |