Zoffix AlexDaniel: haha, that looks super uncomforttable 00:48
AlexDaniel Zoffix: better than staring outside :) 00:49
Zoffix: but yes, it is way more comfortable if you manage to find a seat
timotimo ugh, using syncthing on a git repository but ignoring the .git is also super bad :\ 00:50
Zoffix wtf that `with` there was just to check for Failures, so it can be rewritten as nqp::istype(..., Failure) 00:55
s/wtf/FWIW/
timotimo hm, but changing it to .defined is no functional change ... maybe it's fine to do the failure thing, though
when we let undefined values through, we'll get an error from ==, though? 00:56
m: Numeric == 1e5
camelia WARNINGS for <tmp>:
Useless use of "==" in expression "Numeric == 1e5" in sink context (line 1)
Use of uninitialized value of type Numeric in numeric context
in block <unit> at <tmp> line 1
AlexDaniel “s/wtf/FWIW/” XD
timotimo not error, of course
MasterDuke_ does anyone have an opinion whether github.com/rakudo/rakudo/blob/nom/...#L705-L708 looks better than just `IntStr.new((my int $mode = nqp::stat($!abspath, nqp::const::STAT_PLATFORM_MODE) +& 0o7777), sprintf(q|%04o|, $mode))` 00:58
timotimo: `a` is already defined according to the signature. could `a.Numeric` ever be undefined? 01:00
timotimo sure 01:03
m: say "hello".Numeric
camelia Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5hello' (indicated by ⏏)
in block <unit> at <tmp> line 1

