| 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 |