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