Actually thrown at:
in block <unit> at <tmp> line 1
Zoffix m: say defined "hello".Numeric 01:04
camelia False
Zoffix m: say defined class { method Numeric { Int } }.Numeric 01:05
camelia False
MasterDuke_ ugh, let's pretend i never asked that
Zoffix :D
AlexDaniel: do you program Perl 6 on that laptop? 01:06
MasterDuke_ AlexDaniel: yeah, i was wondering if you were trying to start the next trend like planking. will it go viral, "the most awkward Perl6 programming situation challenge"? 01:08
timotimo be like the dude who's gaffer-taped to the ceiling 01:09
AlexDaniel Zoffix: yes 01:13
Zoffix \o/ 01:14
AlexDaniel MasterDuke_: that sounds pretty cool 01:22
BenGoldberg I've got a silly question. I know in C, one can provide optimization hints with things like __builtin_expect(). Is there, or will there be, a way for perl6 users to provide optimization hints? 01:38
Not necessarily that specific hint, but in general...
Zoffix You already can with `is pure`; it means a sub can be constant-folded at compile time 01:39
And all the autothreaded stuff is a hint the compiler may use more then one thread to execute stuff (though ATM it's unimplemented) 01:40
MasterDuke_ is cached for memoization 01:41
AlexDaniel m: sub foo($a) is pure { rand }; say foo(42); say foo(42) 01:46
camelia 0.213078763462177
0.592591903192249
AlexDaniel that's probably misuse :)
Zoffix m: sub foo($a) is pure { rand }; for ^3 { say foo(42) }
camelia 0.792531094789826
0.792531094789826
0.792531094789826
BenGoldberg How valuable would it be for rakudo to be able to automatically transform something like this: multi sub foo(Bool $b) { if( SPECIALIZE($B) ) { return stuffiftrue() } else { return stuffiffalse() } } into multi sub foo(True) { stuffiftrue() }; multi sub foo(False) { stuffiffalse() }
AlexDaniel Zoffix: right, that's what it means
right, right
geekosaur thinsk more helpful would be boxing analysis.. which he would someday like to tackle
BenGoldberg m: sub foo($a) is pure { rand }; for ^3 { say foo(42) }; for ^3 { say foo(42) }
camelia 0.784828960315073
0.784828960315073
0.784828960315073
0.922750986110419
0.922750986110419
0.922750986110419
geekosaur scans back and wonders what Ashenzari has to do with anything :p
I mean, currently I think you could do it for, say, a loop, but not over an entire sub 01:50
MasterDuke_ i think jnthn and timotimo have commented that (un)boxing had a lot of optimization potential
geekosaur it does, yes, which is why I'm interested. my two worries are the one I mentioned, and that I suspect brrt will have a heart attack >.> 01:54
(currently things generate code in place, which would need to change because later code might flip something that looks like an unboxing win into a lose) 01:55
MasterDuke_ geekosaur: i know nothing about boxing analysis, have you done it before? 02:00
geekosaur not actively but in this case that's not much of a problem. I understand it reasonably well though 02:01
as long as we're not getting too jiggy with it e.g. there are cases where you might win from having both boxed and unboxed versions of something sitting around, trading space and update performance for read performance, but that gets rather more complicated 02:02
MasterDuke_ would it be added to spesh, the jit, or its own thing? 02:03
geekosaur seems to me it works best as part of code gen, which si why my earlier comment 02:04
MasterDuke_ ah, right
geekosaur rewriting the generated code after the fact like spesh would be possible, but loses optimization opportunities: if you do it at a higher level, you can unbox over most of a program 02:05
I think that's pretty impossible with the way code gen currently works thougjh
so maybe the first version would go with spesh and be effectively peephole optimization 02:06
MasterDuke_ i'd take that 02:10
Zoffix damn 03:29
perl6 -e "dd 'bar.txt'.IO.open(:w).lock(0x10 + 1)" throws on Linux, but not on Windows :/
Zoffix rewrites the tests to use suckier exceptions 03:33
Seems X::IO::CannotLock + X::IO::Locked was too ambitious 03:34
mst hm?
Zoffix Well, I wanted to throw X::IO::CannotLock when the user asked for shared lock on fh opened in write, or exclusive for fh opened in read, but apparently on Windows that doesn't throw 03:36
(code for the nqp::lockfh op on MoarVM: github.com/MoarVM/MoarVM/blob/a844...#L303-L358 )
And X::IO::Locked for when asked for non-blocking lock and we couldn't get it 03:37
mst ok, but surely you could change it so win32 does throw? 03:45
Zoffix Probably. 03:46
.... 03:52
and .unlock on a non-locked handle doesn't throw on Linux but does throw on Windows -_- 03:53
ZofBot: day of opposites
ZofBot Zoffix, } sub cmp-ok(Mu $got, $op, Mu $expected, $desc?) is export {
Zoffix Unlocking seeks stuff? Or is it just a copy-pastaed text in error: github.com/MoarVM/MoarVM/blob/a844...ile.c#L371
Zoffix assumes the latter 03:54
mst maybe github.com/baudehlo/node-fs-ext/bl.../fs-ext.cc is helpful? 03:56
Zoffix I think so. 04:04
I don't know C tho :}
mst I only sort of know C
Zoffix huggable: locking :is: github.com/baudehlo/node-fs-ext/bl.../fs-ext.cc
huggable Zoffix, Added locking as github.com/baudehlo/node-fs-ext/bl.../fs-ext.cc
mst like, I can make things that compile and *then* segfault
Zoffix :)
mst whereas I'm actually good at perl, which is why I can write pure perl code that segfaults *while* compiling 04:05
Zoffix heh
"P6opaque: must compose X::Comp::AdHoc before allocating" ugghh what's its problem? gist.github.com/zoffixznet/3f01831...c58c6f226e 04:13
BenGoldberg X::Comp::AdHoc.^compose, maybe? 04:18
Zoffix ?
ah, OK. I forgot to change the .lock calls in core 04:20
nope, not it 04:24
god dammit
Geth nqp/uncurse: 211b0f2ba3 | (Pawel Murias)++ | src/vm/moar/profiler/template.html
Fix bitrot in moarvm profiler
04:31
nqp/uncurse: 30a965887f | (Pawel Murias)++ | src/vm/js/Compiler.nqp
[js] Stuff to fix nqp::p6initied
nqp/uncurse: 9063d0ec3f | TimToady++ | 2 files
Merge branch 'master' into uncurse
rakudo/uncurse: 6 commits pushed by (Elizabeth Mattijsen)++, (Timo Paulssen)++, TimToady++ 04:32
Zoffix it was due to has $.os-error; in the class; which is also present in the inherited-from X::IO 04:50
TimToady Zoffix: lemme know when you're in a state that I can merge uncurse, cuz I'm now thinking it would better to get it into this release so we don't risk divergent nqp bootstraps (and to get the 1-2% performance boost) 04:53
and it does seem fairly stable 04:54
and it doesn't seem to be interfering with where you're working so far
Zoffix TimToady: merge away :) 04:55
TimToady ookay
Geth nqp/master: 17 commits pushed by TimToady++, (Jonathan Worthington)++
review: github.com/perl6/nqp/compare/30a96...9063d0ec3f
04:58
rakudo/nom: 20 commits pushed by TimToady++
review: github.com/rakudo/rakudo/compare/e...b7c036c082
¦ rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....1-g9063d0e
TimToady done 04:59
I just had visions of someone using the next Rakudo Star 3 months from now and depending on old Cursor/Match stuff... 05:00
plus, lets me un-todo a test :) 05:02
Zoffix \o/
m: dd Q:b:s|\$fh| 05:06
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$fh' is not declared
at <tmp>:1
------> 3dd Q:b:s|\7⏏5$fh|
Zoffix :b doesn't enable backslashing of stuff like that?
TimToady nope, just the usual suspects
though arguably adding :s should add a backslasher for $ 05:07
m: say Cursor.WHAT 05:10
camelia (Cursor)
TimToady m: say Cursor.WHAT
camelia (Match)
TimToady Cursor is now just an alias to Match 05:11
Zoffix m: my $fh = 42; put q:s|$fh| 05:13
camelia 42
Zoffix m: my $fh = 42; put q:s|\$fh|
camelia \$fh
Geth roast: 6db316eaae | TimToady++ | S05-match/perl.t
now pass two Match.perl roundtripping tests
05:16
roast: 4194755c19 | (Zoffix Znet)++ | S32-io/lock.t
[io grant] Test IO::Handle.lock/.unlock
05:39
rakudo/nom: 214198bfb2 | (Zoffix Znet)++ | 5 files
[io grant] Implement proper args for IO::Handle.lock
chatter29 hey guys 05:50
allah is doing
sun is not doing allah is doing
to accept Islam say that i bear witness that there is no deity worthy of worship except Allah and Muhammad peace be upon him is his slave and messenger
Zoffix No way! The Flying Spaghetti Monster is our true saviour! 05:52
Zoffix starts a holy war
Yey! I won. 05:58
ZOFFLOP: t/spec/S17-promise/nonblocking-await.t 06:00
Geth rakudo/nom: 9a2446c94f | (Zoffix Znet)++ | src/core/IO/Path.pm
[io grant] Move Bool return value to signature

