cono ok, looks like I finally got idea of GC_DEBUG, set MVM_GC_DEBUG_LOG_FLAGS to 3. And not it prints debug!!! 07:53
but this program: perl6 -e 'my $thread = Thread.new(code => { say "Hello" }); $thread.run; $thread.finish' 07:54
gives me segfault :(
as I understood it tries to print debug info about frame $*CTX_MAIN or something like this, and it doesn't have REPR->id 07:55
actually obj->st gives 0x0
But dont understand what this STables means :( 07:56
nine cono: the STable is somewhat like the class 08:04
lizmat ugexe++ # ugexe.com/perl-toolchain-summit-201...and-perl6/ 08:07
hmmm.. it looks like my last Mix changes triped up some mix tests 08:10
*tripped 08:11
will look at them later today
jnthn morning o/
lizmat jnthn o/
4 tests failing, 4 TODO's now passing 08:12
TODO's were marked "submix behavior still under discussion" about 2 years ago
jnthn That balances out, at least... :P
lizmat yeah :-) could be worse 08:13
jnthn was woken up by construction noise... 08:15
lizmat it *is* the last commit that causes this regression, but that should only apply to Mix (<=) Bag and Bag (<=) Mix behaviour
and the tests are only about Mix (<=) Mix, weird 08:16
jnthn At first I thought the pub was dismantling its summer terrace and thought "noooo...." A glance outside suggested not. Next guess was that they were finally fixing the pavement. But no, just scaffolding going up on a building 1 down from mine...
m: say Mix ~~ Bag
camelia False
nine When cleaning, I found 4 adaptors for european power plugs to british sockets. So that's how often I've been to LPW... 08:21
Man I suck at packing for travel :)
Geth roast: b57be1c07a | (Elizabeth Mattijsen)++ | S03-operators/set.t
Remove tests for (<=) and friends

  (<=) and friends are now more thoroughly tested in S03-operators/subset.t
08:31
lizmat afk for a few hours& 08:32
cono nine: does that mean that frames shouldn't have STables ? 08:39
jnthn Frames may or may not have an STable 08:40
They're born without in the call stack region, but if needed are promoted onto the heap
(for example in the event of closure or a continuation control)
cono so stack frame of the closure can reborn to class? 08:41
can => should
jnthn Yes, there's a promote_to_heap or so function in frame.c that does this 08:43
Effectively, the rule is that callstack -> heap references are fine but heap -> callstack ones are not
cono collect.c:286 then wrong, we shouldn't print REPR(item)->ID 08:44
if (item->flags & (MVM_CF_NURSERY_SEEN | MVM_CF_HAS_OBJECT_ID)) { as this is not an object
jnthn Ah
Yeah, I pretty much never use GCDEBUG_LOG with MVM_GC_DEBUG_COLLECT 08:45
And I doubt anyone else much does
Any more at least
Since it produces just incredibly much output 08:46
cono how do you usually investigate spoil of the gen2root ? or any other memory area?
as I'm getting: $3 = {forwarder = 0x110dbc0, sc = {sc_idx = 17882048, idx = 0}, st = 0x110dbc0}
jnthn Typically by switching on stuff in src/gc/debug.h
cono which is incredibly high index
jnthn It's a union though 08:47
So the sc_idx part may not be relevant
cono if MVMCollectable of what type its not relevant? 08:48
jnthn It's not about type, it's about lifetime 08:49
cono as (gdb) print new_addr->flags -> $1 = 0
jnthn forwarder is set by the GC after moving an object
st is only used after death 08:50
And is used to chain types that need collecting into a linked list
If forwarder is still set in the object that was copied, then it's possible that an outdated reference was seen at some point 08:51
Geth rakudo/refactor-handle-encoding: 2f2930ab91 | (Jonathan Worthington)++ | src/core/Rakudo/Internals/VMBackedDecoder.pm
Fill out more of VMBackedDecoder.
rakudo/refactor-handle-encoding: 303b7eb526 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Switch getc to use streaming decoder.
rakudo/refactor-handle-encoding: 5786587972 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
In char mode, make read go via. streaming decoder.

To facilitate mixed char/binary mode I/O (with the usual caveats that one must be aware of things like normalization buffering, which isn't anything new). In binary mode, we fast-path it directly to the binary I/O, which is an optimization over what happens in MoarVM today.
jnthn But an object can't be all of dead, moved, or the new copy, so we can use a union for those 3 things and make every object smaller 08:52
s/object/collectable/ is probably more precise 08:53
Geth rakudo/refactor-handle-encoding: b9297918c3 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Make binary slurp-rest go via. read.
08:54
cono but in roots.c:294 we are not checking anything about dead this collectable or not, and trying to mark_collectable, which tries to get sc_idx
or if collectable -> collected, we actually shoulnd't have it in gen2roots ? 08:55
jnthn Yes, it appears something is in gen2roots that should not be 08:56
There's a function in debug.c that can take an address an tell you if it's in any thread's fromspace
If you catch the crash under GDB then it's usually possilbe to call it wiht the address you see in forwarder 08:57
If it's found, that would strongly suggest that you're looking at an object that was already moved, but then somehow accessed at its own address
That most often happens as a result of a missing use of MVMROOT
cono forwarder or current object? 09:01
jnthn I'd expect it to find either of them, but finding forwarder to point to a valid memory address would be a good indicator 09:02
cono (gdb) call MVM_gc_debug_find_region(tc, new_addr->sc_forward_u) or ->forwarder prints nothing to me :( 09:03
jnthn What about calling it just on new_addr? 09:04
cono that what I did first :)
zero
jnthn Also, if you p *(new_addr->forwarder)
cono there is no forwarder
only via union: sc_forward_u 09:06
and all of them prints me nothing
jnthn Hmmm 09:07
cono wait a moment, it should print to me atleast line "Not found" but i don't see even this
ah, its in different console 09:08
yeah, I see Not found for all 3
anyway, thanks for help. Will continue to dig into this :) 09:11
jnthn Thanks for digging :)
jnthn is knee deep in I/O refactoring
Geth rakudo/refactor-handle-encoding: 938a6141b4 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Re-implement change of IO::Handle encoding.

