Perl 6 - the future is here, just unevenly distributed

IRC log for #perl6-dev, 2017-03-20

| Channels | #perl6-dev index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
01:37 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.
02:49 ilbot3 joined #perl6-dev
02:49 Topic for #perl6-dev is now Perl 6 language and compiler development 2.0 | Logs at http://irclog.perlgeek.de/perl6-dev/today
03:32 Geth ¦ roast: 1f844e1637 | (Daniel Green)++ | S03-operators/repeat.t
03:32 Geth ¦ roast: Add another test for RT #128035
03:32 Geth ¦ roast:
03:32 Geth ¦ roast: Giving the `x` repeat op a too large value should throw instead of going
03:32 Geth ¦ roast: negative and silently not doing anything.
03:32 synopsebot6 Link:  https://rt.perl.org/rt3//Publ​ic/Bug/Display.html?id=128035
03:32 Geth ¦ roast: review: https://github.com/perl6/roast/commit/1f844e1637
04:33 llfourn joined #perl6-dev
06:50 RabidGravy joined #perl6-dev
07:21 samcv buggable, tag uni
07:21 buggable samcv, There are 31 tickets tagged with UNI; See http://perl6.fail/t/UNI for details
07:35 samcv time to tend to some unicode bugs
07:37 samcv question. this bug is technically fixed https://rt.perl.org/Ticket/Displ​ay.html?id=130564#ticket-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:38 samcv should i edit this bug to be for the new status or make a new one and close this one
07:40 samcv u: { .uniprop('GCB') eq 'Control' and "\x[200b,$_]".chars > 1 }
07:40 unicodable6 samcv, https://gist.github.com/296e​3bc3da1e7a1c6d0b3d472fcc82cf
07:41 samcv u: { .uniprop('GCB') eq 'Control' and "\x[200b]{$_.chr}".chars > 1 }
07:41 unicodable6 samcv, U+0000 <control-0000> [Cc] (control character)
07:41 unicodable6 samcv, U+0001 <control-0001> [Cc] (control character)
07:43 samcv u: { .uniprop('GCB') eq 'Control' and "\x[200b]{$_.chr}".chars < 2 }
07:43 unicodable6 samcv, Found nothing!
07:44 samcv u: { .uniprop('GCB') eq 'Control' and "\x[01]{$_.chr}".chars < 2 }
07:44 unicodable6 samcv, Found nothing!
09:32 robertle joined #perl6-dev
09:40 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
09:41 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 rakudo-moar 6060bd: OUTPUT: «sunk ␤»
09:45 lizmat m:  Seq.new: class :: does Iterator { method pull-one {}; method sink-all { say "sunk " } }.new  # assignment prevents sinking
09:45 camelia rakudo-moar 6060bd: OUTPUT: «sunk ␤»
09:46 lizmat this isn't limited to Seq's though:
09:46 lizmat m: class A { method sink { say "sunk" } }.new
09:46 camelia rakudo-moar 6060bd: OUTPUT: «sunk␤»
09:46 lizmat m: my $a = class A { method sink { say "sunk" } }.new; $a
09:46 camelia rakudo-moar 6060bd: OUTPUT: «WARNINGS for <tmp>:␤Useless use of $a in sink context (line 1)␤»
09:54 faraco joined #perl6-dev
09:54 lizmat Files=1179, Tests=55903, 193 wallclock secs (11.67 usr  4.66 sys + 1152.28 cusr 105.78 csys = 1274.39 CPU)
10:47 Ven joined #perl6-dev
11:00 |Tux| This is Rakudo version 2017.03-10-g6060bd38c built on MoarVM version 2017.03-4-gfe1dc84a
11:00 |Tux| csv-ip5xs        3.002
11:00 |Tux| test            12.225
11:00 |Tux| test-t           4.885 - 5.010
11:00 |Tux| csv-parser      12.539
11:18 dogbert17_ just out of curiosity, what parts of Rakudo/MoarVM needs optimization on order for test-t to perform better?
11:19 dogbert17_ s/on/in/
11:19 faraco left #perl6-dev
11:23 lizmat at the HLL level, run with --profile  :-)
11:23 lizmat at the low level, make JIT work better  :-)
11:24 jnthn Spesh also :)
11:25 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 :)
11:28 lizmat dogbert17_: fwiw, I haven't looked at --profile output of test-t for a while
11:28 lizmat maybe new LHF have emerged  :-)
11:29 timotimo i'm a bit annoyed that the profiler currently won't display allocations or gc stats
11:30 * lizmat as well  :-(
11:30 dogbert17_ anyone remember the name of Tux's repo?
11:30 |Tux| I do
11:30 dogbert17_ :)
11:30 lizmat https://github.com/Tux/CSV
11:30 dogbert17_ thx
11:31 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
11:31 |Tux| http://modules.perl6.org => search for CSV
11:32 jnthn (Having been primarily focused on stability issues of late)
11:32 |Tux| timotimo, the perl5 version is here: https://github.com/Tux/Text-CSV_XS
11:32 * |Tux| doesn't feel it being a sacrifice
11:32 timotimo OK :)
11:34 |Tux| http://occupydemocrats.com/2017/03/19/denmark​-just-trolled-trump-bus-watch-happens-moves/
11:34 dogbert17_ hmm, installing Text::CSV wasn't as easy as expected ... 'could not find File::Directory::Tree at line 3 in:'
11:34 jnthn dogbert17_: How did you try to install it? :)
11:35 dogbert17_ old school way, with panda :)
11:35 dogbert17_ panda install Text::CSV
11:37 jnthn hm, I'd have expected that to get the deps sorted out fine
11:39 dogbert17_ so would I
11:40 awwaiid joined #perl6-dev
11:42 dogbert17_ there are some complaints:
11:42 dogbert17_ Potential difficulties:
11:42 dogbert17_ Literal values in signatures are smartmatched against and smartmatch with `False` will always fail. Use the `where` clause instead.
11:43 dogbert17_ followed by a gazillion of test failures (in Text::CSV)
11:44 Geth ¦ rakudo/nom: 5917b817c6 | (Elizabeth Mattijsen)++ | src/core/Rakudo/Iterator.pm
11:44 Geth ¦ rakudo/nom: Fix for RT #131018
11:44 Geth ¦ rakudo/nom: review: https://github.com/rakudo/rakudo/commit/5917b817c6
11:44 synopsebot6 Link:  https://rt.perl.org/rt3//Publ​ic/Bug/Display.html?id=131018
11:45 dogbert17_ hmm, am I the only one getting this when trying to install Text::CSV?
11:45 lizmat afk again for some schlepping&
11:49 |Tux| dogbert17_, $ git clone github.com:Tux/CSV Text-CSV6 && cd Text-CSV6 && panda install .
11:49 |Tux| same thing?
11:50 dogbert17_ tries ...
11:50 |Tux| timotimo, doing that, I get this:
11:50 |Tux| ==> Testing Text::CSV
11:50 |Tux| Unhandled exception in code scheduled on thread 3
11:50 |Tux| permission denied
11:51 timotimo wait, doing what now?
11:53 timotimo also, that error message is pretty unhelpful
11:54 dogbert17_ ==> Installing Text::CSV from a local directory '.'
11:54 dogbert17_ ==> Fetching Text::CSV
11:54 dogbert17_ 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
11:54 timotimo it's not mkdir-ing properly?
11:55 timotimo the // isn't confusing it, i ohpe?
11:55 |Tux| those files should not be installed
11:55 |Tux| the repo contains a lot of files that enable comparing speeds between languages. They should not be installed
11:56 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?
11:56 timotimo there is no way to do that and it shouldn't even try to do that in the first place?!
11:57 timotimo oh
11:57 timotimo i expect it's just copying stuff over into a work dir before installing
12:00 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:01 timotimo why would it fail to copy that ... is it a dead symlink or something?
12:01 timotimo yes, it is a dead link
12:01 dogbert17_ I think it was dead symlinks yes
12:01 |Tux| test *FAIL*ures or just a riddle of TODO's?
12:02 |Tux| and I see failures too now. Will have a look
12:02 dogbert17_ spam warning :)
12:02 dogbert17_ cool, no spam then :)
12:02 timotimo the copy routine in panda there ought to copy the symlinks as they are, not try to follow them
12:02 timotimo for every reason ever
12:03 * dogbert17_ sneaks away for a quick lunch
12:10 |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?
12:10 |Tux| yep
12:11 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
12:19 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
12:19 |Tux| maybe it is easier then to find the failing line/structure
12:20 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:21 |Tux| IOninja, that remark is to me?
12:21 IOninja And that warning is issued with prefix sink.
12:21 IOninja |Tux|: no, to previous conversation about sink called, but only if the object is not in a variable.
12:21 |Tux| ah, /me digs on …
12:22 timotimo building me some rakudos
12:29 |Tux| did something change in RangeSet's?
12:30 IOninja There's no such thing in core.
12:30 IOninja Range.int-bounds did change; it used to have a bug where, say, 1..* gave (1, Inf) is *int* bounds
12:30 |Tux| did something change in Pair's?
12:31 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)
12:31 perlpilot joined #perl6-dev
12:38 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:39 |Tux| the latter
12:39 timotimo thx
12:46 * dogbert17_ back
12:59 |Tux| Found the failing line of code, but I have no idea why
12:59 |Tux| « my @row = $meta ?? @f !! @f.map ( -> \x --> Str { x.Str });»
13:00 |Tux| @f has TWO elements. After that line, @row only has ONE
13:01 |Tux| $meta is False in the case of failure
13:02 timotimo m: my @f = <1 2 3 4>; dd @f.map(*.Str)
13:02 camelia rakudo-moar 5917b8: OUTPUT: «("1", "2", "3", "4").Seq␤»
13:02 timotimo m: my @f = <1 2 3 4>; dd @f.map(-> \x --> Str { x.Str })
13:02 camelia rakudo-moar 5917b8: OUTPUT: «("1",).Seq␤»
13:02 timotimo m: my @f = <1 2 3 4>; dd @f.map(-> \x { x.Str })
13:02 camelia rakudo-moar 5917b8: OUTPUT: «("1", "2", "3", "4").Seq␤»
13:02 timotimo the "that's never going to slip" optimized iterator is probably to blame
13:02 |Tux| (that line of code is created by Liz
13:03 |Tux| did I spot a bug?
13:03 timotimo yes, you surely did
13:03 |Tux| \o/
13:03 |Tux| and thank you dogbert17_ for trying!
13:04 |Tux| CSV being a canary again
13:04 timotimo yes, quite good
13:07 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
13:07 bisectable6 IOninja, bisect log: https://gist.github.com/384f​8cfdb95b325059d46708089d5a01
13:07 bisectable6 IOninja, (2017-01-29) https://github.com/rakudo/rakudo/commit/​fdcf462f42ad4eb2599d9a1287e015350e03d3f0
13:08 timotimo makes me wonder: 2x as fast because it only maps once? :P
13:09 IOninja heh
13:09 timotimo YOMO?
13:11 IOninja m: dd ('1', '2', '3').map(-> \x --> Str { x.Str })[0..*]
13:11 camelia rakudo-moar 5917b8: OUTPUT: «("1", "2", "3")␤»
13:11 |Tux| I am seriously disappointed in *myself* for not noticing this FAIL before dogbert17_ did :(
13:12 IOninja Don't really get why `IterateOneNotSlippingWithoutPhasers` has handling for phasers :/
13:13 IOninja Ah, these are just to handle `next`, etc. not phasers.
13:14 IOninja Though I don't see `NEXT` in the buggy branches  :/
13:28 IOninja 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 rakudo-moar 5917b8: OUTPUT: «["[", "1", "]"]␤IterationEnd␤Array @z = ["1"]␤»
13:29 IOninja ¯\_(ツ)_/¯ don't see the bug :/ All code reads correct to me.
13:29 IOninja other than missing NEXT handlers..
13:30 IOninja Which is this: https://github.com/rakudo/rakudo/blob/nom/​src/core/Any-iterable-methods.pm#L301-L319
13:35 dogbert17_ |Tux| I can wait until the problem is solved :)
13:36 |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?
13:36 |Tux| anyway: you can install and use it, if you do not use fragments
13:37 |Tux| I think IOninja, timotimo and Liz will find the cause and a solution
13:37 |Tux| I just put my finger on the line of failure
13:37 dogbert17_ I wanted to run the same test-t that you present each day and then make a profile of it
13:38 |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
13:38 |Tux| that test still works
13:38 dogbert17_ timotimo: so now I have to learn reading :)
13:38 IOninja dogbert17_: just clone the repo. You don't need to install anything other than deps
13:38 IOninja huggable: csv
13:38 huggable IOninja, https://github.com/Tux/CSV (see `bench csv` for how to run bench)
13:38 IOninja huggable: bench csv
13:38 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
13:38 IOninja ignore the PATH part.
13:39 * dogbert17_ is impressed by all the help he's getting
13:39 |Tux| :) \o/
13:39 dogbert17_ will be interesting to see how large the profile will be
13:39 timotimo stop helping dogbert so well, lest they get used to it and expect it in the future!
13:39 dogbert17_ :)
13:40 |Tux| sorry timotimo - I got triggered somehow
13:41 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.
13:43 * IOninja adds a few debug prints and recompiles
13:45 timotimo .o( about that bytecode-level debugger ... )
13:58 IOninja hm, I think I see it actually
13:58 * IOninja recompiles
14:00 IOninja Yup, got it \o/
14:01 timotimo cool!
14:05 IOninja And the NEXT handlers aren't missing. They're just not needed there.
14:06 IOninja (the NEXT nexts the outter loop)
14:11 dogbert17_ IOninja++
14:16 * IOninja is taking forever to push :)
14:17 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
14:19 dogbert17_ IOninja: I got test-t running, there was a complaint during the first run:
14:19 dogbert17_ Potential difficulties:
14:19 dogbert17_ Literal values in signatures are smartmatched against and smartmatch with `False` will always fail. Use the `where` clause instead.
14:19 dogbert17_ at /home/dogbert/repos/Text-CSV6/lib/Text/CSV.pm (Text::CSV):690
14:19 dogbert17_ ------>     multi method column_names (False⏏) returns Array[Str] { @!cnames = (); }
14:20 |Tux| the fix foir that one has been pushed. git pull to fix
14:20 dogbert17_ |Tux|++
14:22 |Tux| jnthn, maybe allow «multi method foo (False) {» to be shorthand for «multi method foo (Bool:D $ where *.not) {»
14:23 dogbert17_ takes 5.7 sec on my $work machine
14:24 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:25 |Tux| dogbert17_, when I started it took 256, so be glad to enter the arena today :)
14:26 |Tux| 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
14:26 Geth ¦ rakudo/nom: Fix IterateOneNotSlippingWithoutPhasers .push-all and .sink-all
14:26 Geth ¦ rakudo/nom:
14:26 Geth ¦ rakudo/nom: Currently the methods stop after the first iteration instead of
14:26 Geth ¦ rakudo/nom: pushing or sinking all the values.
14:26 Geth ¦ rakudo/nom:
14:26 Geth ¦ rakudo/nom: The cause is `$stopped` is mis-scoped, since nqp::until() isn't a
14:26 Geth ¦ rakudo/nom: block. So `$stopped` retains its value from previous iteration,
14:26 Geth ¦ rakudo/nom: <…commit message has 8 more lines…>
14:26 Geth ¦ rakudo/nom: review: https://github.com/rakudo/rakudo/commit/86dc997cc2
14:27 |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
14:28 timotimo not "when", though
14:28 jnthn Or where *.so if it's to match the other one you have :)
14:28 IOninja It'd work, but where .so is clearer
14:28 timotimo yeah
14:28 |Tux| so much confusion :)
14:28 * dogbert17_ rebuilds
14:28 |Tux| when/where was my mistake. I meant where
14:29 Geth ¦ roast: 70be436959 | (Zoffix Znet)++ | S32-list/map.t
14:29 Geth ¦ roast: Test IterateOneNotSlippingWithoutPhasers .push-all and .sink-all
14:29 Geth ¦ roast:
14:29 Geth ¦ roast: Rakudo fix: https://github.com/rakudo/rakudo/commit/86dc997cc2
14:29 Geth ¦ roast: Bug find: https://irclog.perlgeek.de/pe​rl6-dev/2017-03-20#i_14293997
14:29 Geth ¦ roast: review: https://github.com/perl6/roast/commit/70be436959
14:29 Ven joined #perl6-dev
14:31 [Coke] (2 space indent) you monster.
14:31 IOninja I'm not the one using it :)
14:32 IOninja 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)?
14:33 * dogbert17_ stutter writing :(
14:35 |Tux| yep
14:35 dogbert17_ Text::CSV tests are now passing :)
14:36 |Tux| very very likely parse is the hot-spot
14:36 |Tux| as it uses "next" quite a bit, it is probably causing slowness because next is an exception
14:36 |Tux| re-writing the code to not use next would render it unmaintainable
14:37 |Tux| This is Rakudo version 2017.03-12-g86dc997cc built on MoarVM version 2017.03-4-gfe1dc84a
14:37 |Tux| csv-ip5xs        2.979
14:37 |Tux| test            12.310
14:37 |Tux| test-t           4.897 - 4.919
14:37 |Tux| csv-parser      12.557
14:38 jnthn At some point, I'd hope we can (in spesh) rewrite various Perl 6 `next`s into gotos
14:38 timotimo aye
14:38 jnthn (We already can do that for NQP code)
14:38 |Tux| All tests successful.
14:38 |Tux| Files=29, Tests=22308, 18 wallclock secs ( 2.40 usr  0.14 sys + 58.01 cusr  1.31 csys = 61.86 CPU)
14:38 |Tux| Result: PASS
14:38 |Tux| IOninja++
14:39 |Tux| I expect such an optimisation to boost CSV parsing enormously
14:42 wat|gives huggable: help
14:42 IOninja huggable: help
14:42 huggable IOninja, nothing found
14:42 IOninja bug in IRC::Client...
14:42 perlpilot .oO( wat gives and wat takes? )
14:42 * IOninja was wondering why ZofBot didn't report the ++ above to my Twitter...
14:43 dogbert17_ IOninja: did you go back to JSON::Fast in your bots? I believe that timotimo and/or MasterDuke fixed the memory problem
14:44 timotimo er, not quite
14:44 timotimo i reduced the impact by a factor of about 2? and MasterDuke gave us a rather nice boost
14:44 dogbert17_ you didn't?
14:45 dogbert17_ ah timotimo++, MasterDuke++
14:45 IOninja dogbert17_: see no reason to go back.
14:46 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?
14:46 dogbert17_ *they
14:46 IOninja work fine
14:47 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
14:48 timotimo 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 timotimo it should probably reject the input in that case
14:49 * IOninja is surprised `JSON` is still untaken by anyone
14:51 timotimo i'll certainly not snag JSON for "a naive imperative json parser in perl6, to evaluate performance against JSON::Tiny" :)
15:15 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.
15:16 [Coke] I'm not aware of anything specifically borked, though.
15:16 dogbert17_ ah, this one is ~200k
15:17 timotimo yeah, it is
15:17 timotimo [Coke]: it's fully borked on the smallest of profiles
15:17 timotimo ISTR you worked on it a while back? was it still working when you left it?
15:17 [Coke] I udpated the version of angular it was using, hoping to get a marginal speed boost.
15:18 [Coke] (it's still on A1, though, and it was working when I stopped touching it, yes.)
15:18 timotimo OK, strange
15:18 [Coke] If it's fully borked, please open an RT if one isn't already.
15:19 [Coke] my experiment to try to get it A2 was met with great resistance by my brain.
15:20 timotimo sorry to hear that
15:20 timotimo i haven't looked into a2 at all yet
15:20 tadzik dogbert17_: you may want to try the qt profiler
15:20 tadzik it doesn't do all the things, but it can load large files just fine
15:21 [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
15:21 timotimo tadzik: it doesn't show anything about GCs, which is half of the broken part
15:21 tadzik ah
15:21 timotimo the other half is allocations, those don't show up either, but the qt profiler also doesn't have 'em
15:22 tadzik hm, let me grab a tea...
15:22 timotimo did you see we got an sql output backend added to the profiler?
15:22 tadzik oh! no
15:22 tadzik that's nice
15:22 timotimo it's got an issue, but it might be a good idea to throw the json stuff away from the qt profiler
15:22 timotimo since it has that unreasonable size restriction on input files
15:22 tadzik right
15:23 tadzik 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?
15:23 timotimo on tadzik's github
15:23 * dogbert17_ looks
15:23 tadzik dogbert17_(IRC): https://github.com/tadzik/p6profiler-qt, but as timotimo says, may not be useful for you if gc's what you're after
15:24 timotimo you can re-run the profile and use a --profile-filename=foo.sql
15:24 timotimo 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
15:24 tadzik sqlitebrowser!
15:25 dogbert17_ interesting
15:25 tadzik that sounds useful
15:25 timotimo it is a good tool
15:25 timotimo it gets very confused when you give it the raw .sql file
15:25 tadzik heh
15:25 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
15:26 timotimo 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
15:26 timotimo panda has been very valuable for a very long time
15:26 * [Coke] now wishes zef was called zuul.
15:26 dogbert17_ we were fighting with it a couple of pages up, we had some problems with symbolic links
15:28 timotimo aye, tux' csv repository has symlinks to subfolders that don't exist in it
15:28 timotimo you have to do some manual work (maybe just run the makefile) to make those appear
15:28 timotimo but panda's first order of business is to copy over the repo to a temporary work oflder
15:29 timotimo 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 :)
15:30 |Tux| timotimo, just tell me what to fix
15:30 |Tux| the symlinks to outside the repo could be removed from the repo and put in .gitignore
15:30 timotimo how do you usually make the binaries for the other languages implementaitons appear?
15:31 timotimo oh wait, they are to outside the repo?
15:31 timotimo it's not, though?
15:31 timotimo csv-rust-qckrdr is a symlink to rust-quick-reader/target/release/quick-reader
15:31 Ven joined #perl6-dev
15:32 |Tux| those are *in* the repo, but they should not be installed
15:32 timotimo we have a different interpretation of "outside", then
15:32 timotimo it's not about being installed, though
15:32 timotimo it's just about making a temporary work folder for panda to work in
15:33 timotimo for the temporary work folder to contain what the module needs to build, it has to copy over everything
15:33 timotimo that includes these symbolic links purely because they are part of "everything"
15:33 |Tux| panda doesn't need all the stuff I included to be able to compare timings against other languages
15:34 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 timotimo or we should make it copy symlinks preserving the symlinks
15:34 timotimo or you'll just kick out the symlinks and generate them in the same script that builds these implementations
15:34 |Tux| or I should split off Text::CSV::Timings from Text::CSV
15:35 timotimo yeah, that'd also be a good step forward
15:35 timotimo i still think panda ought to know about symlinks when it copies stuff around
15:35 timotimo though maybe for security reasons we should limit symlinks to stuff inside the work copy
15:35 |Tux| but that would be after two weeks, as I go skiing Friday :) \o/
15:35 timotimo cool
15:36 |Tux| timotimo, if META6.json can have an "exclude" list, that would be the easiest approach
15:36 timotimo no
15:36 |Tux| because?
15:36 timotimo the working copy thing is an implementation detail of panda
15:37 |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
15:37 timotimo that is correct
15:38 |Tux| should I switch to zef?
15:38 timotimo that's a matter of taste at this moment
15:38 timotimo zef is seeing more development than panda, though
15:39 |Tux| I'll switch when told to. Until then, my automated procedures will use panda
15:39 IOninja Yes, use zef.
15:40 |Tux| try «zef -?» and understand why I didn't so far :)
15:40 |Tux| or zef --help
15:40 timotimo No matches for wildcard “-?”.
15:40 timotimo fish: zef -?
15:41 timotimo what's the issue with zef -\? or zef --help?
15:41 IOninja |Tux|: what am I looking for?
15:41 |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
15:42 timotimo sure
15:42 timotimo i'm looking at the output that you mean
15:42 timotimo it seems sice
15:42 |Tux| https://gist.github.com/Tux/50​9974a8909f1efd09bcf5e75aa16379
15:43 timotimo huh
15:43 timotimo are you running latest zef?
15:43 IOninja |Tux|: that's because you're running outdated version :/
15:43 |Tux| I don't know :)
15:43 |Tux| panda install zef ?
15:43 |Tux| ==> Testing zef
15:43 |Tux| Unhandled exception in code scheduled on thread 3
15:43 |Tux| no such file or directory
15:44 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?
15:44 |Tux| from rakudobrew
15:44 IOninja |Tux|: rakudobrew build-zef
15:45 |Tux| :)
15:47 |Tux| «zef install Foo» installed Foo :) from FROGGS
15:48 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 IOninja True™ Perl 6 module manager.
15:49 timotimo that's fair
15:50 |Tux| I just switched to zef. That means that it is unlikely that I will report any problems with panda in the future
15:51 * |Tux| wonders if this would also help dogbert17_
15:53 |Tux| 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
15:53 buggable IOninja, zef 'It's like [cpanm] wearing high heels with a tracksuit': https://github.com/ugexe/zef
15:54 IOninja |Tux|: ^ report it.
15:57 Geth ¦ rakudo/nom: 0c6281518e | (Zoffix Znet)++ | 2 files
15:57 Geth ¦ rakudo/nom: Fix crash IO::Path.lines(*) and make it 3.2x faster; lizmat++
15:57 Geth ¦ rakudo/nom:
15:57 Geth ¦ rakudo/nom: The original issue that led to impl of IO::Path.lines has been
15:57 Geth ¦ rakudo/nom: resolved in IO::Path.lines, so toss the impl and use the much
15:57 Geth ¦ rakudo/nom: faster IO::Path.lines to do the work.
15:57 Geth ¦ rakudo/nom: review: https://github.com/rakudo/rakudo/commit/0c6281518e
15:57 timotimo neato
15:58 Geth ¦ roast: 465795c458 | (Zoffix Znet)++ | S16-io/lines.t
15:58 Geth ¦ roast: [io grant] Test IO::Path.lines(*) does not crash
15:58 Geth ¦ roast:
15:58 Geth ¦ roast: Rakudo fix: https://github.com/rakudo/rakudo/commit/0c6281518e
15:58 Geth ¦ roast: review: https://github.com/perl6/roast/commit/465795c458
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 :)
16:00 |Tux| IOninja, reported
16:04 dogbert17_ |Tux|, I try Zef and see how it works
16:06 Geth ¦ roast: add852b082 | (Zoffix Znet)++ | S16-io/lines.t
16:06 Geth ¦ roast: Test IO::Path.lines can do sink-all
16:06 Geth ¦ roast:
16:06 Geth ¦ roast: Cover the issue exposed with
16:06 Geth ¦ roast: https://github.com/rakudo/rakudo/commit/0c6281518e
16:06 Geth ¦ roast: that needed a `try` added.
16:06 Geth ¦ roast: review: https://github.com/perl6/roast/commit/add852b082
16:11 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:12 IOninja Probably not :)
16:21 AlexDaniel joined #perl6-dev
16:22 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.
16:29 IOninja GAH
16:29 IOninja s:1st/IO::Path/IO::Pipe/; in that commit message
16:30 IOninja and :2nd too -_-
16:31 IOninja and s:3rd/IO::Path/IO::Handle/;
16:31 IOninja I'm clearly in love with IO::Path :)
16:32 IOninja Damn, the roast messages are wrong too. 6 mentions of IO::Path... All wrong :)
16:57 agentzh joined #perl6-dev
17:11 agentzh joined #perl6-dev
17:16 timotimo whoops :S
17:32 ugexe japhb: thats correct
17:33 ugexe eventually it will be able to pick up where it last left off
17:48 dogbert17 joined #perl6-dev
19:16 dogbert17 [Coke]: RT #131027
19:16 synopsebot6 Link:  https://rt.perl.org/rt3//Publ​ic/Bug/Display.html?id=131027
19:19 [Coke] dogbert17: danke
19:24 ugjka joined #perl6-dev
19:28 lizmat it's always good to make things faster by removing other things  :-)
19:42 RabidGravy can you create github issues by email?
19:43 lizmat hmmm.  don't know, but if we could, wouldn't that create the same problem that RT has with spam ?
19:45 jsimonet joined #perl6-dev
19:45 RabidGravy yeah, it's just I get bug reports on my P5 modules to rt and I want them in github :-\
19:45 RabidGravy cut and paste then
20:02 samcv good *
20:02 IOninja \o
20:10 AlexDaniel 🙋
20:15 nebuchad` joined #perl6-dev
20:23 japhb_ joined #perl6-dev
21:08 lizmat so what's up with http://pl6anet.org ?   seems like the feed is all mixed up ?
21:13 jnthn Hm, odd...I don't see the post I wrote this week, which is usually aggregated there
21:14 IOninja stmuk_: what's happening? ^
21:16 jnthn lizmat: If you're doing weekly, I did a blog post for once, anyways :)
21:17 lizmat jnthn: it's the headliner  :-)
21:17 jnthn I'm hyper about racing to the top :P
21:18 lizmat tentative title of this week: How To Race A Hyper
21:28 bartolin r: use nqp; say nqp::eqaddr(buf8.WHAT,Buf[uint8].WHAT) # RT #130914
21:28 synopsebot6 Link:  https://rt.perl.org/rt3//Publ​ic/Bug/Display.html?id=130914
21:28 camelia rakudo-moar 0c6281: OUTPUT: «1␤»
21:28 camelia ..rakudo-jvm fb4f16: OUTPUT: «0␤»
21:28 bartolin j: use nqp; say nqp::jvmeqaddr(buf8.WHAT,Buf[uint8].WHAT)
21:28 camelia rakudo-jvm fb4f16: OUTPUT: «1␤»
21:28 IOninja cool
21:28 IOninja Why is there a separate op for that?
21:29 * bartolin has no idea
21:30 bartolin it looks like jvmeqaddr isn't used anywhere (neither nqp nor rakudo)
21:34 timotimo there's not even a part in the compiler that creates a reference to it?
21:37 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
21:38 timotimo i wonder if we just never needed that? or are we just using eqaddr and that does just what we need anyway?
21:39 lizmat wasn't it the point that it doesn't do the same ?
21:39 timotimo dunno
21:39 lizmat fwiw, I would hate to have to fix all calls to nqp::eqaddr to special case the JVM  :-(
21:40 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?
21:40 bartolin lizmat: in that case we could just change the eqaddr op on JVM :-)
21:41 lizmat that would be brill  :-)
21:41 * bartolin will try to take a look at the eqaddr vs. jvmeqaddr thing (but not today)
21:42 timotimo IOninja: one day /quit and didn't /connect again
21:43 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:54 lizmat and another Perl 6 Weekly hits the Net: https://p6weekly.wordpress.com/2017​/03/20/2017-12-how-to-race-a-hyper/
21:57 timotimo lizmat: it ate the infix:<,> or what it was
21:57 timotimo because triangle brackets scare wordpress
21:58 lizmat grrrr
21:59 lizmat timotimo++  # fixed
22:32 jnthn lizmat++
22:32 * jnthn always finds stuff in the weekly he didn't know about :)
22:36 cognominal lizmat++
22:42 lizmat jnthn: a thought: currently the behaviour of an iterator after it has produced an IterationEnd is undefined, right ?
22:43 lizmat I was thinking that in a parallel world, that could be less than useful
22:43 lizmat perhaps we need to force an iterator to always produce an IterationEnd after it produced its first IterationEnd
22:43 timotimo no
22:43 timotimo when you go from regular iterators to hyper-land, it'll have a piece of coordination in place for you
22:43 lizmat fwiw, most if not all internal iterators already have that behaviour
22:43 jnthn .iterator is consistently intended as the sequential iterator
22:44 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
22:45 timotimo are you for serial, .iterator?
22:45 jnthn :P
22:45 dct joined #perl6-dev
22:45 timotimo hmmm
22:45 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.
22:46 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
22:47 lizmat well, I was prototyping my ideas   :-)
22:47 jnthn Aha :)
22:48 lizmat anyway, I dislike the nomans' land that the end of an iterator is in
22:49 lizmat 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
22:49 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
22:52 jnthn I'd assumed that iterator protocol violation would be rare
22:52 jnthn Since it's single-threaded so you can't race on it, so you pretty much have to mis-behave and ignore IterationEnd
22:52 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
22:53 jnthn Which could happen
22:53 timotimo make IterationEnd die when sunk? :P
22:54 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
22:54 lizmat and already in there, really
22:56 jnthn To consistently keep returning IterationEnd?
22:56 lizmat yup
22:57 lizmat in many cases, for iterators depending on iterators, it's just a matter of passing along  :-)
22:57 jnthn True
22:58 lizmat jnthn: re https://github.com/jnthn/p6-concurrent-iterato​r/blob/master/lib/Concurrent/Iterator.pm6#L26  , why don't you throw the exception immediately ?
22:59 lizmat looks like this way the exception could be thrown on another thread then where it originated from
23:00 jnthn It does rethrow
23:00 lizmat but with the next pull ?
23:00 jnthn A CATCH that doesn't have a when/default will just rethrow always
23:00 jnthn So we just stash it away and let it flow onwards
23:00 lizmat ah, so any other pull will throw the same exception
23:00 jnthn Right
23:00 lizmat from any other thread
23:01 lizmat gotcha
23:01 jnthn Yeah, the idea is if you have competing workers they all get killed
23:01 timotimo a little bit of a massacre
23:01 lizmat wouldn't it make more sense to kill them with a more descriptive message
23:01 lizmat like "killed because worker X got killed"
23:02 lizmat I mean, it could be that the exception doesn't make any sense for some of the workers
23:02 lizmat and would be unhelpful with debugging
23:02 timotimo "permission denied while adding two numbers"
23:03 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 jnthn But with iterators it's all fairly synchronous
23:04 jnthn 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 :-)
23:04 lizmat especially with 400 workers running  :-)
23:05 jnthn A 400 core CPU would be ace for the spectests :)
23:05 jnthn We could do a mixin thing like we do with Promise
23:05 jnthn Well, await
23:05 jnthn That's quite nice in so far as you retain the original type
23:05 jnthn So smart-matching on exception types still works
23:05 jnthn That always annoyed me in C#...the exception got wrapped in an AggregateException in some cases then you had to go unpacking it...
23:07 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
23:07 lizmat instead of re-throwing
23:07 jnthn No, I think all of them should see the exception
23:07 jnthn Imagine they were doing something in LAST
23:08 lizmat hmmm
23:08 jnthn (Some kind of "I successfully finished my work" action)
23:08 lizmat eh, how could they be doing something in LAST ?  you mean, when they receive IterationEnd ?
23:08 jnthn Yeah
23:08 lizmat ok
23:09 timotimo right, we'd want to trigger something for unsuccessful end instead
23:09 jnthn *nod*
23:09 jnthn OK, it's late, I should go rest
23:09 jnthn Still shaking off the cold
23:09 lizmat good night, jnthn!
23:09 lizmat sleep well
23:09 jnthn 'night!
23:09 jnthn Thanks :)
23:10 timotimo gnite!

| Channels | #perl6-dev index | Today | | Search | Google Search | Plain-Text | summary