As I recall a recentish commit doing the same elsehwere went it, with the reasoning that the signature return is a bit faster.
06:01
Zoffix ZOFVM: Files=1241, Tests=133735, 111 wallclock secs (22.32 usr 3.29 sys + 2308.44 cusr 144.68 csys = 2478.73 CPU) 06:20
m: 'foo' ~~ /(.)/; say so $0 06:31
camelia 1
Zoffix bisect: 'foo' ~~ /(.)/; say so $0
bisectable6 Zoffix, Bisecting by output (old=2015.12 new=9a2446c) because on both starting points the exit code is 0
Zoffix bisect: 'foo' ~~ /(.)/; say $0.^name 06:32
bisectable6 Zoffix, bisect log: gist.github.com/88d99014caf30866f5...704aff2cf8
Zoffix, There are 20 candidates for the first “new” revision. See the log for more details
Zoffix, On both starting points (old=2015.12 new=9a2446c) the exit code is 0 and the output is identical as well
Zoffix, Output on both points: «Match»
Zoffix m: 'foo' ~~ /(.)/; say $0.^name
camelia Match
Zoffix s: do { 'foo' ~~ /(.)/; $0 }, 'Bool', \()
SourceBaby Zoffix, Something's wrong: ␤ERR: No such method 'cando' for invocant of type 'NQPRoutine'␤ in block at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 26␤ in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 29␤ in block <unit> at -e line 6␤␤
Zoffix s: Match.new, ' 06:33
SourceBaby Zoffix, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Unable to parse expression in single quotes; couldn't find final "'" ␤at -e:7␤------> <BOL><HERE><EOL>␤ expecting any of:␤ single quotes␤ term␤
[Tux] This is Rakudo version 2017.03-285-g9a2446c94 built on MoarVM version 2017.03-138-g40881cdb
csv-ip5xs 3.048
test 12.503
test-t 5.120 - 5.144
csv-parser 13.154
Zoffix s: Match.new, 'Bool', \()
SourceBaby Zoffix, Something's wrong: ␤ERR: No such method 'cando' for invocant of type 'NQPRoutine'␤ in block at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 26␤ in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 29␤ in block <unit> at -e line 6␤␤
Zoffix m: Match.new.Bool.say 06:34
camelia 1
Zoffix wonder where NQPMatchRole is at 06:39
Ah, just needed to pull nqp
k, got a fix lined up 06:40
Geth rakudo/nom: 88140bbedf | (Zoffix Znet)++ | src/core/Match.pm
Fix Match.Bool