Allowing a type object to be passed to indicate "no encoding", and making an argument of 'bin' translate into that.
The most common use for this is a switch of encoding prior to doing any I/O, but when passing it at `open` time is not an option. For all ... (11 more lines)
09:51
jnthn Aww, I hoped that would fix up the issue that busted precomp when I switched over .get 10:07
oh wait
I didn't actually use it
Yay, it worked once I added the "switch to binary mode" :) 10:12
Zoffix Did Laurent release the source for their book for free? I'm looking at this "protip", but there's not a word about it in the repo itself: irclog.perlgeek.de/perl6/2017-05-10#i_14561091 10:15
Also, it got finished already, right? I see it's listed here as "in work": perl6.org/resources/ 10:16
moritz: also yours is still listed as "Perl 6 by Example"; needs an update? perl6.org/resources/ 10:17
Geth rakudo/refactor-handle-encoding: ad3de5d70b | (Jonathan Worthington)++ | src/core/CompUnit/Loader.pm
Switch to binary mode before passing precomp to VM

We have used char mode I/O to .get various things from the start of the file. This means some bytes will be hanging around in the decode stream. Switch the handle to binary mode, which will seek the file handle to the right place.
10:20
rakudo/refactor-handle-encoding: c63c103879 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Switch IO::Handle.get over to using the decoder.
nine jnthn: ah, looks like a very easy fix then :) 10:25
jnthn nine: Well, it was after I re-did IO::Handle.encoding :)
I just realized that it does more work in there than it needs to also, so fixing that too 10:26
Geth rakudo/refactor-handle-encoding: 606e452bad | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Update IO::Handle.eof to check decoder.
10:36
rakudo/refactor-handle-encoding: 31195bd1eb | (Jonathan Worthington)++ | 2 files
It helps if all the code agrees on a method name.
Zoffix jnthn: when do you estimate that branch would be merge-ready? 10:39
jnthn If we're lucky, tomorrow 10:40
But still got quite a few spectest failures
But I didn't yet fix up all the methods :)
And some seem to be because I hand back an extra empty string at EOF 10:41
Which upsets some number of tests
Zoffix Great. 10:42
jnthn Hmm
Apart from not in a simple test csae
huh, there's an empty line at the *start* of some output?! 10:46
more fun stuff, it seems .lines is doing it but that's one of the methods I didn't yet re-work 10:48
Guess it's time
[Tux] This is Rakudo version 2017.05-84-g5ebf307af built on MoarVM version 2017.05-24-gd86a35b6 10:49
csv-ip5xs 2.644
test 13.648
test-t 4.418 - 4.322
csv-parser 13.190
jnthn Actually, it's lunch time. :-) Will work on .lines after 10:50
bbiab
lizmat Files=1196, Tests=59338, 209 wallclock secs (12.84 usr 5.10 sys + 1256.53 cusr 119.29 csys = 1393.76 CPU)
lizmat is starting to think the failing mix tests have been passing for the wrong reason in the past 10:52
yup, tests are all faulty: 11:08
m: dd mix(a => 2.2); # does NOT give you a mix with "a" with a weight of 2.2 11:09
camelia Unexpected named argument 'a' passed
in block <unit> at <tmp> line 1
lizmat m: dd mix("a" => 2.2); # does NOT give you a mix with "a" with a weight of 2.2
camelia (:a(2.2)=>1).Mix
lizmat it gives you a Mix with a Pair with weight 1
Geth roast: 09d2f87c13 | (Elizabeth Mattijsen)++ | S03-operators/mix.t
Fix Mix creation, and remove now passing TODO's
11:14
roast: f0b918071e | (Elizabeth Mattijsen)++ | S03-operators/mix.t
Remove tests for (<=) and friends

They are now covered more thoroughly in subset.t
11:17
Zoffix (re Laurent's book): yup: github.com/LaurentRosenfeld/thinkp...-303986422 11:45
Geth rakudo/nom: 428324d155 | (Elizabeth Mattijsen)++ | t/spectest.data
Add thorough testing of (<) and friends
12:05
lizmat afk& 12:06
CptnObvious .tell lizmat mentioning it, just in case. Do not remove any files from t/spectest.data, since the same list is used by 6.c-errata test run (at least for now). 12:07
yoleaux CptnObvious: I'll pass your message to lizmat.
Zoffix .... which reminds me of another thing I was meaning to do months back... make per-lang-ver t/spectest.data :\ 12:08
Geth roast/newer-cat-handle: 7022dc846d | (Zoffix Znet)++ | S32-io/io-cathandle.t
de-public @.handles attr
12:26
rakudo/newer-cat-handle: ac39c9a07e | (Zoffix Znet)++ | src/core/IO/CatHandle.pm
Use nqp array to keep CatHandle's handles in
12:31
rakudo/newer-cat-handle: dc76252159 | (Zoffix Znet)++ | src/core/IO/CatHandle.pm
Remove cathandle overengineering
12:32
Zoffix lulzwut... "Binary files a/S32-io/io-cathandle.t and b/S32-io/io-cathandle.t differ" 12:35
I think I broke git :)
Geth roast/newer-cat-handle: 8c22156d9c | (Zoffix Znet)++ | S32-io/io-cathandle.t
Make test file pass by default

