| IOninja | m: say source-file | 00:11 | |
| camelia | 5===SORRY!5=== Error while compiling <tmp> Undeclared routine: source-file used at line 1 |
||
| IOninja | m: use XXX | 00:12 | |
| camelia | ( no output ) | ||
| IOninja | what the... | ||
| ugexe | i installed it | 00:42 | |
| m: my $spec = CompUnit::DependencySpecification.new(:short-name("XXX")); say "Uninstalled $_" for grep { .so }, map { try .repo.uninstall(.distribution) }, grep { .so }, map { .resolve($spec) }, grep { $_ ~~ CompUnit::Repository::Installation }, $*REPO.repo-chain; | 00:44 | ||
| camelia | Uninstalled /home/camelia/rakudo-m-inst-1/share/perl6/site/dist/12B1BDBA6B587552D58EA06D4B8D8BF4D6AB5248 Uninstalled /home/camelia/rakudo-m-inst-1/share/perl6/site/dist/F3EF38A22EF96B3A81774BDFE3AD71AA22B948D7 |
||
| ugexe | m: use XXX | ||
| camelia | ===SORRY!=== Could not find XXX at line 1 in: /home/camelia/.perl6 /home/camelia/rakudo-m-inst-1/share/perl6/site /home/camelia/rakudo-m-inst-1/share/perl6/vendor /home/camelia/rakudo-m-inst-1/share/perl6 CompUnit::Reposit… |
||
| ZzZombo | use Git::Good; | 00:59 | |
| japhb | I've figured out a workaround to the cross-thread IO problem (github.com/ab5tract/Terminal-Print....pm6#L26), but the T*tris-like game (github.com/ab5tract/Terminal-Print...s/tris.p6) is still showing input problems. | 03:08 | |
| To whit, after a few dozen moves, it stops accepting input from the TTY and only processes the timer ticks -- and if the moar process is killed, all the queued TTY input appears on the command line. | 03:09 | ||
| *sigh* | |||
| japhb can understand it not working at all, but working for a while and then suddenly not working doesn't make a ton of sense. | |||
| [Tux] | With TimToady's PR applied to Slang::Tuxic: | 06:57 | |
| This is Rakudo version 2017.02-32-gc1a0fa72b built on MoarVM version 2017.02 | |||
| csv-ip5xs 2.877 | |||
| test 12.679 | |||
| test-t 4.870 - 5.039 | |||
| csv-parser 13.406 | |||
| TimToady++ | |||
| TimToady | :D | 07:03 | |
| samcv | yay it's working again :) | ||
| TimToady can wander off to Kauaʻi tomorrow in good conscience then :) | 07:05 | ||
| lizmat merged TimToady's PR | 07:31 | ||
| [Tux] | lizmat, it also needs a version upgrade, right? | 07:35 | |
| $work calls. need to run | |||
| lizmat | [Tux] ack | ||
| [Tux]: not sure | 07:37 | ||
| lizmat needs to run as well | |||
| Geth | rakudo/nom: 80e0bce9ec | (Elizabeth Mattijsen)++ | 2 files Make loops/maps with NEXT phaser about 5% faster - copy Block.fire_phaser to fire_if_phaser - remove condition from Block.fire_phaser: it is assumed it exists - adapt iterable handling to use fire_if_phaser if necessary So in a loop/map with a NEXT phaser, it is only once checked whether there is a phaser, instead of for each iteration. This should also help inlining. |
12:43 | |
| lizmat | partly inspired by blogs.perl.org/users/morandimus/201...l#comments | ||
| speaking of which: did we ever consider a NONE phaser that would run if a block was never iterated ? | 12:44 | ||
| for @a { NONE say "array was empty } | |||
| for @a { NONE say "array was empty" } | 12:45 | ||
| masak | I pestered TimToady with questions like this some years back :) | 12:50 | |
| I believe some of that made it back into a synopsis somewhere | |||
| lizmat | fwiw, from an implementation point of view, it would be trivial | 12:51 | |
| as it would just be the else on the check whether the LAST phaser should be fired | |||
| jnthn | That solution has weird scoping issues, fwiw | 12:52 | |
| lizmat | how do you mean>? | 12:53 | |
| jnthn | for @as -> $a { NONE say $a } | ||
| masak | I would also like to point out that (IMHO) Python has somewhat poisoned the well on this one | ||
| lizmat | jnthn: gotcha | ||
| masak | because the semantics of `else` on loops in Python is *not* (I repeat, *not*) "did it do zero iterations" | ||
| jnthn | It wouldn't be the only place we have such an issue (QUIT and LAST in whenever blocks share it) | ||
| But it's worth at least pausing to question if we want another phaser that's vulnerable to this issue | 12:54 | ||
| masak | I assumed it was for a long time before I learned about the `break` semantics (which does make sense, in a way) | ||
| lizmat | m: my @a; my int $any; for @a { LAST $any = 1 }; say "array was empty" unless $any # solution with LAST | 12:55 | |
| camelia | array was empty | ||
| lizmat | m: my @a = 42; my int $any; for @a { LAST $any = 1 }; say "array was empty" unless $any # solution with LAST | 12:56 | |
| camelia | ( no output ) | ||
| masak | I think I'm against such a phaser, at least if NONE is the best name fore it we can come up with ;) | 12:57 | |
| jnthn | Note that this will not work out well in reative space, because LAST phasers there always fire upon the done signal, regardless of whether you got any values. | ||
| masak | ok, that's also a strike against | 12:58 | |
| moritz | couldn't you use FIRST? | 12:59 | |
| jnthn | moritz: Yes, that's work out better :) | ||
| *that'd | |||
| moritz | python uses an else-block for not-run loops | 13:00 | |
| though after the loop | |||
| we could have an ELSE phaser, but I'm not favor of it | |||
| masak | moritz: see above -- the semantics is *not* "for not-run loops" | 13:02 | |
| see also a comment to that blog post | |||
| jnthn | Thing is, for @a { ... }; unless @a { ... } is not actually that much of a saving over anything else we'd come up with | 13:05 | |
| Only issue is if @a is actually a far longer expression | |||
| But even then it's possible to just shove that into a variable, or use a given block | 13:06 | ||
| Uh, I mean, is not actually much longer than... | |||
| lizmat | yeah, FIRST would be better, /me spent too much time in Any-iterable-methods :-) | 13:09 | |
| jnthn | Oh, other thing is if it's a one-shot iterable, of course. | 13:12 | |
| IOninja | m: my @a; do for @a {} or say "hi" | 13:14 | |
| camelia | hi | ||
| lizmat | for 0..-1 { NONE say "weird range" } | ||
| IOninja: that would be a severe performance penalty | 13:15 | ||
| IOninja | I'd write it as if blah-blah-blah -> @a { for @a {... } } else { ... } | 13:21 | |
| I saw that post on reddit with plenty of negative comments on it, so the NONE phaser feels like a YAGNI | |||
| lizmat | well, my original question was whether it was ever considered | 13:24 | |
| masak seemed to imply it had | |||
| jnthn's scoping point sorta clinched it for me :-) | 13:25 | ||
| jnthn | If there's anything that makes this an interesting problem, it's that you can't do the for lazy-thing { }; unless lazy-thing { } 'cus then you'd evaluate the lazy sequence twice, or if it's a Seq get a multiple evaluation error. | 13:27 | |
| That slightly increases the desire for some kinda syntactic relief | 13:28 | ||
| But yeah, I agree a NONE phaser probably ain't it :) | |||
| timotimo | do we get a performance boost if we "do +(for @a {})" instead of "do for @a {}"? | 13:29 | |
| because in theory it can .count-only? | |||
| IOninja | m: my $seq = (1...*); for @$seq { .say; last if $++ > 5 }; unless @$seq { say "hi" } | 13:30 | |
| camelia | 1 2 3 4 5 6 7 |
||
| IOninja | m: my $seq = ().Seq; for @$seq { .say; last if $++ > 5 }; unless @$seq { say "hi" } | ||
| camelia | hi | ||
| jnthn | IOninja: That forces keeping the values around, though :) | ||
| IOninja | Does it? | ||
| oh the @ thing | 13:31 | ||
| jnthn | Yes, @$seq is sugar for $seq.cache | ||
| cd wat | |||
| oops | |||
| :) | |||
| IOninja | how do you iterate over it then? | ||
| ah slip OK | |||
| jnthn | |$seq | ||
| IOninja | lizmat: what would cause the severe performance penalty? The `do`? | 13:37 | |
| lizmat | IOninja: yeah, the fact that first needs to keep all the values around | 13:38 | |
| IOninja | ah | ||
| lizmat | also, the iterator would need to do a push-all instead of a sink-all | ||
| IOninja | m: my $seq = (1...*); do for |$seq { last if $++ > 50000; $ = (); } or say "hi"; say now - INIT now | 13:39 | |
| camelia | 1.2169290 | ||
| IOninja | m: my $seq = ().Seq; do for |$seq { last if $++ > 50000; $ = (); } or say "hi"; say now - INIT now | ||
| camelia | hi 0.0016828 |
||
| IOninja | m: my $seq = (1...*); for |$seq { last if $++ > 50000; $ = (); }; say now - INIT now | 13:40 | |
| camelia | 1.38174933 | ||
| IOninja | Not really a good solution though. You have to watch what you return from the loop | 13:41 | |
| or the conditional will trigger wrongly | |||
| perlpilot | If only "run if no iterations of the loop" could be prototyped in user-space ... | 13:42 | |
| timotimo | that's why i suggested the + in front | 13:43 | |
| IOninja | m: my $seq = (1...*); do +(for |$seq { last if $++ > 50000 }) or say "hi"; say now - INIT now | 13:44 | |
| camelia | hi 1.2159876 |
||
| timotimo | not faster :( | 13:53 | |
| oh | |||
| probably because it still has to account for slips | |||
| IOninja | m: my $seq = (1...*); do +(for |$seq { last if $++ > 50000; () }) or say "hi"; say now - INIT now | 13:55 | |
| masak | m: my @a; (for @a {}) || say "there were no elements to iterate over" | ||
| camelia | 1.2244475 | ||
| there were no elements to iterate over | |||
| timotimo | m: my $seq = (1...*); do +(for |$seq -> Any --> Any { last if $++ > 50000 }) or say "hi"; say now - INIT now | ||
| camelia | hi 1.2278798 |
||
| masak | lizmat: I don't remember exactly, but the proposed way to write it was something like that. | ||
| IOninja | m: my @a = 42; (for @a {}) || say "there were no elements to iterate over" | ||
| camelia | ( no output ) | ||
| masak | lizmat: I fuzzily remember it as being Nil and //, but I can't be sure. if it was, it isn't anymore. | 13:56 | |
| IOninja | m: my @a = 42; dd (for @a {}); my @b; dd (for @b {}) | ||
| camelia | (Nil,) () |
||
| IOninja | cool | ||
| timotimo | right, same as using "do" i expect | ||
| IOninja | No, do returns all elements | ||
| masak | this also works if it's a one-shot iterable, like jnthn talked about | 13:57 | |
| IOninja | m: my $seq = (1...*); (for |$seq { last if $++ > 50000 }) or say "hi"; say now - INIT now | ||
| camelia | hi 1.1888204 |
||
| IOninja | ehhh | ||
| Still succeptable to the return stuff | |||
| m: my @a = 42, 72; dd (for @a { $_ }); | 13:58 | ||
| camelia | (42, 72) | ||
| IOninja | Oh, it *is* same as using do | ||
| timotimo | yeah | ||
| the difference between do ... and (...) is just syntactical. precedence and all that | |||
| IOninja | Ah | ||
| Geth | star: 96af95be94 | (Timo Paulssen)++ | modules/json_fast get version 0.8 of json_fast fixes Num serialization, also implements NaN and Inf "properly" |
14:29 | |
| MasterDuke | jnthn: i've updated github.com/rakudo/rakudo/pull/1018 with what i thought was a fix for the jvm. it now builds, and ./perl6-j -e 'say "hi"' runs fine, but a `make install` fails and i can't run the spectests | 15:56 | |
| here's a gist of the output i get gist.github.com/MasterDuke17/2c8fb...e046af1331 | 15:57 | ||
| of course if anyone at all has a suggestion for ^^^ i'm all ears | 15:58 | ||
| and the first line referenced in the backtrace is this: github.com/rakudo/rakudo/blob/nom/....nqp#L2518 | 16:01 | ||
| nine | The DYNAMIC in question is probably $*RAKUDO_MODULE_DEBUG | 16:03 | |
| MasterDuke | line 23 of the gist? it's referencing github.com/rakudo/rakudo/blob/nom/...ubs.pm#L38 | 16:05 | |
| Geth | nqp: 9b67b175d8 | TimToady++ | src/QRegex/Cursor.nqp allow second arg of define_slang to be optional |
16:54 | |
| TimToady | well, third arg, really... | 16:55 | |
| or fourth, even... | |||
| MasterDuke | additional data point. i rebased my branch to the HEAD of nom, same behavior | 17:43 | |
| Geth | roast: ronaldxs++ created pull request #240: fix fudgeandrun handling of return code from prove or perl6 run of test |
18:09 | |
| japhb munches meusli and contemplates how to debug his input processing problems | 18:22 | ||
| Good UGT, all | |||
| DrForr waves from EEST. | 18:24 | ||
| timotimo | japhb: can you output $*THREAD every time you grab characters? | 18:31 | |
| japhb | timotimo: Yeah, had that idea, and also putting a CATCH { .say } inside the start { ... gather characters ... } block | 18:33 | |
| timotimo | one thing you could try is use Thread.new instead of start { } | ||
| because then you won't be working with a thread pool | |||
| japhb | Oh that's an interesting point | ||
| timotimo | even if that doesn't fix it, it'll remove one or two layers of indirection for bug hunting | 18:34 | |
| japhb | thx, timotimo | ||
| Gah, not a single one of those ideas helped. The thread ID that I send to $*ERR never changes, the CATCH block never catches anything, and using Thread.start: instead of just start changes the initial thread ID (from 3 to 5), but otherwise makes no difference. | 18:49 | ||
| timotimo | hm, i wonder | 19:12 | |
| does $*THREAD really give you the right info? | |||
| what happens if you nativecall into a pthread function that gives you a pid/tid? | 19:13 | ||
| does getpid give you a different pid when you're in a thread? | |||
| MasterDuke | in src/Perl6/Actions.nqp, how would i know whether i'm running on a 32 or 64 bit system? | 19:40 | |
| RabidGravy | I'm just llooking at RT#123282 | 20:34 | |
| synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=123282 | ||
| RabidGravy | what would need to be done to make IO::Socket::INET actually pass the family parameter to the underlying implementation? | 20:35 | |
| lizmat | So what's all this braids stuff I've been missing the past week ? | 20:41 | |
| :-) | |||
| lizmat would appreciate a one paragraph description for the Perl 6 Weekly :-) | 20:42 | ||
| git log is not as useful for this | |||
| s/as/very/ | |||
| TimToady jnthn moritz masak ^^^^ please ? | 20:50 | ||
| mst | lizmat: sounds kinda hairy | 20:51 | |
| lizmat | well, I'm just glad they aren't dreadlocks, as that could get *really* confusing with multiple threads :-) | 20:52 | |
.oO( my dreadlocks deadlocked ) |
20:53 | ||
| gfldex | lizmat: as I understand it, the braids stuff gets rid of a few dynamic vars in the grammar to improve speed and sanity. It is also a foundation for more advanced feature in the future. | 21:06 | |
| lizmat | gfldex: thanks! | 21:10 | |
| and a new Perl 6 Weekly hits the Net: p6weekly.wordpress.com/2017/02/20/...ng-slangs/ | 21:22 | ||
| jnthn | lizmat++ | 21:25 | |
| lizmat goes off to chase some more jetlag away | 21:33 | ||
| jnthn | :) | 21:34 | |
| Glad you got home safely :) | |||
| Rest well | |||
| perlpilot is slightly impressed at the Perl 6 questions on SO | 21:40 | ||
| moritz | yes, surprisingly good questions and answers | 21:46 | |
| a long shot from "HOW IS ARRAY FORMD?" :-) | |||
| jnthn | "USING SEQS!" | 21:48 | |
| The questions are almost good enough to tempt me to sign up for SO : | 21:49 | ||
| *:P | |||
| b2gills | You don't actually have to sign up for SO, you will just lose control of your account after the web cookie goes stale.At that point you can start another | 23:25 | |
| It's better if you use an OpenID account or one of the various other similar connection options | 23:28 |