Return a proper Bool instead of an Int
06:53
roast: 35402f654d | (Zoffix Znet)++ | S05-match/capturing-contexts.t
Test return value of Match.Bool
Zoffix That fixes Pod::To::HTML test breakage
lizmat Files=1191, Tests=56732, 197 wallclock secs (11.95 usr 4.68 sys + 1167.88 cusr 113.64 csys = 1298.15 CPU) 07:38
timotimo geekosaur: not sure how much it'd be worth to do boxing/unboxing analysis at code gen time, because we don't inline very much at that stage 10:06
geekosaur: spesh already has a thing where every version of every local has a "writer" set on it, that you can follow back to find the source of a value, which can for example be a boxing call 10:07
Zoffix Thinking of keeping IO::Path.child as is. Tons of ecosystem usage. Forcing it to resolve is both much slower and potentally throwy if code was written not expecting the path to be resolvable when child is called. Also, the "secure" aspect of it is kinda weak, if you consider the code can be executed by older perl6 and silently become unsecure. Adding an arg to force securiness also isn't a great option, 10:31
since on older compilers it'll be again, silently ignored. So feels like using a new method name and putting `.child` through some deprecation cycle (deprecate in 6.d, remove in 6.e) is the best cource of action. Too bad its name is pretty perfect.
timotimo in 6.f we will then deprecate the new name, reinstate the old name ... 10:32
Zoffix :)
"/user/files/".IO.contain($user-input) 10:33
Decent enough name, but is 1-char away from a bug since IO::Path is Cool
timotimo uuh
Zoffix goes for a nap, to sleep on it
timotimo have a good one! 10:34
Zoffix Well, dispite me joking about it in the upgrade notice, I'm gonna go with .child-secure 13:30
timotimo Zoffix: do you recall the other pastebin services that let you eval perl6 code? besides glot.io?
Zoffix In all the other path methods we don't really resolve the bits (well, other than .resolve, but even then you need to give it an arg) 13:31
huggable: glot.io
huggable Zoffix, Run Perl 6 in your browser: tio.run/nexus/perl6 or glot.io
timotimo yeah, that's the one i remember
oh, tio.run, that's new to me
Zoffix And the -secure in the name will let the reader pay more attention to the code and not modify it to something insecure willi-nilly 13:32
timotimo github.com/hankache/perl6intro/issues/146 - this is why i ask
Zoffix So we'll have: .child, .child-secure that's like child, but fully resolves the path and ensures it is indeed the child, and .concat-with that's like .child but lets the "child" be a parent path. In rakudo, .concat-with and .child are basically aliases, but as far as the language goes, giving parent paths to .child is undefined behaviour and giving them to .child-secure will make it fail 13:33
Or I guess .concat-with and .child will indeed be even specced as aliases. Otherwise, it'll be not recommended to use .child, unless you 100% know it's a child path, which is LTA. 13:39
Why aliases and not just .child? Because .child("../foo") reads stupid
nine Why not $path.sub('foo')? 13:57
Zoffix Feel a bit confusing, since we have `sub` as a term that means subroutines. But why not for which of the three? .child? 14:00
timotimo rt.perl.org/Ticket/Display.html?id=129779 - i just closed this bug; it was the performance bug that we tested yesterday 14:01
thanks to all of y'all for the help with it
Zoffix 'cause .child's ship has sailed, I think. There's like 185 uses in ecosystem alone. Removing it for sake of renaming is too much breakage and IMO the name's pretty good ( .sub("../foo") reads weird to me just as child... though even more so, 'cause my brain switches to "subroutines here" thinking when hearing sub) 14:03
.concat-with is a bit long to type 14:04
.oO( .with )
timotimo there's a python module that repurposes the / operator for path concat
Zoffix :o
timotimo so why not .slash :) 14:05
Zoffix entirely meaningless name 14:06
m: say '.concat-with'.chars - '.slash'.chars 14:07
camelia 6
Zoffix "foo".IO.with("../bar")
$stuff.IO.with($moar-stuff) 14:08
m: say '.concat-with'.chars - '.with'.chars
camelia 7
timotimo just "with" is already something else
Zoffix OK 14:09
nine add? 14:25
.append() would probably be as descriptive and accurate as you can get 14:26
OTOH "appending" is exactly what the current .child does :/ 14:28
Zoffix I like .add 14:31
m: say "foo".IO.append: "../bar"
camelia Cannot resolve caller append(IO::Path: Str); none of these signatures match:
(Any:U \SELF: |values is raw)
in block <unit> at <tmp> line 1
Zoffix So.... rename .concat-with to .add. Yey or nah 14:32
yey from me :)
nine yey
(I know, surprise, surprise) 14:33
Geth rakudo/cat-handle: 031aa33225 | (Zoffix Znet)++ | 4 files
[io grant] Start sketching out IO::CatHandle