use `plan 0` for yet untested stuff
12:36
Zoffix and github :S "Binary file not shown. "
... and `file` command. wtf
Geth rakudo/refactor-handle-encoding: 03fd91f991 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Update .lines and .nl-in to use decoder.
12:37
jnthn Zoffix: You can put something in .gitattributes to insist to git that it's a binary file
Zoffix Well, I didn't put anything, so I guess it's not it 12:38
jnthn uh, that it's a *text* file 12:40
To override its default gues
*guess
Zoffix Ah.
jnthn My module Data::TextOrBinary borrows the git algo fwiw :)
So may give an idea what's going on
Wow, not a single spectest for method readchars 12:41
I guess it's convered indirectly by IO::Handle.words 12:42
Zoffix A bunch of stuff (was) entirely untested. Last week I wrote the first ever tests for &prompt 12:44
jnthn :)
Zoffix++
Your extra tests will almost certainly reduce the change that I inadvertantly break something
Geth rakudo/refactor-handle-encoding: bc8d93736e | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Fix up .tell to respect decoder's buffer.
12:45
jnthn *chance, even :) 12:46
Yay, down to just one use of a char-mode nqp::op in IO::Handle, which is coincidentally the last #?if jvm in the file too 12:50
Zoffix Speaking of readchars; it's busted on JVM; perhaps this refactor fixes the issue: rt.perl.org/Ticket/Display.html?id...et-history 12:51
j: "/tmp/Foo.pm6".IO.spurt: "ā™„"; "/tmp/Foo.pm6".IO.open.readchars(1).say
camelia ļæ½
jnthn Yeah, there's a workaround there that will bust anything not in BMP 12:52
Hopefully I'll fix us that
Zoffix \o/
lol... just got a notification from an issue I created in 2015. It starts with "Just some of my feedback for what I found confusing on the tutorial; I'm totally new to Perl 6:" :) github.com/adambard/learnxinyminut...ssues/1390 13:09
Time flies.
ZofBot: swat them!
ZofBot Zoffix, name(), "\n", &
Zoffix m: my $f = "/tmp/foo{rand}".IO; $f.spurt("a\nb\nc"); with $f.open -> $cat { my @res; @res.push($_) while ($_ = $cat.get) !~~ Nil; dd @res } 13:18
Zoffix wonders why that hangs
camelia (timeout)
jnthn 'cus .get returns the Str type object, not Nil?
Zoffix Should return Nil
jnthn Really?
Zoffix m: my $f = "/tmp/foo{rand}".IO; $f.spurt("a\nb\nc"); with $f.open -> $cat { dd ( $cat.get xx 20 ) }
camelia ("a", "b", "c", Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil).Seq
Zoffix Ah 13:19
m: my $f = "/tmp/foo{rand}".IO; $f.spurt("a\nb\nc"); with $f.open -> $cat { my @res; @res.push($_) while ($_ is default(Nil) = $cat.get) !~~ Nil; dd @res } 13:20
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3 $cat { my @res; @res.push($_) while ($_7ā5 is default(Nil) = $cat.get) !~~ Nil; dd
expecting any of:
infix
infix stopper
ā€¦
Zoffix well, by the time it gets to Nil check, it's an Any already :)
jnthn ("a", "b", "c", Str, Str, Str, Str, Str, Str, Str, Str, Str, Str, Str, Str, Str, Str, Str, Str, Str).Seq
In my local branch
I guess we'll see if there's a spectest for this :P
Zoffix :}
Geth rakudo/refactor-handle-encoding: 3b649f4dcb | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Clean up now streaming decoder used in most places
13:21
rakudo/refactor-handle-encoding: cca3ef3c80 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Switch readchars to use the streaming decoder.
jnthn Think I'm about at the "hunt busted tests" point with this branch 13:22
Maybe should rebase it on nom 13:23
Zoffix I'm at "Bogus statemen" stage with mine :P
jnthn 'cus some of them are from missing changes
Zoffix hm, looks like the binary stuff and this "bogus statement" is due to scp'ing a file off sshfs'ed partition :S if I copy/paste it into target off my editor, it works fine 13:26
Geth rakudo/refactor-handle-encoding: 17 commits pushed by (Jonathan Worthington)++
review: github.com/rakudo/rakudo/compare/c...d4948aee3e
13:27
jnthn So, 12 test files that have some kind of regression 13:30
Zoffix nope... scping from box itself still has the issue :S Atom says encoding is utf8.. I'm at a loss :/
jnthn Odd 13:31
jnthn never used sshfs 13:32
Geth rakudo/refactor-handle-encoding: d19f780376 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
.get should give Nil, not Str, at eof.
13:34
rakudo/refactor-handle-encoding: 582c39dfbf | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Don't treat empty file as having one empty line.
jnthn That gets me down to 8 test files needing attention
Zoffix looks like bad copy has a bunch of crap at the end: (hex diff): github.com/zoffixznet/debug/commit...ed0e5e3698 13:35
Zoffix sticks to copy-pasting from atom to pico for now 13:36
jnthn argh 13:46
Geth rakudo/newer-cat-handle: 7c63f6a4c4 | (Zoffix Znet)++ | src/core/IO/CatHandle.pm
Die if CatHandle.new was given nothing to cathandle
rakudo/newer-cat-handle: 4ad8b1792a | (Zoffix Znet)++ | src/core/IO/CatHandle.pm
[io grant] Implement IO::CatHandle.get
jnthn no wonder stuff ended up pretty broken for slurp when I removed the old encoding stuff
Geth roast/newer-cat-handle: 9833012763 | (Zoffix Znet)++ | S32-io/io-cathandle.t
[io grant] Test IO::CatHandle.get
jnthn IO::Path.slurp is poking in to the IO::Handle guts and using nqp::readcharsfh 13:47
Zoffix oh crap. I forgot about that one
:) when we were talking about nothing poking into guts of IO::Handle
jnthn There is a sensible optimization to do here, if we know we're slurping up the whole file 13:48
In that we don't have to set up a streaming decoder, we can just do it all at once
Zoffix & 13:53
Geth rakudo/refactor-handle-encoding: 173c33d20a | (Jonathan Worthington)++ | src/core/IO/Path.pm
Update IO::Path.slurp for IO::Handle changes.

