IOninja | .ask lizmat do you know if it's a bug that `sink-all` isn't called when the Seq is sunk naturally instead of explicitly? I vaguely recall you asking about it. What was the answer? m: my $s = Seq.new: class :: does Iterator { method pull-one {}; method sink-all { say "sunk " } }.new; $s | 01:37 | |
yoleaux2 | IOninja: I'll pass your message to lizmat. | ||
Geth | roast: 1f844e1637 | (Daniel Green)++ | S03-operators/repeat.t Add another test for RT #128035 Giving the `x` repeat op a too large value should throw instead of going negative and silently not doing anything. |
03:32 | |
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128035 | ||
samcv | buggable, tag uni | 07:21 | |
buggable | samcv, There are 31 tickets tagged with UNI; See perl6.fail/t/UNI for details | ||
samcv | time to tend to some unicode bugs | 07:35 | |
question. this bug is technically fixed rt.perl.org/Ticket/Display.html?id...et-history since we have East_Asian_Width property. but it's LTA because it only shows the short names instead of the full written out ones | 07:37 | ||
should i edit this bug to be for the new status or make a new one and close this one | 07:38 | ||
u: { .uniprop('GCB') eq 'Control' and "\x[200b,$_]".chars > 1 } | 07:40 | ||
unicodable6 | samcv, gist.github.com/296e3bc3da1e7a1c6d...472fcc82cf | ||
samcv | u: { .uniprop('GCB') eq 'Control' and "\x[200b]{$_.chr}".chars > 1 } | 07:41 | |
unicodable6 | samcv, U+0000 <control-0000> [Cc] (control character) | ||
samcv, U+0001 <control-0001> [Cc] (control character) | |||
samcv | u: { .uniprop('GCB') eq 'Control' and "\x[200b]{$_.chr}".chars < 2 } | 07:43 | |
unicodable6 | samcv, Found nothing! | ||
samcv | u: { .uniprop('GCB') eq 'Control' and "\x[01]{$_.chr}".chars < 2 } | 07:44 | |
unicodable6 | samcv, Found nothing! | ||
lizmat | . | 09:40 | |
yoleaux2 | 01:37Z <IOninja> lizmat: do you know if it's a bug that `sink-all` isn't called when the Seq is sunk naturally instead of explicitly? I vaguely recall you asking about it. What was the answer? m: my $s = Seq.new: class :: does Iterator { method pull-one {}; method sink-all { say "sunk " } }.new; $s | ||
lizmat | m: my $s = Seq.new: class :: does Iterator { method pull-one {}; method sink-all { say "sunk " } }.new; $s.sink # apparently, sink doesn't get called | 09:41 | |
camelia | sunk | ||
lizmat | m: Seq.new: class :: does Iterator { method pull-one {}; method sink-all { say "sunk " } }.new # assignment prevents sinking | 09:45 | |
camelia | sunk | ||
lizmat | this isn't limited to Seq's though: | 09:46 | |
m: class A { method sink { say "sunk" } }.new | |||
camelia | sunk | ||
lizmat | m: my $a = class A { method sink { say "sunk" } }.new; $a | ||
camelia | WARNINGS for <tmp>: Useless use of $a in sink context (line 1) |
||
lizmat | Files=1179, Tests=55903, 193 wallclock secs (11.67 usr 4.66 sys + 1152.28 cusr 105.78 csys = 1274.39 CPU) | 09:54 | |
|Tux| | This is Rakudo version 2017.03-10-g6060bd38c built on MoarVM version 2017.03-4-gfe1dc84a | 11:00 | |
csv-ip5xs 3.002 | |||
test 12.225 | |||
test-t 4.885 - 5.010 | |||
csv-parser 12.539 | |||
dogbert17_ | just out of curiosity, what parts of Rakudo/MoarVM needs optimization on order for test-t to perform better? | 11:18 | |
s/on/in/ | 11:19 | ||
lizmat | at the HLL level, run with --profile :-) | 11:23 | |
at the low level, make JIT work better :-) | |||
jnthn | Spesh also :) | 11:24 | |
dogbert17_ | so there's no LHF's left then? | 11:25 | |
jnthn | Given how much that attention that example has received, my guess would be not much :) | ||
lizmat | dogbert17_: fwiw, I haven't looked at --profile output of test-t for a while | 11:28 | |
maybe new LHF have emerged :-) | |||
timotimo | i'm a bit annoyed that the profiler currently won't display allocations or gc stats | 11:29 | |
lizmat as well :-( | 11:30 | ||
dogbert17_ | anyone remember the name of Tux's repo? | ||
|Tux| | I do | ||
dogbert17_ | :) | ||
lizmat | github.com/Tux/CSV | ||
dogbert17_ | thx | ||
timotimo | it's kind of amazing that tux sacrificed such a short repo name for a perl6 module | 11:31 | |
jnthn | I should be able to focus on performance issues in the not too distant future | ||
|Tux| | modules.perl6.org => search for CSV | ||
jnthn | (Having been primarily focused on stability issues of late) | 11:32 | |
|Tux| | timotimo, the perl5 version is here: github.com/Tux/Text-CSV_XS | ||
|Tux| doesn't feel it being a sacrifice | |||
timotimo | OK :) | ||
|Tux| | occupydemocrats.com/2017/03/19/denm...ens-moves/ | 11:34 | |
dogbert17_ | hmm, installing Text::CSV wasn't as easy as expected ... 'could not find File::Directory::Tree at line 3 in:' | ||
jnthn | dogbert17_: How did you try to install it? :) | ||
dogbert17_ | old school way, with panda :) | 11:35 | |
panda install Text::CSV | |||
jnthn | hm, I'd have expected that to get the deps sorted out fine | 11:37 | |
dogbert17_ | so would I | 11:39 | |
there are some complaints: | 11:42 | ||
Potential difficulties: | |||
Literal values in signatures are smartmatched against and smartmatch with `False` will always fail. Use the `where` clause instead. | |||
followed by a gazillion of test failures (in Text::CSV) | 11:43 | ||
Geth | rakudo/nom: 5917b817c6 | (Elizabeth Mattijsen)++ | src/core/Rakudo/Iterator.pm Fix for RT #131018 |
11:44 | |
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=131018 | ||
dogbert17_ | hmm, am I the only one getting this when trying to install Text::CSV? | 11:45 | |
lizmat | afk again for some schlepping& | ||
|Tux| | dogbert17_, $ git clone github.com:Tux/CSV Text-CSV6 && cd Text-CSV6 && panda install . | 11:49 | |
same thing? | |||
dogbert17_ | tries ... | 11:50 | |
|Tux| | timotimo, doing that, I get this: | ||
==> Testing Text::CSV | |||
Unhandled exception in code scheduled on thread 3 | |||
permission denied | |||
timotimo | wait, doing what now? | 11:51 | |
also, that error message is pretty unhelpful | 11:53 | ||
dogbert17_ | ==> Installing Text::CSV from a local directory '.' | 11:54 | |
==> Fetching Text::CSV | |||
Failed to copy '/home/dogbert/repos/Text-CSV6/csv-rust-qckrdr' to '/home/dogbert/repos/Text-CSV6/.panda-work/1490010833_1//csv-rust-qckrdr': Failed to copy file: no such file or directory | |||
timotimo | it's not mkdir-ing properly? | ||
the // isn't confusing it, i ohpe? | 11:55 | ||
|Tux| | those files should not be installed | ||
the repo contains a lot of files that enable comparing speeds between languages. They should not be installed | |||
timotimo | right, and the meta6.json isn't telling to install any of that | 11:56 | |
|Tux| | Where should I state the files to be skipped from install? | ||
timotimo | there is no way to do that and it shouldn't even try to do that in the first place?! | ||
oh | 11:57 | ||
i expect it's just copying stuff over into a work dir before installing | |||
dogbert17_ | |Tux|, timotimo: it continued installing after I removed sv-rust-csvrdr, csv-rust-libcsv and csv-rust-qckrdr, however there are lots of test failures | 12:00 | |
timotimo | why would it fail to copy that ... is it a dead symlink or something? | 12:01 | |
yes, it is a dead link | |||
dogbert17_ | I think it was dead symlinks yes | ||
|Tux| | test *FAIL*ures or just a riddle of TODO's? | ||
and I see failures too now. Will have a look | 12:02 | ||
dogbert17_ | spam warning :) | ||
cool, no spam then :) | |||
timotimo | the copy routine in panda there ought to copy the symlinks as they are, not try to follow them | ||
for every reason ever | |||
dogbert17_ sneaks away for a quick lunch | 12:03 | ||
|Tux| | timotimo, what is the fastest way to see what commit broke t/78_fragment.t line 127 (and more) ? | 12:10 | |
timotimo | you mean what rakudo commit? | ||
|Tux| | yep | ||
timotimo | hm, we do have bisectable, but it's set up only for single scripts, not for whole modules | 12:11 | |
|Tux| | I probably missed the test errors | ||
masak | |Tux|: if you have an easy way to re-build your Rakudo at different versions, `git bisect`-ing Rakudo might be the fastest way | 12:19 | |
timotimo | yeah | ||
|Tux| | maybe it is easier then to find the failing line/structure | ||
IOninja | That just makes it look like more of a bug to me. That a defined sinking method isn't called in all cases of sinkage. | 12:20 | |
|Tux| | IOninja, that remark is to me? | 12:21 | |
IOninja | And that warning is issued with prefix sink. | ||
|Tux|: no, to previous conversation about sink called, but only if the object is not in a variable. | |||
|Tux| | ah, /me digs on ā¦ | ||
timotimo | building me some rakudos | 12:22 | |
|Tux| | did something change in RangeSet's? | 12:29 | |
IOninja | There's no such thing in core. | 12:30 | |
Range.int-bounds did change; it used to have a bug where, say, 1..* gave (1, Inf) is *int* bounds | |||
|Tux| | did something change in Pair's? | ||
timotimo | isn't test-t supposed to be really fast? | 12:31 | |
IOninja | AT-KEY used to give Mu, now it gives Nil (changed in Jan) | ||
timotimo | [Tux]: is your "test-verbose" target in the makefile supposed to be called from lib/ and i have to cp -r the t folder into lib as well, or should the dependency be lib/Text/CSV.pm instead of Text/CSV.pm? | 12:38 | |
|Tux| | the latter | 12:39 | |
timotimo | thx | ||
dogbert17_ back | 12:46 | ||
|Tux| | Found the failing line of code, but I have no idea why | 12:59 | |
Ā« my @row = $meta ?? @f !! @f.map ( -> \x --> Str { x.Str });Ā» | |||
@f has TWO elements. After that line, @row only has ONE | 13:00 | ||
$meta is False in the case of failure | 13:01 | ||
timotimo | m: my @f = <1 2 3 4>; dd @f.map(*.Str) | 13:02 | |
camelia | ("1", "2", "3", "4").Seq | ||
timotimo | m: my @f = <1 2 3 4>; dd @f.map(-> \x --> Str { x.Str }) | ||
camelia | ("1",).Seq | ||
timotimo | m: my @f = <1 2 3 4>; dd @f.map(-> \x { x.Str }) | ||
camelia | ("1", "2", "3", "4").Seq | ||
timotimo | the "that's never going to slip" optimized iterator is probably to blame | ||
|Tux| | (that line of code is created by Liz | ||
did I spot a bug? | 13:03 | ||
timotimo | yes, you surely did | ||
|Tux| | \o/ | ||
and thank you dogbert17_ for trying! | |||
CSV being a canary again | 13:04 | ||
timotimo | yes, quite good | ||
IOninja | bisect: m: my @f = <1 2 3 4>; dd @f.map(-> \x --> Str { x.Str }) | 13:07 | |
bisectable6 | IOninja, Bisecting by output (old=2015.12 new=5917b81) because on both starting points the exit code is 0 | ||
IOninja, bisect log: gist.github.com/384f8cfdb95b325059...08089d5a01 | |||
IOninja, (2017-01-29) github.com/rakudo/rakudo/commit/fd...350e03d3f0 | |||
timotimo | makes me wonder: 2x as fast because it only maps once? :P | 13:08 | |
IOninja | heh | 13:09 | |
timotimo | YOMO? | ||
IOninja | m: dd ('1', '2', '3').map(-> \x --> Str { x.Str })[0..*] | 13:11 | |
camelia | ("1", "2", "3") | ||
|Tux| | I am seriously disappointed in *myself* for not noticing this FAIL before dogbert17_ did :( | ||
IOninja | Don't really get why `IterateOneNotSlippingWithoutPhasers` has handling for phasers :/ | 13:12 | |
Ah, these are just to handle `next`, etc. not phasers. | 13:13 | ||
Though I don't see `NEXT` in the buggy branches :/ | 13:14 | ||
m: my $i = ('1', '2', '3').map(-> \x --> Str { dd ["[", x, "]"]; next if x == 2; x.Str }).iterator; my @z; dd $i.push-all(@z); dd @z | 13:28 | ||
camelia | ["[", "1", "]"] IterationEnd Array @z = ["1"] |
||
IOninja | ĀÆ\_(ć)_/ĀÆ don't see the bug :/ All code reads correct to me. | 13:29 | |
other than missing NEXT handlers.. | |||
Which is this: github.com/rakudo/rakudo/blob/nom/...#L301-L319 | 13:30 | ||
dogbert17_ | |Tux| I can wait until the problem is solved :) | 13:35 | |
|Tux| | I can alter the code, but I rather keep it and wait till Rakudo is fixed | 13:36 | |
dogbert17_ | is it something for lizmat? | ||
|Tux| | anyway: you can install and use it, if you do not use fragments | ||
I think IOninja, timotimo and Liz will find the cause and a solution | 13:37 | ||
I just put my finger on the line of failure | |||
dogbert17_ | I wanted to run the same test-t that you present each day and then make a profile of it | ||
|Tux| | which, to me, was an interesting journey, as I never expected *that* line to be faulty | 13:38 | |
timotimo | dogbert17_: read README.speed for that | ||
|Tux| | that test still works | ||
dogbert17_ | timotimo: so now I have to learn reading :) | ||
IOninja | dogbert17_: just clone the repo. You don't need to install anything other than deps | ||
huggable: csv | |||
huggable | IOninja, github.com/Tux/CSV (see `bench csv` for how to run bench) | ||
IOninja | huggable: bench csv | ||
huggable | IOninja, export PATH=`pwd`/install/bin:$PATH; cd CSV; for i in $(seq 1 10000); do echo 'hello,","," ",world,"!"'; done > /tmp/hello.csv; time perl6 -Ilib -MText::CSV test-t.pl </tmp/hello.csv | ||
IOninja | ignore the PATH part. | ||
dogbert17_ is impressed by all the help he's getting | 13:39 | ||
|Tux| | :) \o/ | ||
dogbert17_ | will be interesting to see how large the profile will be | ||
timotimo | stop helping dogbert so well, lest they get used to it and expect it in the future! | ||
dogbert17_ | :) | ||
|Tux| | sorry timotimo - I got triggered somehow | 13:40 | |
dogbert17_ | timotimo, IOninja: have you already figured out what's wrong/buggy? | 13:41 | |
IOninja | dogbert17_: nope. I've read all of the code involved and don't see what's buggy about it. | ||
IOninja adds a few debug prints and recompiles | 13:43 | ||
timotimo | .o( about that bytecode-level debugger ... ) | 13:45 | |
IOninja | hm, I think I see it actually | 13:58 | |
IOninja recompiles | |||
Yup, got it \o/ | 14:00 | ||
timotimo | cool! | 14:01 | |
IOninja | And the NEXT handlers aren't missing. They're just not needed there. | 14:05 | |
(the NEXT nexts the outter loop) | 14:06 | ||
dogbert17_ | IOninja++ | 14:11 | |
IOninja is taking forever to push :) | 14:16 | ||
jnthn | Push harder! | 14:17 | |
IOninja | I was wrestling with indentation. Started with `pico` on the VM, gave up, went to atom, but have no idea how to make it 2-space ident for one file, so went back to pico :P | ||
dogbert17_ | IOninja: I got test-t running, there was a complaint during the first run: | 14:19 | |
Potential difficulties: | |||
Literal values in signatures are smartmatched against and smartmatch with `False` will always fail. Use the `where` clause instead. | |||
at /home/dogbert/repos/Text-CSV6/lib/Text/CSV.pm (Text::CSV):690 | |||
------> multi method column_names (Falseā) returns Array[Str] { @!cnames = (); } | |||
|Tux| | the fix foir that one has been pushed. git pull to fix | 14:20 | |
dogbert17_ | |Tux|++ | ||
|Tux| | jnthn, maybe allow Ā«multi method foo (False) {Ā» to be shorthand for Ā«multi method foo (Bool:D $ where *.not) {Ā» | 14:22 | |
dogbert17_ | takes 5.7 sec on my $work machine | 14:23 | |
jnthn | |Tux|: Well, against it is that we'd have to make it a special case and so inconsistent with how other literals are handled, so then we can't just explain it as "it smart-matches". OTOH, the current behavior is pretty useless... | 14:24 | |
|Tux| | dogbert17_, when I started it took 256, so be glad to enter the arena today :) | 14:25 | |
the syntax is very readable when written down, but I couldn't come up with that from scratch | 14:26 | ||
Geth | rakudo/nom: 86dc997cc2 | (Zoffix Znet)++ | src/core/Any-iterable-methods.pm Fix IterateOneNotSlippingWithoutPhasers .push-all and .sink-all Currently the methods stop after the first iteration instead of pushing or sinking all the values. The cause is `$stopped` is mis-scoped, since nqp::until() isn't a block. So `$stopped` retains its value from previous iteration, ... (8 more lines) |
||
|Tux| | with that in mind, would Ā«multi method foo (True) {Ā» be written as Ā«multi method foo (Bool:D when *) {Ā» ? | 14:27 | |
jnthn | where .so I'd guess | ||
timotimo | not "when", though | 14:28 | |
jnthn | Or where *.so if it's to match the other one you have :) | ||
IOninja | It'd work, but where .so is clearer | ||
timotimo | yeah | ||
|Tux| | so much confusion :) | ||
dogbert17_ rebuilds | |||
|Tux| | when/where was my mistake. I meant where | ||
Geth | roast: 70be436959 | (Zoffix Znet)++ | S32-list/map.t Test IterateOneNotSlippingWithoutPhasers .push-all and .sink-all Rakudo fix: github.com/rakudo/rakudo/commit/86dc997cc2 Bug find: irclog.perlgeek.de/perl6-dev/2017-...i_14293997 |
14:29 | |
[Coke] | (2 space indent) you monster. | 14:31 | |
IOninja | I'm not the one using it :) | ||
But there's a lot of nesting with nqp-dense code, so 2-space makes sense | 14:32 | ||
dogbert17_ | am I interpreting the profile output correctly if if I say the the routine parse is the one using up most of the time (in something called chunks)? | ||
dogbert17_ stutter writing :( | 14:33 | ||
|Tux| | yep | 14:35 | |
dogbert17_ | Text::CSV tests are now passing :) | ||
|Tux| | very very likely parse is the hot-spot | 14:36 | |
as it uses "next" quite a bit, it is probably causing slowness because next is an exception | |||
re-writing the code to not use next would render it unmaintainable | |||
This is Rakudo version 2017.03-12-g86dc997cc built on MoarVM version 2017.03-4-gfe1dc84a | 14:37 | ||
csv-ip5xs 2.979 | |||
test 12.310 | |||
test-t 4.897 - 4.919 | |||
csv-parser 12.557 | |||
jnthn | At some point, I'd hope we can (in spesh) rewrite various Perl 6 `next`s into gotos | 14:38 | |
timotimo | aye | ||
jnthn | (We already can do that for NQP code) | ||
|Tux| | All tests successful. | ||
Files=29, Tests=22308, 18 wallclock secs ( 2.40 usr 0.14 sys + 58.01 cusr 1.31 csys = 61.86 CPU) | |||
Result: PASS | |||
IOninja++ | |||
I expect such an optimisation to boost CSV parsing enormously | 14:39 | ||
wat|gives | huggable: help | 14:42 | |
IOninja | huggable: help | ||
huggable | IOninja, nothing found | ||
IOninja | bug in IRC::Client... | ||
perlpilot | .oO( wat gives and wat takes? ) |
||
IOninja was wondering why ZofBot didn't report the ++ above to my Twitter... | |||
dogbert17_ | IOninja: did you go back to JSON::Fast in your bots? I believe that timotimo and/or MasterDuke fixed the memory problem | 14:43 | |
timotimo | er, not quite | 14:44 | |
i reduced the impact by a factor of about 2? and MasterDuke gave us a rather nice boost | |||
dogbert17_ | you didn't? | ||
ah timotimo++, MasterDuke++ | 14:45 | ||
IOninja | dogbert17_: see no reason to go back. | ||
timotimo | there's still improvements to be made | 14:46 | |
dogbert17_ | IOninja, ok, in general how does you bots behave, do the SEGV, run out of memory or perform impeccably? | ||
*they | |||
IOninja | work fine | ||
dogbert17_ | cool | 14:47 | |
timotimo | JSON::Fast is - out of it and JSON::Tiny - currently the only impl that accepts strings that start with a quotation that has combining characters following it | ||
hm, actually ... i might have to check how it behaves (and should behave) when it hits a closing quotation mark with combining characters | 14:48 | ||
it should probably reject the input in that case | |||
IOninja is surprised `JSON` is still untaken by anyone | 14:49 | ||
timotimo | i'll certainly not snag JSON for "a naive imperative json parser in perl6, to evaluate performance against JSON::Tiny" :) | 14:51 | |
dogbert17_ | is the profiler UI broken? The GC tab does not seem to work. | 15:15 | |
[Coke] | It has difficulty with large dumps of data. | ||
I'm not aware of anything specifically borked, though. | 15:16 | ||
dogbert17_ | ah, this one is ~200k | ||
timotimo | yeah, it is | 15:17 | |
[Coke]: it's fully borked on the smallest of profiles | |||
ISTR you worked on it a while back? was it still working when you left it? | |||
[Coke] | I udpated the version of angular it was using, hoping to get a marginal speed boost. | ||
(it's still on A1, though, and it was working when I stopped touching it, yes.) | 15:18 | ||
timotimo | OK, strange | ||
[Coke] | If it's fully borked, please open an RT if one isn't already. | ||
my experiment to try to get it A2 was met with great resistance by my brain. | 15:19 | ||
timotimo | sorry to hear that | 15:20 | |
i haven't looked into a2 at all yet | |||
tadzik | dogbert17_: you may want to try the qt profiler | ||
it doesn't do all the things, but it can load large files just fine | |||
[Coke] | timotimo: my plan is to have a separate project for generating the template, then snapshotting that template into the place where the existing one is. | 15:21 | |
timotimo | right | ||
tadzik: it doesn't show anything about GCs, which is half of the broken part | |||
tadzik | ah | ||
timotimo | the other half is allocations, those don't show up either, but the qt profiler also doesn't have 'em | ||
tadzik | hm, let me grab a tea... | 15:22 | |
timotimo | did you see we got an sql output backend added to the profiler? | ||
tadzik | oh! no | ||
that's nice | |||
timotimo | it's got an issue, but it might be a good idea to throw the json stuff away from the qt profiler | ||
since it has that unreasonable size restriction on input files | |||
tadzik | right | ||
looks like I'll have my hands full on the not-qa-hackathon :) | 15:23 | ||
dogbert17_ | tadzik: so where can I find this qt profiler? | ||
timotimo | on tadzik's github | ||
dogbert17_ looks | |||
tadzik | dogbert17_(IRC): github.com/tadzik/p6profiler-qt, but as timotimo says, may not be useful for you if gc's what you're after | ||
timotimo | you can re-run the profile and use a --profile-filename=foo.sql | 15:24 | |
sqlite3 foo.sqlite -init foo.sql and then ^D will create an sqlite database for you, sqlitebrowser has a plot tab that can give you a plot of results from a query | |||
tadzik | sqlitebrowser! | ||
dogbert17_ | interesting | 15:25 | |
tadzik | that sounds useful | ||
timotimo | it is a good tool | ||
it gets very confused when you give it the raw .sql file | |||
tadzik | heh | ||
timotimo | either you have a database already created and it'll try to BEGIN before loading the file, then choke on the BEGIN that the file starts with | ||
or you import the sql to create a new database and it'll report some error on the console and just hang with a 0% progress window open | 15:26 | ||
dogbert17_ | tadzik: I see that you're the author of panda, cool | ||
timotimo | panda has been very valuable for a very long time | ||
[Coke] now wishes zef was called zuul. | |||
dogbert17_ | we were fighting with it a couple of pages up, we had some problems with symbolic links | ||
timotimo | aye, tux' csv repository has symlinks to subfolders that don't exist in it | 15:28 | |
you have to do some manual work (maybe just run the makefile) to make those appear | |||
but panda's first order of business is to copy over the repo to a temporary work oflder | |||
that's where it explodes, it tries to copy the symlink, but instead tries copying the target file, which gives "file not found" | 15:29 | ||
tadzik | dogbert17_: yeah :) | ||
|Tux| | timotimo, just tell me what to fix | 15:30 | |
the symlinks to outside the repo could be removed from the repo and put in .gitignore | |||
timotimo | how do you usually make the binaries for the other languages implementaitons appear? | ||
oh wait, they are to outside the repo? | 15:31 | ||
it's not, though? | |||
csv-rust-qckrdr is a symlink to rust-quick-reader/target/release/quick-reader | |||
|Tux| | those are *in* the repo, but they should not be installed | 15:32 | |
timotimo | we have a different interpretation of "outside", then | ||
it's not about being installed, though | |||
it's just about making a temporary work folder for panda to work in | |||
for the temporary work folder to contain what the module needs to build, it has to copy over everything | 15:33 | ||
that includes these symbolic links purely because they are part of "everything" | |||
|Tux| | panda doesn't need all the stuff I included to be able to compare timings against other languages | ||
timotimo | well, we could make tux/csv a special case in panda and give it a file listing of things it ought to copy | 15:34 | |
or we should make it copy symlinks preserving the symlinks | |||
or you'll just kick out the symlinks and generate them in the same script that builds these implementations | |||
|Tux| | or I should split off Text::CSV::Timings from Text::CSV | ||
timotimo | yeah, that'd also be a good step forward | 15:35 | |
i still think panda ought to know about symlinks when it copies stuff around | |||
though maybe for security reasons we should limit symlinks to stuff inside the work copy | |||
|Tux| | but that would be after two weeks, as I go skiing Friday :) \o/ | ||
timotimo | cool | ||
|Tux| | timotimo, if META6.json can have an "exclude" list, that would be the easiest approach | 15:36 | |
timotimo | no | ||
|Tux| | because? | ||
timotimo | the working copy thing is an implementation detail of panda | ||
|Tux| | same problem does not exist in zef? | 15:37 | |
timotimo | if any other method of installation was used it would never use that exclude list, and people would have to go to rather extreme measures to ensure the exclude list makes sense | ||
that is correct | |||
|Tux| | should I switch to zef? | 15:38 | |
timotimo | that's a matter of taste at this moment | ||
zef is seeing more development than panda, though | |||
|Tux| | I'll switch when told to. Until then, my automated procedures will use panda | 15:39 | |
IOninja | Yes, use zef. | ||
|Tux| | try Ā«zef -?Ā» and understand why I didn't so far :) | 15:40 | |
or zef --help | |||
timotimo | No matches for wildcard ā-?ā. | ||
fish: zef -? | |||
what's the issue with zef -\? or zef --help? | 15:41 | ||
IOninja | |Tux|: what am I looking for? | ||
|Tux| | that wildcard thing is not to blame zef (or any program) for. It is a shell setting. I chose to have it be literal | ||
timotimo | sure | 15:42 | |
i'm looking at the output that you mean | |||
it seems sice | |||
|Tux| | gist.github.com/Tux/509974a8909f1e...e75aa16379 | ||
timotimo | huh | 15:43 | |
are you running latest zef? | |||
IOninja | |Tux|: that's because you're running outdated version :/ | ||
|Tux| | I don't know :) | ||
panda install zef ? | |||
==> Testing zef | |||
Unhandled exception in code scheduled on thread 3 | |||
no such file or directory | |||
timotimo | well, usually you go into zef's folder, then perl6 -Ilib bin/zef install . | 15:44 | |
IOninja | |Tux|: how did you get your perl6? | ||
|Tux| | from rakudobrew | ||
IOninja | |Tux|: rakudobrew build-zef | ||
|Tux| | :) | 15:45 | |
Ā«zef install FooĀ» installed Foo :) from FROGGS | 15:47 | ||
IOninja | |Tux|: I don't see any commits in panda from its author since middle of last year, despite there being 50+ Issues and several PRs. The few more recent fixes are primarily by the Rakudo Star release manager, but it's been dropped from R* now, so I doubt more will come. I'm not aware of any feature panda supports that zef doesn't. So I disagree with the "it's a metter of taste" comment. IMO zef is The One | 15:48 | |
Trueā¢ Perl 6 module manager. | |||
timotimo | that's fair | 15:49 | |
|Tux| | I just switched to zef. That means that it is unlikely that I will report any problems with panda in the future | 15:50 | |
|Tux| wonders if this would also help dogbert17_ | 15:51 | ||
IOninja, zef could be improved to not run tests if the current version is already installed on Ā«zef install .Ā» | 15:53 | ||
IOninja | buggable: eco zef | ||
buggable | IOninja, zef 'It's like [cpanm] wearing high heels with a tracksuit': github.com/ugexe/zef | ||
IOninja | |Tux|: ^ report it. | 15:54 | |
Geth | rakudo/nom: 0c6281518e | (Zoffix Znet)++ | 2 files Fix crash IO::Path.lines(*) and make it 3.2x faster; lizmat++ The original issue that led to impl of IO::Path.lines has been resolved in IO::Path.lines, so toss the impl and use the much faster IO::Path.lines to do the work. |
15:57 | |
timotimo | neato | ||
Geth | roast: 465795c458 | (Zoffix Znet)++ | S16-io/lines.t [io grant] Test IO::Path.lines(*) does not crash Rakudo fix: github.com/rakudo/rakudo/commit/0c6281518e |
15:58 | |
IOninja | if it weren't for that added `try`, it'd be the perfect commit: bug fix, optimization, and no new lines of code :) | ||
|Tux| | IOninja, reported | 16:00 | |
dogbert17_ | |Tux|, I try Zef and see how it works | 16:04 | |
Geth | roast: add852b082 | (Zoffix Znet)++ | S16-io/lines.t Test IO::Path.lines can do sink-all Cover the issue exposed with github.com/rakudo/rakudo/commit/0c6281518e that needed a `try` added. |
16:06 | |
perlpilot | speaking of zef ... is it a feature that "zef install A B C" fails to install B and C if A fails to install? (i.e. it looks like zef assumes a dependency relationship between multiple modules given on the command line) | 16:11 | |
IOninja | Probably not :) | 16:12 | |
japhb | perlpilot: I think you may be looking for --serial . I think without that, zef isn't so much assuming dependency, but rather assuming a single invocation should be a transaction: either the whole thing succeeds or the whole thing fails. | 16:22 | |
perlpilot | japhb: ah, thanks. | ||
IOninja | GAH | 16:29 | |
s:1st/IO::Path/IO::Pipe/; in that commit message | |||
and :2nd too -_- | 16:30 | ||
and s:3rd/IO::Path/IO::Handle/; | 16:31 | ||
I'm clearly in love with IO::Path :) | |||
Damn, the roast messages are wrong too. 6 mentions of IO::Path... All wrong :) | 16:32 | ||
timotimo | whoops :S | 17:16 | |
ugexe | japhb: thats correct | 17:32 | |
eventually it will be able to pick up where it last left off | 17:33 | ||
dogbert17 | [Coke]: RT #131027 | 19:16 | |
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=131027 | ||
[Coke] | dogbert17: danke | 19:19 | |
lizmat | it's always good to make things faster by removing other things :-) | 19:28 | |
RabidGravy | can you create github issues by email? | 19:42 | |
lizmat | hmmm. don't know, but if we could, wouldn't that create the same problem that RT has with spam ? | 19:43 | |
RabidGravy | yeah, it's just I get bug reports on my P5 modules to rt and I want them in github :-\ | 19:45 | |
cut and paste then | |||
samcv | good * | 20:02 | |
IOninja | \o | ||
AlexDaniel | š | 20:10 | |
lizmat | so what's up with pl6anet.org ? seems like the feed is all mixed up ? | 21:08 | |
jnthn | Hm, odd...I don't see the post I wrote this week, which is usually aggregated there | 21:13 | |
IOninja | stmuk_: what's happening? ^ | 21:14 | |
jnthn | lizmat: If you're doing weekly, I did a blog post for once, anyways :) | 21:16 | |
lizmat | jnthn: it's the headliner :-) | 21:17 | |
jnthn | I'm hyper about racing to the top :P | ||
lizmat | tentative title of this week: How To Race A Hyper | 21:18 | |
bartolin | r: use nqp; say nqp::eqaddr(buf8.WHAT,Buf[uint8].WHAT) # RT #130914 | 21:28 | |
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130914 | ||
camelia | 1 | ||
0 | |||
bartolin | j: use nqp; say nqp::jvmeqaddr(buf8.WHAT,Buf[uint8].WHAT) | ||
camelia | 1 | ||
IOninja | cool | ||
Why is there a separate op for that? | |||
bartolin has no idea | 21:29 | ||
it looks like jvmeqaddr isn't used anywhere (neither nqp nor rakudo) | 21:30 | ||
timotimo | there's not even a part in the compiler that creates a reference to it? | 21:34 | |
bartolin | if my grep is right, it's really only a mapping of the op in src/vm/jvm/QAST/Compiler.nqp and the method jvmeqaddr in src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java | 21:37 | |
timotimo | interesting | ||
i wonder if we just never needed that? or are we just using eqaddr and that does just what we need anyway? | 21:38 | ||
lizmat | wasn't it the point that it doesn't do the same ? | 21:39 | |
timotimo | dunno | ||
lizmat | fwiw, I would hate to have to fix all calls to nqp::eqaddr to special case the JVM :-( | ||
timotimo | i haven't touched the jvm part of rakudo in a long while and psch isn't around any more :( | 21:40 | |
IOninja | What happend to him? | ||
bartolin | lizmat: in that case we could just change the eqaddr op on JVM :-) | ||
lizmat | that would be brill :-) | 21:41 | |
bartolin will try to take a look at the eqaddr vs. jvmeqaddr thing (but not today) | |||
timotimo | IOninja: one day /quit and didn't /connect again | 21:42 | |
bartolin | IOninja: I hope, it was just real life interfering that happened to psch. istr he got a new job last year, or something | 21:43 | |
lizmat | and another Perl 6 Weekly hits the Net: p6weekly.wordpress.com/2017/03/20/...e-a-hyper/ | 21:54 | |
timotimo | lizmat: it ate the infix:<,> or what it was | 21:57 | |
because triangle brackets scare wordpress | |||
lizmat | grrrr | 21:58 | |
timotimo++ # fixed | 21:59 | ||
jnthn | lizmat++ | 22:32 | |
jnthn always finds stuff in the weekly he didn't know about :) | |||
cognominal | lizmat++ | 22:36 | |
lizmat | jnthn: a thought: currently the behaviour of an iterator after it has produced an IterationEnd is undefined, right ? | 22:42 | |
I was thinking that in a parallel world, that could be less than useful | 22:43 | ||
perhaps we need to force an iterator to always produce an IterationEnd after it produced its first IterationEnd | |||
timotimo | no | ||
when you go from regular iterators to hyper-land, it'll have a piece of coordination in place for you | |||
lizmat | fwiw, most if not all internal iterators already have that behaviour | ||
jnthn | .iterator is consistently intended as the sequential iterator | ||
timotimo | no need to make everything pay for the parallel use case | 22:44 | |
jnthn | As I see it so far, requesting .iterator is the way you'd *end* the parallel sequence and return to serial | ||
timotimo | are you for serial, .iterator? | 22:45 | |
jnthn | :P | ||
timotimo | hmmm | ||
jnthn | I wrote Concurrent::Iterator as a way to get an iterator that you can consume from multiple threads, and that does latch IterationEnd just as you mention, though. | ||
timotimo | a slang where .Foo? is a typecheck | 22:46 | |
jnthn | But "iterator you can consume from multiple threads" isn't needed for .race/.hyper; the start of the parallel sequence of operations grabs things using .iterator into batches and hands them off | ||
lizmat | well, I was prototyping my ideas :-) | 22:47 | |
jnthn | Aha :) | ||
lizmat | anyway, I dislike the nomans' land that the end of an iterator is in | 22:48 | |
I mean, if it is only forced to generate an IterationEnd once, shouldn't we let it die if you try to pull from such an iterator ? | 22:49 | ||
timotimo | sounds like something we'd want to put a compile-time switch in for, so we don't pay for every single iteration | ||
lizmat | currently we don't, meaning we potentially have all sorts of bugs now depending on the fact that some iterators *do* return IterationEnd more than once | ||
jnthn | I'd assumed that iterator protocol violation would be rare | 22:52 | |
Since it's single-threaded so you can't race on it, so you pretty much have to mis-behave and ignore IterationEnd | |||
timotimo | i remember when we had a sort-of difficult-to-track bug where a bit of code relied on IterationEnd to flow like in the land of milk & honey | ||
jnthn | Which could happen | 22:53 | |
timotimo | make IterationEnd die when sunk? :P | ||
jnthn | Mostly leaving it undefined was to just make sure we don't force places where it's costly to have to pay for that | 22:54 | |
lizmat | jnthn: having written a lot of iterators lately, I think the cost is minimal | ||
and already in there, really | |||
jnthn | To consistently keep returning IterationEnd? | 22:56 | |
lizmat | yup | ||
in many cases, for iterators depending on iterators, it's just a matter of passing along :-) | 22:57 | ||
jnthn | True | ||
lizmat | jnthn: re github.com/jnthn/p6-concurrent-ite...or.pm6#L26 , why don't you throw the exception immediately ? | 22:58 | |
looks like this way the exception could be thrown on another thread then where it originated from | 22:59 | ||
jnthn | It does rethrow | 23:00 | |
lizmat | but with the next pull ? | ||
jnthn | A CATCH that doesn't have a when/default will just rethrow always | ||
So we just stash it away and let it flow onwards | |||
lizmat | ah, so any other pull will throw the same exception | ||
jnthn | Right | ||
lizmat | from any other thread | ||
gotcha | 23:01 | ||
jnthn | Yeah, the idea is if you have competing workers they all get killed | ||
timotimo | a little bit of a massacre | ||
lizmat | wouldn't it make more sense to kill them with a more descriptive message | ||
like "killed because worker X got killed" | |||
I mean, it could be that the exception doesn't make any sense for some of the workers | 23:02 | ||
and would be unhelpful with debugging | |||
timotimo | "permission denied while adding two numbers" | ||
jnthn | I dunno. With Promise it's quite clear the place of throw and the place of await will tend to be very different | 23:03 | |
But with iterators it's all fairly synchronous | |||
I guess it could be a tad confusing though, in that the stack trace is from a totally different thread | 23:04 | ||
lizmat | my point :-) | ||
especially with 400 workers running :-) | |||
jnthn | A 400 core CPU would be ace for the spectests :) | 23:05 | |
We could do a mixin thing like we do with Promise | |||
Well, await | |||
That's quite nice in so far as you retain the original type | |||
So smart-matching on exception types still works | |||
That always annoyed me in C#...the exception got wrapped in an AggregateException in some cases then you had to go unpacking it... | |||
lizmat | I mean, in that sense, wouldn't it make more sense to have all other workers get IterationEnd, so *they* can end gracefully ? | 23:07 | |
jnthn | So parallelizing something existing but not updating exception handlers downstream could win a bug | ||
lizmat | instead of re-throwing | ||
jnthn | No, I think all of them should see the exception | ||
Imagine they were doing something in LAST | |||
lizmat | hmmm | 23:08 | |
jnthn | (Some kind of "I successfully finished my work" action) | ||
lizmat | eh, how could they be doing something in LAST ? you mean, when they receive IterationEnd ? | ||
jnthn | Yeah | ||
lizmat | ok | ||
timotimo | right, we'd want to trigger something for unsuccessful end instead | 23:09 | |
jnthn | *nod* | ||
OK, it's late, I should go rest | |||
Still shaking off the cold | |||
lizmat | good night, jnthn! | ||
sleep well | |||
jnthn | 'night! | ||
Thanks :) | |||
timotimo | gnite! | 23:10 |