Stashing this to finish post-release. Looking closer at IO::ArgFiles impl, IO::CatHandle will need a lot more polish than just renaming IO::ArgFiles and a lot more tests too.
No point in including a rushed and poorly tested work in release.
14:53
Zoffix ^ mostly 'cause I want IO::CatHandle to be mostly-usable with code that uses IO::Handle and IO::ArgFiles is far from being that. 14:54
nine Zoffix: I don't understand the rush to get your IO work into this release anyway. 14:55
Zoffix nine: I guess it's a carry over mentality from my promising to finish my grant by end of March and being totally late with that. Plus, end users won't see stuff that doesn't make it into this release for the next three months. 14:57
nine They have lived with the current state of IO for years. 14:58
Zoffix ¯\_(ツ)_/¯
nine Also if you get all the goodies in now, we'll have fewer to show off in the next release :)
Zoffix heh
nine Oh my...WHAT? The object pulling in CompUnit::Repository::Staging's SC during serialize_repossessions appears to be an NQPRoutine called 'security'. 15:30
There's only one routine with that name in all of our code base. That's the part of Perl6::Grammar responsible for throwing an X::SecurityPolicy::Eval unless MONKEY-SEE-NO-EVAL is active 15:31
What I also know is that there's not some reference to the repo, but one or more references to the serialization context where the Staging repo is in. 15:46
I just realized: there's probably a valid workaround for this issue. The Staging repo is for when you want to precompile modules with an unpriviledged user in a staging area that is different from where the resulting files will be installed into. 16:15
Because the unpriviledged user won't be allowed to write to /usr/share/perl6 directly.
In other words: it's for when we create packages for distributions. Distributions however will do their own dependency tracking. They will compile the modules in depth first order of the dependency tree. 16:16
geekosaur you hope 16:17
nine This means that we can be reasonably sure that the dist we are currently packaging won't contain modules that replace one of its dependencies' dependencies (by providing a newer version).
Thus we can skip the dependency re-resolving on detecting a change in the repo chain (including the offending EVAL).
geekosaur: they have to for all other languages. I'd say it's reasonable to assume they will use the same mechanism for Perl 6 packages. 16:18
Anyway this workaround can be a strictly opt-in thing. The alternative being just biting the bullet and including the dependency on the Staging repo in the precomp file. This can be controlled by the same switch. 16:21
timotimo perl6 is quite nice to work with 16:23
nine timotimo: noticed that, huh? :)
timotimo i don't use perl6 for stuff often enough :) 16:24
i work on internals most of the time instead :) 16:25
nine Yeah, I too have worked on Perl 6 much more than with Perl 6. Very much enjoyed the times when I was just a user :) 16:26
Zoffix timotimo: what's your opinion on .concat-with being renamed to .add ? 16:28
timotimo i think it's acceptable
Zoffix k 16:29
ugexe too bad .subdir doesn't cover all its uses 16:32
nine That's why I suggested .sub. But that may really be just too confusing. 16:35
ugexe or we can draw on this old (unused) code/name github.com/rakudo/rakudo/blob/7556...try.pm#L24 (absolutify... absolutifies... ?) 16:42
although I guess the new functionality is only absolutifying it in spirit... it returns an IO::Path so it might be in relative form. doh 16:43
geekosaur tbh I think haskell's </> operator makes a bit more sense :) 16:49
ugexe github.com/rakudo/rakudo/pull/465 # that was already shut down 16:51
timotimo hm, do we have a good idiom for transposing a list of lists? 16:52
currently i wrote it all wordly-like as [@lol>>.[0], @lol>>.[1], ...] 16:53
Zoffix m: my @lol = (1, 2), (3, 4), (5, 6); dd [ @lol»[0], @lol»[1], ]; dd [Z] @lol 16:55
camelia [(1, 3, 5), (2, 4, 6)]
((1, 3, 5), (2, 4, 6)).Seq
timotimo neat.
Zoffix m: my @lol = (1, 2), (3, 4), (5, 6); dd [ @lol»[0], @lol»[1], ]; dd roundrobin @lol».List
camelia [(1, 3, 5), (2, 4, 6)]
((1, 3, 5), (2, 4, 6)).Seq
timotimo i kind of wish i had more datapoints for building this graphing script 17:21
right now i have 2
oh, i have 4 actually 17:22
or is that the 4 kinds 17:24
.... ?!? 17:26
i don't recognize this data at all m)
Zoffix m: constant %foo = foo => 2; dd %foo<foo> = 42; dd %foo 17:39
camelia Cannot modify an immutable Int
in block <unit> at <tmp> line 1
Zoffix Immutable; good
m: constant %foo = %(foo => 2); dd %foo<foo> = 42; dd %foo
camelia Int % = 42
Hash % = {:foo(42)}
Zoffix Not immutable; eh
m: constant %foo = 'foo', 2; dd %foo<foo> = 42; dd %foo
camelia 5===SORRY!5=== Error while compiling <tmp>
Type check failed in constant declaration of %foo; expected Associative but got List (List)
at <tmp>:1
------> 3constant %foo = 'foo', 27⏏5; dd %foo<foo> = 42; dd %foo
Zoffix don't work like that
m: constant %foo = ('foo', 2).Hash; dd %foo<foo> = 42; dd %foo
camelia Int % = 42
Hash % = {:foo(42)}
Zoffix Seems no easy way to make a constant hash without specifying pairs instead of a list of stuff? 17:40
m: ('foo', 2).pairs.map({ dd .value = .value }) 17:44
camelia Cannot modify an immutable Str
in block <unit> at <tmp> line 1
Zoffix Immutable Str??
Oh nevermind, wrong use of pairs
Ah, there is 17:46
m: constant %foo = Map.new: 'foo', 2; dd %foo<foo> = 42; dd %foo
camelia Cannot modify an immutable Int
in block <unit> at <tmp> line 1
Zoffix m: constant %foo = Map.new: 'foo', 2; dd %foo
camelia Map.new((:foo(2)))
Zoffix uh 17:52
m: constant %foo = Map.new: <foo 2>; dd %foo<foo> = 42; dd %foo
camelia Int <element> = 42
Map.new((:foo(42)))
Zoffix But not in this form :S wtf
s: Map, 'new', \(<foo bar>) 17:54
SourceBaby Zoffix, Sauce is at github.com/rakudo/rakudo/blob/8814...Map.pm#L11
Zoffix s: Map, 'new', \(|<foo bar>)
SourceBaby Zoffix, Sauce is at github.com/rakudo/rakudo/blob/8814...Map.pm#L11
Zoffix m: dd Map.new(<foo bar>)<foo> = 42
camelia Int <element> = 42
Zoffix m: dd Map.new(|<foo bar>)<foo> = 42 17:55
camelia Cannot modify an immutable Str
in block <unit> at <tmp> line 1
Zoffix Seems to do with how slurpies are made 17:56
m: sub foo (*@foo) { dd @foo[1] = 42 }; foo <foo bar>; foo |<foo bar>;
camelia 42
Cannot modify an immutable Str
in sub foo at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix Seems to be part of rt.perl.org/Ticket/Display.html?id...et-history
timotimo fantastic. i get 4 datapoints for every kind X file ... and only three have non-constant values in 'em 17:58
Zoffix Added the Map thing in a comment: rt.perl.org/Ticket/Display.html?id...xn-1456934 17:59
Geth rakudo/nom: 51e462925a | (Zoffix Znet)++ | src/core/IO/Path.pm
[io grant] Amend rules for last part in IO::Path.resolve