This still tries to do some amount of fast-pathing by avoidng the cost of the setup of a streaming decoder by opening in binary mode (or at least, we'll do so once MoarVM's file handle support switches to be binary only), and doing the decode in a single swoop. More may be possible; in the meantime, this gets things working again.
14:02
jnthn Down to 5 test files that need a looing at
*looking
OK, 3 failures are tests I think want reconsidering 14:10
4 others I need to look in to
Zoffix Geth: uptime 14:36
Geth Zoffix, 1 week, 3 days, 23 hours, 46 minutes, and 30 seconds
Zoffix \o/ looking good :) 14:37
jnthn Grr, tracked down one of the problems 14:47
Inconsistent API is inconsistent
Zoffix But is it consistently inconsistent? >:} 14:52
jnthn No, it was mostly reasnonably designed
Fixed it in MoarVM to do what I thought it was doing
Hurrah, that strikes argfiles from my list 14:53
Zoffix m: dd "\n\x[308]c".comb 15:05
camelia ("\n", "\x[308]", "c").Seq
Zoffix m: with '/tmp/foo70'.IO { .spurt: "\n\x[308]c"; with .open { dd [ .getc xx 20 ] } } 15:06
camelia ["\n", "\x[308]", "c", Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]
jnthn m: say uniname 308
camelia LATIN CAPITAL LETTER J WITH CIRCUMFLEX
jnthn m: say uniname 0x308
camelia COMBINING DIAERESIS
jnthn Thought it was a combiner you were trying out :)
Zoffix weird. getting "\n\x[308]c" as a return from .getc in cathandle :S 15:07
jnthn You can't put a combiner onto a control char
fwiw
:)
Zoffix Yeah :)
jnthn Cool, I have 3 passing todos
1 test I agree I should fix 15:08
And 3 that I think want discussion
Zoffix: Do you think we should continue with having .encoding return 'bin' when the handle is in binary mode? 15:10
Zoffix jnthn: as opposed to returning Str type object instead? 15:12
jnthn Yeah
I mean, it's not a "real" encoding
Zoffix Yeah, type object sounds good.
jnthn OK.
What about an unopened handle? 15:13
That also now returns Str
Zoffix Yeah, also good.
jnthn I wonder if Nil would be more consistent...
Zoffix m: with '/tmp/foo70'.IO { .spurt: "\x[308]aā™„b\x[308]ā™„cā™„"; with .open { dd ( .getc xx 10 ) } } 15:14
camelia ("\x[308]", "a", "ā™„", "bĢˆā™„cā™„", Nil, Nil, Nil, Nil, Nil, Nil).Seq
Zoffix That's a bug innit?Ā The last item has two hearts and c and b with combiner
jnthn Looks odd 15:15
Zoffix m: with '/tmp/foo70'.IO { .spurt: "bā™„cā™„"; with .open { dd ( .getc xx 10 ) } } 15:17
camelia ("b", "ā™„cā™„", Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil).Seq
Zoffix m: with '/tmp/foo70'.IO { .spurt: "aā™„c"; with .open { dd ( .getc xx 10 ) } }
camelia ("a", "ā™„c", Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil).Seq
Zoffix m: with '/tmp/foo70'.IO { .spurt: "aā™„cd"; with .open { dd ( .getc xx 10 ) } }
camelia ("a", "ā™„", "cd", Nil, Nil, Nil, Nil, Nil, Nil, Nil).Seq
jnthn Heh, its survived the refactor 15:18
Zoffix aww
jnthn I get I can guess what it is too
Zoffix What?
jnthn Something to do with the normalization buffer, which hangs on to a char 15:19
Or more
So getc tries to grab a char, then if it can't looks if there's anything more in the file, sees not, then does a "get all" operation on the buffer, figuring that there's only one more char to force out 15:20
m: with '/tmp/foo70'.IO { .spurt: "acd"; with .open { dd ( .getc xx 10 ) } }
camelia ("a", "c", "d", Nil, Nil, Nil, Nil, Nil, Nil, Nil).Seq
jnthn m: say uniname 'ā™„'
camelia BLACK HEART SUIT
Geth rakudo/refactor-handle-encoding: 0210297cbf | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Correct a typo.
15:22
rakudo/refactor-handle-encoding: 0f6cce7f78 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
.getc should return Nil, not Str, at the end.
rakudo/refactor-handle-encoding: 280c34f27b | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Fix bug in .encoding switching.
jnthn At least I've been careful enough to preserve bugs :P 15:23
Zoffix :) 15:24
jnthn m: say Str // 0 || 42 15:26
camelia 42
jnthn m: say 1 // 0 || 42
camelia 1
jnthn m: say 1 // 2 || 42
camelia 1
jnthn m: say Str // 2 || 42
camelia 2
Zoffix Filed as rt.perl.org/Ticket/Display.html?id=131365
jnthn Alright
Think I've hunted down the last regression, then it's just bin/:bin to consider 15:27
Plus syncing up a MoarVM patch with the JVM impl
And I likely need to switch on newline translation
So Windows will be happy 15:28
Zoffix hoh
j: with '/tmp/foo70'.IO { .spurt: "aā™„cd"; with .open { dd ( .getc xx 10 ) } }
camelia ("a", "ā™„", "c", "d", Nil, "\0", "\0", "\0", "\0", "\0").Seq
Zoffix \0s after the first Nil 15:29
jnthn That one may well be fixed by my work
Geth rakudo/newer-cat-handle: 3b668b6804 | (Zoffix Znet)++ | src/core/IO/CatHandle.pm
[io grant] Implement IO::CatHandle.getc
15:31
roast/newer-cat-handle: 2f65a72df5 | (Zoffix Znet)++ | S32-io/io-cathandle.t
[io grant] Test IO::CatHandle.getc