Allow last part of path to not exist when using .resolve: :completely; The resolution is still successful, and this lets us
  .resolve(:completely) paths that we're about to create.
18:52
roast: a716962791 | (Zoffix Znet)++ | S32-io/io-path.t
[io grant] Amend rules for last part in IO::Path.resolve

Allow last part of path to not exist when using .resolve: :completely; The resolution is still successful, and this lets us
  .resolve(:completely) paths that we're about to create.
rakudo/nom: b8458d34ae | (Zoffix Znet)++ | src/core/IO/Path.pm
[io grant] Reword `method child` for cleaner code
18:56
rakudo/nom: 1887114dd8 | (Zoffix Znet)++ | 2 files
[io grant] Implement IO::Path.child-secure

The original plan to make .child() resolve and check for secureness was changed to leave .child() as is and implement .child-secure instead
There is a lot of ecosystem usage of .child(), and there's no real path for changing it, since the proposed .concat-with() is not available ... (10 more lines)
19:01
Zoffix More eyes on securiness of .child-secure's code welcome :) 19:02
Geth roast: f3c5dae288 | (Zoffix Znet)++ | 2 files
[io grant] Test IO::Path.child-secure

Also add a nul byte test to IO::Path.child.
19:03
pmurias has nqp-j been correctly rebootstrapped after the adding of constant support in the uncurse branch? 19:26
lizmat m: my @a = [1,1],[2,2],[3,3]; dd @a; @a.splice: 0, 2, $[4,4]; dd @a # feels like a bug that the containerization of [4,4] is being ignored 19:42
camelia Array @a = [[1, 1], [2, 2], [3, 3]]
Array @a = [4, 4, [3, 3]]
pmurias hmm, how do I update the stage0 for the jvm backend? 19:45
timotimo "make bootstrap-files-j" i think?
jnthn lizmat: Yeah, it's because there's a candidate with @new at the end that it binds to, decontainerizing it in the process. 19:49
So it's not actually hitting the slurpy at all
lizmat so you agree it's wrong atm
jnthn The slurpy is **@foo
So in fact if it *was* hitting the slurpy it would be behaving right :)
Yeah, it's wrong to discard the itemization 19:50
lizmat ok, so we are in agreement
jnthn I wonder if it was untested and then accidentally regressed when splice was optimized by breaking it out into a bunch of candidates
lizmat will file a rakudobug
jnthn Since I seem to recall splice getting at least something of a look during the GLR
And I can't imagine we settled on "it ignores itemization" :) 19:51
lizmat commitable: my @a = [1,1],[2,2],[3,3]; @a.splice: 0, 2, $[4,4]; dd @a
committable6 lizmat, ¦my: «Cannot find this revision (did you mean “all”?)»
jnthn bisectable6: my @a = [1,1],[2,2],[3,3]; @a.splice: 0, 2, $[4,4]; dd @a
bisectable6 jnthn, On both starting points (old=2015.12 new=1887114) the exit code is 0 and the output is identical as well
jnthn, Output on both points: «Array @a = [4, 4, [3, 3]]»
lizmat ah
jnthn Hm, nope
It's been like that since Christmas
lizmat ok, doesn't make it right, though :-)
jnthn Indeed
lizmat but will wait for the release to look at fixing it 19:52
jnthn *nod*
Zoffix jnthn: FWIW, I think it's safe to release MoarVM. I'll be doing the nqp::stat thing after release. 19:56
And I'm pretty much done with pre-release stuff for rakudo. Just need to fix this resolve stuff with combiners issue and pretty much that is it
lizmat reported as RT #131162 19:57
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=131162
lizmat Zoffix: at this point we should probably settle for correct :-) 20:02
oops, wrongchan 20:03
Zoffix ZOFFLOP: t/spec/S17-promise/nonblocking-await.t 20:52
Geth rakudo/nom: f6387a8459 | (Pawel Murias)++ | src/Perl6/Actions.nqp
Stop using the no longer needed nqp::p6invokehandler

Now that parrot is no longer supported we can just use the call op instead.
20:55
pmurias (make spectest passed so hopefully this commit won't cause any trouble :) 20:56
Zoffix ZOFVM: Files=1241, Tests=133747, 112 wallclock secs (22.25 usr 2.95 sys + 2329.40 cusr 129.38 csys = 2483.98 CPU) 20:58
Geth rakudo/nom: 9d8e391f3b | (Zoffix Znet)++ | 3 files
[io grant] Fix IO::Path.resolve with combiners; timotimo++

Stuff like "/\x[308]" is interpreted as a path separtor and a filename named as a combiner, when we try to create files. A naive split on '/' doesn't catch these separators however, so we implement heavier logic where we work with bytes, swap all the dir separators to nul bytes (that can't be in paths) and then split on nul bytes.
This also fixes the issue in IO::Path.child-secure, where the path with a combiner is assumed to be a child, even when it isn't.
21:01
roast: 92217f75ce | (Zoffix Znet)++ | S32-io/io-path.t
[io grant] Test IO::Path.child-secure with combiners
timotimo \o/
jnthn Zoffix: OK...I'll do it tomorrow, if that's OK? Bit tired for it today 21:21
Zoffix jnthn: sure :)
Geth rakudo/nom: 0b5a41ba87 | (Zoffix Znet)++ | 9 files
[io grant] Rename IO::Path.concat-with to .add

Per discussion[^1], make the name shorter, so people are more willing to use it as an alias for .child when the path ain't a child path.
  [1] irclog.perlgeek.de/perl6-dev/2017-...i_14436165
21:26
roast: 39677c4059 | (Zoffix Znet)++ | S32-io/io-path.t
[io grant] IO::Path.concat-with got renamed to .add