1 TODOed test due to IO::Handle.getc bug:
  rt.perl.org/Ticket/Display.html?id=131365
15:32
jnthn Zoffix: I guess we'll also drop :enc<bin>? 15:38
Zoffix jnthn: yeah
Geth roast: 45ce2fa4b1 | (Jonathan Worthington)++ | S32-io/open.t
Eliminate test doing open with :enc and :bin.
15:57
roast: e6bf69bb91 | (Jonathan Worthington)++ | S32-io/open.t
Re-work tests for :bin and .encoding.

Todo'd one of them that will fail until the I/O encoding refactors branch is merged.
rakudo/refactor-handle-encoding: 2e12cea2da | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Don't be so eager to avoid trying to read.

Removing these checks is probably a speed-up anyway, but we also rely on them issuing a read to generate errors when we try to read from a handled opened for write.
15:59
rakudo/refactor-handle-encoding: caacd25515 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Allow :bin to be set at construction time.

And use it as a default to `open`, just like we do for things like
  `:enc`, `:nl-in`, etc.
rakudo/refactor-handle-encoding: 3a396b48a1 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Need a fresh decoder after a seek.
rakudo/refactor-handle-encoding: 51c73ba066 | (Jonathan Worthington)++ | src/core/IO/Handle.pm
Use Nil to signal no encoding (thus :bin mode).
16:00
Zoffix m: gist.github.com/zoffixznet/269379a...94dd05187e 16:01
camelia 5===SORRY!5=== Error while compiling <tmp>
P6opaque: missing attribute protocol in compose of B2
at <tmp>:2
Zoffix m: class Foo does Blob {} 16:02
camelia 5===SORRY!5=== Error while compiling <tmp>
P6opaque: missing attribute protocol in compose of Foo
at <tmp>:1
Zoffix Filed as rt.perl.org/Ticket/Display.html?id=131366 16:03
jnthn m: class Foo does Blob is repr('VMArray') {}
camelia ( no output )
jnthn Probably needs that
Zoffix Ahhh 16:04
jnthn: so should I just close the ticket?
Hmm... "NEW version is 220.63x faster" 16:06
But is it 220x wronger...
jnthn Zoffix: Hm, we may be able to try and figure out that it needs the different REPR 16:07
I forget exactly how that part works
Zoffix "NEW version is 3141.78x faster" 16:08
haha :D 16:09
jnthn o.O
Wow
Yay. All passing spectests, plus todo passes also
Zoffix "NEW version is 51497.76x faster"... k looks like O(n) changed. /me plugs that change in and strestests 16:10
jnthn So, remaining with my branch is (1) try it on Windows and probably fix up missing translate-nl stuff, and (2) patch up JVM the way I did Moar and then see what's busted 16:11
Zoffix Cool
Geth nqp: ab01023b30 | (Jonathan Worthington)++ | tools/build/MOAR_REVISION
Bump MOAR_REVISION for decoder API fix.
16:14
nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...86a35b6... No newline at end of file
4c522faf03 | (Jonathan Worthington)++ | t/moar/05-decoder.t
nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...86a35b6... No newline at end of file
34b728e541 | (Jonathan Worthington)++ | 2 files
jnthn haha
Zoffix heh 16:18
jnthn It somehow went missing in the previous bump, my commit added it back
jnthn Righty, home time 16:21
heh, well, except I noticed the JVM spectest I set off before heading there spat out No subtests run for every single test 16:29
And then did it for make test too
But running under prove it seems make test looks...better 16:31
*sigh* but 99-test-basic.t seems to hang 16:32
While precompiling Test.pm 16:33
Guess that's what I'll be looking at in the morning, then...
bbl
Geth rakudo/nom: 7ecb59dcd5 | (Samantha McVey)++ | src/core/Str.pm
8% speed increase for .starts-with() Str method

We can apply the same simplification and speed up other methods for Str as well, as there are many which use nqp::getattr which uses more CPU time than not.
16:45
Zoffix m: my $b = Blob.new: 1..1000; .signature.say for $b.^lookup("splice").candidates 16:46
camelia ( no output )
Zoffix dafuq? the method is there but there are no candidates?
m: dd Any.^lookup("splice") 16:48
camelia Method+{<anon|56674624>} splice = method splice (Mu $: | is raw) { #`(Method+{<anon|56674624>}|48479896) ... }
Zoffix Ah. It's not a multi
Is that it?
m: Blob.new.splice: 42
camelia Use of uninitialized value of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
in block <unit> at <tmp> line 1
Cannot resolve caller splice(Blob, Int); none of these signaturesā€¦
Zoffix ^ cause that error is LTA. It says "none of these signatures match:" and ends 16:49
Filed as rt.perl.org/Ticket/Display.html?id=131367 16:52
dammit... my amazing speedup changes fail spectest because it doesn't return a blob of the right type 16:54
which amusingly is mostly caught by my new IO tests and not buf tests :P 16:56
ah -str- tests bufs, ok 16:58
ZofBot: you're on Buf robot, I tell you!
ZofBot Zoffix, I was looking at the pi bug we discussed the other day, changing snprintf from "%.15g" to "%.16g" makes one test fail in t/spec/integration/advent2013-day15.t
Zoffix ZofBot: great work. Carry on!
ZofBot Zoffix, I think I just don't understand the use case where it would ever matter if the thread changes...
Zoffix (these responses would be impressive if I didn't remember conversations they came from :P) 16:59
nebuchadnezzar: ???? works with Perl 6. It's just not a valid identifier. You need to make it one. 17:00
m: my \term:<????> = 42; say ???? + ????
camelia 84
Zoffix hits a snag 17:03
Or, I guess not. It's just IO::CatHandle can be made from a mix of Cools and IO::Handles. And some of those handles might be opened in char mode, but others in binary mode. 17:05
Maybe I need a new attribute: if it's set, then for already-opened handles, set chomp/nl-in/encoding to that of the cathandles attributes; if it's not set, then leave the handles alone 17:10
I'm gonna go with: always set them when switching to already opened handle; otherwise there'll be all sorts of crashes when, say, trying to $cat.slurp with a mix of handles opened in bin/char modes 17:12
Zoffix gives it a rest and will wait for jnthn++'s merge to see how the encoding is signaled now. 17:13
.tell jnthn BTW what do you think of making IO::Handle.encoding consistent with other attributes? You can change $fh.chomp/.nl-in/.nl-out by assigning to them, while $fh.encoding takes an arg instead. I kinda left it alone, but if we're doing all these refactors that touch encoding, maybe we should nail that consistency too? 18:43
yoleaux Zoffix: I'll pass your message to jnthn.
Zoffix Hehe. A ticket asks to consider 6 year olds reading the error message :D I like that it doesn't sound crazy :) 19:33
.oO( make a Perl 6 distro targeted for kids... )
ugexe my $last = @arr.poop; 19:34
Zoffix :) 19:35
geekosaur well, really that ticket is yet another 'perl 5 programmer trap detection considered harmful'
oh wait, no, I'm confusing tickets
Zoffix Yeah :)
geekosaur it's the octal one that's 'p5 considered harmful'
Zoffix I'm talking about the octal one. 19:36
But most langs use 0n for octals, so it's not P5 only :)
And the other one about the dot: while `"42".ā¤abs` works, `42.ā¤abs` doesn't. 19:37
AlexDaniel Zoffix: well, you have to use spaces around your infix ops 19:39
that's not the only case where it doesn't work
Zoffix m: sub infix:<ā™„> { $^a ~ $^b }; say "look ma"ā™„"no spaces" 19:41
camelia look mano spaces
Zoffix m: sub infix:<.> { $^a ~ $^b }; say "look ma"."no spaces"
camelia 5===SORRY!5=== Error while compiling <tmp>
Quoted method name requires parenthesized arguments. If you meant to concatenate two strings, use '~'.
at <tmp>:1
------> 3{ $^a ~ $^b }; say "look ma"."no spaces"7ā5<EOL>
Zoffix m: sub infix:<.> { $^a ~ $^b }; say "look ma".ā¤"no spaces"
camelia 5===SORRY!5=== Error while compiling <tmp>
Unsupported use of . to concatenate strings; in Perl 6 please use ~
at <tmp>:2
------> 3 infix:<.> { $^a ~ $^b }; say "look ma".7ā5<EOL>
Zoffix heh
AlexDaniel: how's this: gist.github.com/zoffixznet/e0d7417...96ce9e9476 19:43
AlexDaniel Zoffix: looks better 19:44
but why isn't it a compile-time error? 19:45
like, SORRY! Leading 0 is not allowed
Zoffix AlexDaniel: it's a compile time warning 19:46
AlexDaniel yes, why warning?
so that you can silence it and continue?
Zoffix I'm guessing "Because Perl 5". Same as why the hell is Int == 0
m: say Int == 0 19:47
camelia Invocant of method 'Bridge' must be an object instance of type 'Int', not a type object of type 'Int'. Did you forget a '.new'?
in block <unit> at <tmp> line 1
Zoffix Which amusingly you can't evaluate with half the ops
AlexDaniel bangs his head against the wall
Zoffix ehh... the message change is blocked by a dumb test
Zoffix needs to relocate
AlexDaniel Zoffix: but yes, the text is better 19:48
Zoffix AlexDaniel: though now that you pointed out that it's an error and not a warning, perhaps the "Not allowed" part is wrong? 19:56
Iirc, I added that part last time I improved that message
m: 05 19:57
camelia Potential difficulties:
Leading 0 does not indicate octal in Perl 6. Please use 0o5 if you mean that.
at <tmp>:1
------> 03057ā5<EOL>
WARNINGS for <tmp>:
Useless use of constant integer 5 in sink context (line 1)
Zoffix yeah
AlexDaniel well, it can say that leading zeros do nothing
Zoffix s/'Leading zero is not allowed.'/'Leading zero has no meaning'/ 19:58
Gonna do that when I get to a computer
perlpilot idly wonders if the octal message should mention quoting in case they meant '05' 20:12
Geth roast: 2705ff130b | (Zoffix Znet)++ | S15-literals/numbers.t
Make 067 warning check less exact

The test is not part of 6.c-errata, and perhaps this sort of tests that test exact textual content of error/warning messages should be excluded from errata.
21:13
roast: 243964211f | (Zoffix Znet)++ | S19-command-line/repl.t
Move octal warning REPL test to rakudo/t