Rakudo impl: github.com/rakudo/rakudo/commit/0b5a41ba87
Zoffix calls it a day as well :) 21:27
\o 21:28
timotimo nite Zoffix! 21:38
MasterDuke_ timotimo: if you're aren't completly busy making pretty coverage graphs, any more thoughts on sql profile output? i just pushed a commit to my branch that renames the `allocators` table to `types` and the `allocations.id` field to `allocations.type_id` 22:17
timotimo ah, i like that
i'm not sure i know where that branch lives 22:18
MasterDuke_ github.com/MasterDuke17/nqp/tree/m...put_better 22:19
timotimo haha! i was looking for moarvm branches
that doesn't make any sense, of course
okay, so 22:20
callees, right?
it has a caller_id and an id
i expect callees.caller_id to refer to callees.id 22:21
but then how do i get from callees to the corresponding routine?
also, allocations are also per-callees-entry, so we need a connection there, too
MasterDuke_ callees.(caller_)id = routines.id 22:22
yeah, i just saw that allocation <-> callee relationship in the newly-working-again regular profile 22:24
timotimo oh
if both id fields in callees refer to routines, that's Bad
or at least weird 22:25
consider subs A and B both call X, and X calls Y
er ... 22:26
ah, yeah
now Y exists twice at rec_depth 2, X exists twice at rec_depth 1, and Y just has X as its caller_id 22:27
but imagine A and B pass an integer through X to Y and Y sleeps for that long
how do we figure out which Y record belongs to A (sleeps for 10s) and which Y record belongs to B (sleeps for 1s)
does that make sense? 22:29
MasterDuke_ yeah. i'm just pulling the info right from the same data structure the json output is without manipulating it. but it maybe it does need some manipulation or other stuff added to make sense as db rows 22:31
i guess it's losing some of the tree structure 22:33
this would be to replicate the call graph section of the regular profile, right? 22:37
timotimo well, yeah 22:45
exactly
the tree structure got flattened away because we didn't explicitly introduce a new "parent_id" field or something 22:46
and i'd love for a new profiler data explorer to also be able to tell "this routine took 5s when called by A, but 10s when called by B"
and much more importantly
"bind_one_parameter" was called this often by those routines: A, B, C 22:47
MasterDuke_ yes, that would be nice
timotimo yes oh god yes
MasterDuke_ ugh, not thinking very fast today. need to add a unique id every time we see a caller id? 22:52
timotimo hm, a caller_id?
we're walking the tree, right? we should have a new unique ID every time we reach one call graph node, and every node we discover from there (i.e. in the children list or whatever we have) will have the id we just made up set for its "parent" 22:53
MasterDuke_ right. then the existing caller_id is just so we can look up its name in the routines table 22:54
timotimo right
MasterDuke_ caller_id for new unique id, caller_name_id for what caller_id is now? 22:57
timotimo well, we don't really need the id from the caller any more 22:59
so we'd get down to one field that references into the routines table
MasterDuke_ hm, guess so 23:01
timotimo the last time i tried to put something like a unique id and a parent id in, the code absolutely wrecked my brain
i'm really glad you're doing it for me :) 23:02
Zoffix good grief, htmlify.p6's code is a fucking mess 23:05
timotimo hey, weren't you going to bed? ;)
MasterDuke_ heh. it
timotimo imgur.com/a/DKzJj - Zoffix, how do you like my graphs?
Zoffix Was trying to make it replace $COLON$COLON with :: in URLs for the past half hour....
MasterDuke_ 's not like it doesn't take me lots of thinking and staring at the data over and over
Zoffix timotimo: pretty 23:06
timotimo <3
MasterDuke_: yeah, the data is really not glancable
geekosaur Zoffix, that's actually a bad idea, the actual list of special chars permitted in a URL is fairly limited 23:09
Zoffix m: dd ':'.ord.base: 16 23:13
camelia "3A"
Zoffix geekosaur: fine, replaced with %3A%3A
timotimo i think the reason why we have $COLON is because of filesystems?
Zoffix But looks like there are a dozen places that each call different routines and hunting them all down is a PITA
timotimo so maybe have a switch for served vs local docs? 23:14
Zoffix timotimo: yes, and we have rewrite that makes docs.perl6.org/type/IO::Path URLs work, so there's no reason for our URLs to look idiotic with all the $COLON stuff in them
timotimo OK 23:15
Zoffix gives up 23:18
samcv well Zoffix i can fix the $COLON thing. but 23:31
we have to change the servers htacccess file
because it redirects actual colons to $COLON 23:32
so if we fix the build then it'll break the site cause it'll redirect to $COLON
Zoffix samcv: my idea was to keep the files with $COLON; this way the build will still work on Windows. But just change all the URLs in the html files to use :: instead of $COLONs 23:36
samcv: also, it shouldn't be redirecting but just rewriting... where are you seeing the redirects?
I get only one requerst in Firefox 23:37
And yes, there's a way to redirect $COLON urls to :: urls, but that's extra load on the server and extra useless request for suers 23:38
*users
samcv uh maybe it rewrites it 23:39
it probably rewrites it tbh
also we could always just uhm. only use $COLON on windows
then the links in the files will be the same links that the files *actually* are named 23:40
instead of requiring rewriting to even use the html files
Zoffix samcv++ good iead
Zoffix does that
samcv we tried that before 23:41
but it had to be reverted
should be a commit in the history if i look
Zoffix huh.. wonder why it was reverted 23:42
samcv just gotta make sure the website tries to access :: files not $COLON$COLON
Zoffix Ah. OK. Yeah, that's just one line
samcv because when you access webpage::blah.html
the server tries to give it the file at $COLEN$COLEN
which does't exist!
so reverted it
github.com/perl6/doc/commit/331472...33b197c1b6 23:43
and this github.com/perl6/doc/commit/93db5f...0e0589ed26
timotimo Qw⟅ ⟆; 23:44
that's baggy
samcv it quotes!
they are allowed delimiters!
timotimo i know
it looks very much like a bag
is what i mean
samcv yeah they are S shaped bag delimiters 23:46
if we wanted to go crazy we could enable ⟅ ⟆ quoting to do bag( )
hahaha
timotimo make it a slang 23:47
samcv Zoffix, you gonna add this too github.com/perl6/doc/commit/93db5f...0e0589ed26 23:49
also note here that unix does have some badchars github.com/perl6/doc/commit/331472...5fdcb05R17
which is the '/'
so you will need to make those changes i made to htmlifgy.p6
err lib/Pod/Htmlify.pm6 23:50
geekosaur is there a way to switch it on/off regardless of system? I could see someone trying to do this on a unix into a mounted cifs...
samcv and the only reason it's not in htmlify.p6 is because it falsely triggers
geekosaur or ntfs fuse mount, etc.
samcv because directory names have a forward slash in them on linux
but they need to be added into lib/Pod/Htmlify.pm6 23:51
or it won't change '/' into $SOLIDUS or whatever it does 23:52
so hopefully you don't explode anything trying to write slashes to filenames 23:53
:O
cause that is not allowed
it'll break
i'll do it hold on 23:54