The test is not part of 6.c-errata, and perhaps this sort of tests that test exact textual content of error/warning messages should be excluded from errata.
rakudo/nom: 666350af93 | (Zoffix Znet)++ | t/02-rakudo/repl.t
Move octal REPL warning test from roast to rakudo test suite

Moved from github.com/perl6/roast/commit/243964211f
Marked as TODO because the available REPL testing function doesn't appear to test STDERR. The entire test file should be reworked with better testing routines. Marking the two tests as TODO until then.
21:14
rakudo/nom: b6694bd0b3 | (Zoffix Znet)++ | src/core/Exception.pm
Improve octal-leading-zero warning

  - Remove wording about leading zero not allowed, since we only warn
   and don't throw, so obviously it is allowed.
  - Do not assume the user definitely meant to write an octal;
   Fixes RT#131361: rt.perl.org/Ticket/Display.html?id=131361
  - Add suggestion for if the user meant to write a string; perlpilot++
21:16
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=131361
Zoffix Hah. Samba vuln... I guess I'm finally going to be updating my ancient Linux frankenbuntu box :P thehackernews.com/2017/05/samba-rce-exploit.html 21:26
.tell jnthn perhaps we shouldn't add $.bin to IO::Handle and simply have $.encoding.defined.not to mean binary mode? For example, if I have a handle made with `my $fh = IO::Handle.new: :path<foo>, :$bin`, then `$fh.open: :enc<ascii>` might die complaining about both enc and bin, and I need to write it as `$fh.open: :enc<ascii> :!bin` 21:49
yoleaux Zoffix: I'll pass your message to jnthn.
jnthn I added it so there was a way to specify binary mode when doing the IO::Handle.new(...) approach 21:53
yoleaux 21:49Z <Zoffix> jnthn: perhaps we shouldn't add $.bin to IO::Handle and simply have $.encoding.defined.not to mean binary mode? For example, if I have a handle made with `my $fh = IO::Handle.new: :path<foo>, :$bin`, then `$fh.open: :enc<ascii>` might die complaining about both enc and bin, and I need to write it as `$fh.open: :enc<ascii> :!bin`
jnthn The introspection aspect of it was a side-effect of that. 21:54
I think if you construct it with :bin and then open with a :enc then you deserve the exception yet get.
Zoffix Ah, right. OK
jnthn It probably suggests confusion of some kind anyway
I added it 'cus we had a test that I couldn't express any more (it did .new with :enc<bin>) 21:55
The other option woulda been to toss the test
But it felt a bit odd that you could .new with enc, nl-in, nl-out, and friends but then not bin. 21:56
Zoffix Yeah, I didn't think about the case where you wanted to .new in bin
ugexe does reworking Proc to use Proc::Async have any new ramifications regarding IO from a proc spawned in a thread (..lol?) 22:10
timotimo hm. is it the case that until now starting a synchronous Proc would not spawn an event loop thread? 22:14
ugexe i have no idea! 22:15
jnthn At present, if you make a Proc on one thread, but then try to read the .out or .err on another thread you'll have problems 22:17
My intention was to address that
Geth rakudo/newer-cat-handle: 25b664a2d6 | (Zoffix Znet)++ | src/core/IO/CatHandle.pm
[io grant] Implement IO::CatHandle.words
22:18
roast/newer-cat-handle: a4a7eaabd7 | (Zoffix Znet)++ | S32-io/io-cathandle.t
[io grant] Test IO::CatHandle.words
ugexe yeah, i just assumed there would be some sort of downside as well 22:20
Geth roast/newer-cat-handle: 33048a4c28 | (Zoffix Znet)++ | S32-io/io-cathandle.t
Don't spec IO::CatHandle.slurp-rest
22:21
rakudo/newer-cat-handle: 2eb8a25f18 | (Zoffix Znet)++ | t/02-rakudo/07-io-cathandle.t
Test .slurp-rest throws X::Obsolete..
Zoffix is & for the day 22:22
timotimo Zoffix: this is a very nitty pick, but the exception about leading 0 won't tell you that a number is invalid octal if it has different digits that mean 8 or 9
(i don't have any on hand, and i'm not sure if anybody would ever actually run in this in The Real Worldā„¢)
ugexe *currently* if i spawn a process that itself spawns processes i seem to hit open 3 problem deadlocks a lot 22:23
Zoffix doesn't get what you mean, timotimo
What different digits that mean 8 or 9?
timotimo u: nine
unicodable6 timotimo, U+0039 DIGIT NINE [Nd] (9)
timotimo, U+00AA FEMININE ORDINAL INDICATOR [Lo] (ĀŖ)
Zoffix Ah, right
unicodable6 timotimo, 143 characters in total: gist.github.com/0a8824930c49660296...c0bc19abb8
timotimo m: say 0oļ¼™
camelia 5===SORRY!5=== Error while compiling <tmp>
'ļ¼™' is not a valid number
at <tmp>:1
------> 3say 0oļ¼™7ā5<EOL>
timotimo wait what :Ī“ 22:24
m: say 0o9
camelia 5===SORRY!5=== Error while compiling <tmp>
'9' is not a valid number
at <tmp>:1
------> 3say 0o97ā5<EOL>
timotimo that's not a cool error message
Zoffix heh
m: say 0ą­Æ
camelia Potential difficulties:
Leading 0 has no meaning. If you meant to create an octal number, use '0o' prefix; like, '0oą­Æ'. If you meant to create a string, please add quotation marks.
at <tmp>:1
------> 3say 0ą­Æ7ā5<EOL>
9
Zoffix I've no idea how to improve hat.
Othat than something crazy like .combing and +'' each char :D 22:25
Zoffix &
timotimo we are able to regexmatch on unicode properties and such, and we can also use unival here 22:26
m: say unival($_) for "789ą­Æ"
camelia 7
timotimo m: say unival($_) for "789ą­Æ".comb
camelia 7
8
9
9
timotimo and the "is not a valid number" one should at least include the base if it isn't base10 (or maybe always) 22:27
jnthn ugexe: Yeah...well, if we do it in terms of Proc::Async then we can the natural way would be for it to shove input as it arrives into a channel 22:28
ugexe: And the sync reads pull from that
ugexe: That means we don't deadlock, though of course we pay in memory.
But at some point we'll need to cross the general issue of supplies and back-pressure 22:29
So I don't mind kicking that issue down the road some
ugexe i thought Supply already had stuff for that 22:30
jnthn yes and no
I mean, there's natural back-pressure if you are the source, because you are paying the cost of the processing 22:31
But data arriving on the event loop schedules its handler on the thread pool
And the input queue to the pool is unbounded
There's things like throttle, but those are largely about throwing data away 22:32
We don't yet have a way to push back on the event loop
ugexe yeah thats what I was thinking of. I thought you could just vent-at some other Supply, but then where does it end I guess 22:33
jnthn Well, yes :)
In general, though, I'm not fond of the synchronous Proc API. I mean, for run/shell/qx it's fine, but once it's more complex I'd much rather deal in Proc::Async's API 22:34
But we have it, and need to support it 22:35
timotimo ugexe: it makes me mildly uncomfortable that the urls in the blog post about the cpan testers reporter will result in "report not found" :(
ugexe timotimo: well tell them to stand up their new api already :P
jnthn I'd just rather supporting it didn't mean two separate proc spawning impls to support in MoarVM
Which is what we've got today 22:36
timotimo oh, we can submit but it won't reach the front-end yet if it's p6?
ugexe jnthn: yes agree. i've done the fake-async with Proc to get some things working on jvm before
this probably also fixes the :merge issues
jnthn Oh, 'cus no Proc::Async on JVM...
That'll be nice to have fixed :) 22:37
ugexe timotimo: yeah it submits. but not even perl 5 reports that are submitted to it (if that has happened yet) would show up
they do get stored though because a UUID is returned and I saw them look one up on the db
jnthn Sleep time here; will get some more work on the file handle stuff in tomorrow :) 22:38
timotimo oh, i didn't know it doesn't work for p5 either
exciting times for our ecosystem 22:39
ugexe jnthn: definitely, probably fix precomp deadlocks too
timotimo: yeah their new api is generic - its for any kind of test report
timotimo uh oh, do i sense a tiny bit of second system syndrome? ;) 22:40
ugexe a perl6 report was the first report to it though
timotimo cool!
how long before PTS did this get started?
ugexe you can still report to p6c testers if you install Net::HTTP and use `--p6c-testers`
timotimo once we can retire p6c-testers, p6c will have so much less cpu load ;)
ugexe the new api? not sure
i believe they discussed it on the flight there 22:41
timotimo and the staging compunit repo is also quite exciting 22:43
ugexe there is also build.pm replacement stuff that got worked out but its not done yet 22:46
timotimo that's such a hairy topic 22:47
definitely nice to have
but damn, i wouldn't dare touch something like that
ugexe design.perl6.org/S22.html#Dependency_hints 22:48
timotimo oh, is this old speculations already? 22:49
ugexe we try to abuse `by-$SOME-DYNAMIC-VAR.method` as filters
that was added at PTS
timotimo ah
ugexe version 1 of meta6 spec 22:50
timotimo how do you handle when multiple overlapping values?
i.e. "if it's windows, do this, except if it's windows and the version is 3.11" 22:51
ugexe there is no dyn var to get the os version?
timotimo well, windows may be a bad example
"oh yeah if the kernel version's 4.9.23, use this workaround library" 22:52
ugexe m: say $*DISTRO.version
camelia v42.2
timotimo that's opensuse afaik
ugexe so they'd put by-distro.version => whatever
you can have multiples, but first match wins i believe 22:53
timotimo OK
does that mean you can nest 'em?
ugexe yeah i believe you can nest as many levels as you need 22:54
timotimo that's kind of cool. also terrible things will be done with this 22:55
it'll be annoying that you can't reference things across branches 22:56
i have no idea if it'd ever appear in practice, but you might have lots of repetition 22:57
Geth rakudo/nom: ec51e73fcd | (Zoffix Znet)++ | 2 files
Detect non-ASCII digits > 7 octal warning; timotimo++
timotimo cool, Zoffix++ 22:59
oh yes, an "emulates" function 23:00
ugexe people should not be writing build.pm stuffs often enough for that to be a serious problem
timotimo why don't we have a "phpbb" key for the "support" section? ;) ;) 23:01
ugexe or we could come up with a way to do json spec and ref
timotimo i find it really weird to have "phone" in there, but i realize i'm living in a very narrow world with regards to that 23:02
ugexe (with potential cost indication)
timotimo yup
the section "support" lists a few things as "possible keys are", but lacks "license" which is introduced as another possibility in the next section 23:03
also, no mention of "or" and "and" in the spdx license string
i'm amazed JSON::Fast is used as an example ;) 23:04
i don't understand the second paragraph under "bin" 23:06
for the :from adverb 23:07
it seems to be about :from<bin> as well as the bin/ folder in a distribution
but it doesn't point out that it switched topics in between the paragraphs
it should be possible to put data: urls for dlls and such in the depends section :D :D :D 23:08
i'll go to be dnow 23:09
have a good one!
ugexe :from<bin> and :from<lib> just hint where to look for the dependency... its referring to system stuff 23:14
e.g. `is wget bin available?` or `is gtk library available?` 23:15