[Tux] This is Rakudo version 2017.02-141-g9d497e9db built on MoarVM version 2017.02-20-g773711e1 07:26
csv-ip5xs 2.853
test 12.447
test-t 4.929 - 4.969
csv-parser 12.972
lizmat Files=1177, Tests=55955, 192 wallclock secs (11.41 usr 4.46 sys + 1138.59 cusr 108.23 csys = 1262.69 CPU) 08:33
how does one invoke code in METAOP_REDUCE_RIGHT ? 09:35
afk for a few hours& 09:36
IOninja .tell lizmat probably with `m: say [**] 2, 3, 4` or any other sub () is assoc('right') {} 09:39
yoleaux2 IOninja: I'll pass your message to lizmat.
Geth rakudo/nom: 2dd2eb71da | (Zoffix Znet)++ | docs/release_guide.pod
s/panda/zef/;
09:41
IOninja .tell lizmat turns out not any sub, it has to be an op: sub infix:<foo>($a, $b) is assoc<right> { "($a, $b)" }; say [foo] 1, 2, 3, 4 09:51
yoleaux2 IOninja: I'll pass your message to lizmat.
Geth rakudo/nom: 7 commits pushed by (Fernando Correa de Oliveira)++, (Zoffix Znet)++ 09:54
roast: b8965869d2 | (Fernando Correa de Oliveira)++ | S03-operators/ternary.t
Add tests for unicode version of ?? !! (#246)
09:55
rakudo/nom: afa5245ec4 | (Zoffix Znet)++ | src/Perl6/Grammar.nqp
Comment why {} is in the token
10:18
rakudo/nom: 9d138b974a | (Zoffix Znet)++ | src/Perl6/Grammar.nqp
Fix Engrish in comment
10:42
gfldex when is the next release? 10:49
IOninja gfldex: April
NeuralAnomaly: status 10:50
NeuralAnomaly IOninja, [āœ˜] Next release will be in 2 weeks and 2 days. Since last release, there are 23 new still-open tickets (17 unreviewed and 0 blockers) and 154 unreviewed commits. See perl6.fail/release/stats for details
lizmat IOninja: thanks! 12:08
yoleaux2 09:39Z <IOninja> lizmat: probably with `m: say [**] 2, 3, 4` or any other sub () is assoc('right') {}
09:51Z <IOninja> lizmat: turns out not any sub, it has to be an op: sub infix:<foo>($a, $b) is assoc<right> { "($a, $b)" }; say [foo] 1, 2, 3, 4
timotimo twitter.com/YtvwlD/status/837279339557318656 12:32
just a datapoint for the null-in-paths discussion 12:37
masak timotimo: pet peeve: NUL 12:45
timotimo OK!
masak (I think I got that pet peeve from nwc10, maybe) 12:46
IOninja "Sorry, you're not authorized to view these Tweets.".... well OK then
masak IOninja: probably because they contain a NUL byte :P
(oh noes, and now this channel linked to the tweet) o.O 12:47
timotimo what.
oh, damn.
executive summary: os.mkdir(s) gives "ValueError: embeded null byte"
and open(s, "w") does the same
masak seems Python stops the madness at the gates, then 12:48
surely that's an "illegal arguments exception", that is, Python starts by checking for a NUL before sending it on to C or whatever? 12:49
timotimo i don't think they have something like a "path type" 12:55
lizmat m: die "naughty!" with "abc\0def".index("\0")
camelia naughty!
in block <unit> at <tmp> line 1
timotimo just "a string that's used in some path-related context"
IOninja Well, just blocking nullbytes in IO::Path seems sane to me. If there's some weird usecase where you need them in filenames, use NativeCall. 13:01
A related question: what's our security vulnerability policy? I haven't looked in detail at Zefram's tickets, but at first glace it sounds like it's possible to exploit a program by feeding it diacritics/nuls even if it does some checks. 13:04
And if it's not possible here, but someone reports a ticket that shows such possibilities... what's our plan of action?
lizmat none that I know of, probably a good thing to discuss at the Perl Toolchain Summit 13:05
timotimo m: die "naughty!" with "abc\0\x[308]def".index("\0")
camelia naughty!
in block <unit> at <tmp> line 1
timotimo that's nice
IOninja lizmat: when is it?
lizmat blogs.perl.org/users/book1/2017/02/...ummit.html # background info 13:07
IOninja held in Lyon, France from Thursday 11th May 2017 through Sunday 14th May 2017
lizmat there you go
IOninja: if you could make it there, that would be brill!
IOninja I don't know any French though. 13:09
DrForr Lyon, nice.
lizmat pretty sure the language is English :-)
IOninja "sava" that's all I know
DrForr IOninja: I got around just fine a few years ago.
IOninja Pass. 13:10
lizmat :-(
masak :D # "sava"++ 13:24
DrForr Several good cheese shops around where I stayed, and I was at an AirBNB-type place. 13:38
timotimo do any of them actually have cheese? 13:39
DrForr Strangely, they did. 13:41
IOninja m: "/tmp/root/tmp".IO.mkdir; "/tmp/root/secret.txt".IO.spurt: 'p4sswrd';
camelia ( no output )
IOninja m: chdir "/tmp/root/tmp"; my $user-input = ".."; $user-input.IO.resolve.starts-with: $*CWD.resolve or die "hax!"; .say for dir $user-input
camelia hax!
in block <unit> at <tmp> line 1
IOninja Hey cool! My awesome program catches all the hax0rs!
m: chdir "/tmp/root/tmp"; my $user-input = "..\0"; $user-input.IO.resolve.starts-with: $*CWD.resolve or die "hax!"; .say for dir $user-input
camelia "..ā€/tmp".IO
"..ā€/secret.txt".IO
IOninja oops
At least reading them fails, saying it's a directory 13:42
cog__ m: my str $a where * !~~ /\0/ = 'a'
camelia Type check failed in assignment to $a; expected <anon> but got Str ("a")
in block <unit> at <tmp> line 1
IOninja heh 13:44
there's some bustification with where clauses on `my`; this is probably part of it 13:45
cog__ m: my $a where * == 1 = 1; $a = 2
camelia Type check failed in assignment to $a; expected <anon> but got Int (2)
in block <unit> at <tmp> line 1
cog__ it seems to work fine on simpler expressions
IOninja it's the typecheck
cog__ m: my int $a where * == 1 = 1; $a = 2
camelia Type check failed in assignment to $a; expected <anon> but got Int (1)
in block <unit> at <tmp> line 1
cog__ m: my Int $a where * == 1 = 1; $a = 2 13:46
camelia Type check failed in assignment to $a; expected <anon> but got Int (2)
in block <unit> at <tmp> line 1
IOninja m: my int $a where * == 1 = 1; $a = 1
camelia Type check failed in assignment to $a; expected <anon> but got Int (1)
in block <unit> at <tmp> line 1
IOninja m: my $a where * == 1 = 1; $a = 1
camelia ( no output )
timotimo huh, we support native variables with a "where"? how is that even ... 13:47
cog__ m: my $a where * == 1; $a = 1
camelia ( no output )
IOninja What's special about native variables with a where?
cog__ I suppose the question is where (sic) the info about the where is stored 13:49
IOninja Feels like the Right Thing would be to patch up the nul byte thing and do a point release, but that's a bit troublesome since regular users use Star, don't they 13:57
IOninja wishes Star's release was as automated as Rakudo's
jnthn The my $a where ... generates an anonymous refinement type 14:03
And no, they ain't going to work well with native types; we should detect that
IOninja jnthn: and throw? 14:04
jnthn Yeah, compile-time error 14:05
IOninja m: sub (int $ where * %% 2){}(42)
camelia ( no output )
IOninja OK
jnthn That case may be OK 'cus the signature handling of it works a bit differently
Yeah, we get away with it on sigs
Hm
I wonder what it'd take to just make it work 14:06
That'd be nicer still
Though we can only really do that on anonymous ones stuck on a varaible, I think
Oh, and we'd have to code-gen the invocation of the where clause
So yeah, it's do-able, but it's a bit hairy
Geth nqp/master: 14 commits pushed by (Pawel Murias)++
review: github.com/perl6/nqp/compare/2780e...b93f06bbde
14:32
rakudo/nom: 60a8f9e715 | (Elizabeth Mattijsen)++ | src/core/metaops.pm
Streamline METAOP_REDUCE_RIGHT 2 param op version

  - rewrite using nqp ops
  - remove use of iterator: all the values are already in a lowlevel list
  - 30% faster for 2 elems, 50% for 3+ elem cases
14:56
IOninja I'm gonna rename the 'fap' method in IO::Path... 16:06
mst ...
yes. good plan.
IOninja :)
At least it's a private fap....
github.com/rakudo/rakudo/blob/nom/...pm#L22-L28 16:07
mst oh, yes, 'this object faps itself in private' makes it much less of an innuendo 16:10
Geth rakudo/nom: 164e393f17 | (Zoffix Znet)++ | src/core/IO/Path.pm
Use more descriptive name for a private method
16:17
lizmat IOninja++ 16:22
gfldex m: constant &foo = &infix:<:=>; 16:26
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
infix:<:=> used at line 1. Did you mean 'infix:<=>', 'infix:<+|>', 'infix:<āˆ–>', 'infix:<ne>'?
IOninja m: &infix:<:=> 16:28
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
infix:<:=> used at line 1. Did you mean 'infix:<=>', 'infix:<+|>', 'infix:<āˆ–>', 'infix:<ne>'?
jnthn := doesn't have a sub form (it's too low-level to implement as such) 16:32
timotimo clearly "fap" is a method meant for privates. 16:40
Geth roast: 1f5dead548 | (Zoffix Znet)++ | S02-types/array-shapes.t
Test container writeableness of .values and .pairs on shaped arrays

RT#130440: rt.perl.org/Ticket/Display.html?id=130440 Rakudo fix: github.com/rakudo/rakudo/commit/dc7b688
17:21
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130440
nine Why is this supposed to work? require Fancy::Utilities; Fancy::Utilities::lolgreet('me'); 18:14
Shouldn't subroutine calls get compile time checked?
TimToady only lexical ones 18:15
nine Why? 18:16
TimToady because we don't have the package to look up our variables yet
nine But that's only because we try to support accessing runtime loaded symbols in this way. But why bother? One can access that via indirect lookup making the runtimeness explicit. 18:18
Then the compiler would be free to check those fully qualified subroutine calls, too. 18:19
TimToady doesn't see the point of turning 'require' into 'use'
the thing you're requiring might not even exist yet 18:20
unless by 'compiler' you're talking about 'link' time 18:21
nine TimToady: that's...actually what I think :) From my perspective 'require' is currently too close to 'use'. I'd rather demote it to making the above example into: require Fancy::Utilities; ::('Fancy::Utilities').WHO<&lolgreet>('me');
Thus Fancy::Utilities::lolgreet could always be a compile time lookup and runtime lookups look like ::('...')
TimToady require is supposed to introduce Fancy::Utilities already as a package name, so the ::() ought to be unnecessary 18:22
and we're supposed to have a list after the require of any additional symbols to introduce at compile time... 18:24
nine Ok, thanks for the clarification. 18:25
TimToady
.oO(then again, so is 'use', but that's NYI, and how have we got so far without selective importation, I dunno...)
18:27
nine Oh...so dropping selective importation was not intentional?
TimToady not on my part :) 18:28
nine That's a great relieve :)
I miss it greatly. In Perl 5 code, I always explicitly list the symbols I import not least of all so a reader has a clue where a symbol is coming from. 18:29
TimToady I think Someone Very Smart did the Simplest Thing That Could Possibly Work, and it's still kinda working
but we really need selective importation down the road to deal with import conflicts 18:30
and yeah, dox is also goodness
and to prevent accidentally importing the future 18:31
nine Just today I broke something because I removed some "unused" "use" statements. Turns out one of them wasn't all that unused.
jnthn The selective import syntax is :MY<&foo $bar @baz>, iirc? 18:38
TimToady well, if we allow positionals, we could assume :MY by default 18:39
like P5 does
except for the 'my' part :)
jnthn Yeah 18:41
m: use Test <&is>
camelia 5===SORRY!5=== Error while compiling <tmp>
Error while importing from 'Test':
no EXPORT sub, but you provided positional argument in the 'use' statement
at <tmp>:1
------> 3use Test <&is>7ā5<EOL>
jnthn Oh, riht
*right
We reserved it, in the case you didn't specify an EXPORT sub 18:42
nine m: use Test :MY<&is>; 18:43
camelia 5===SORRY!5=== Error while compiling <tmp>
Error while importing from 'Test': no such tag 'MY'
at <tmp>:1
------> 3use Test :MY<&is>7ā5;
TimToady some days, I just want a module to return a slab of text to eval inline, like a textual macro :) 18:44
nine Ok, where would I find the code that creates the stub in "require Foo::Bar"?
TimToady I'd look in Actions.nqp, prolly method statement_control:sym<require> 18:45
nine That's what I've gone through a couple of times now. The code for the import list is easy to find, but I don't see anything looking like its creating a symbol for $<module_name> 18:50
TimToady maybe just mentioning Foo::Bar stubs it already, earlier? 18:54
m: require Foo::Bar; BEGIN say ::('Foo::Bar').WHAT 18:55
camelia (Failure)
Could not find Foo::Bar at line 0 in:
/home/camelia/.perl6
/home/camelia/rakudo-m-inst-1/share/perl6/site
/home/camelia/rakudo-m-inst-1/share/perl6/vendor
/home/camelia/rakudo-m-inst-1/share/perl6
CompUnit::Reposā€¦
TimToady or maybe it's not actually doing it yet
nine That would explain the absence of code :) 18:56
TimToady :D
oh, couple days ago we speculated that 'need' should just introduce the name, but actually pull in the module lazily, so that 'need' could serve as a predeclaration for circular OO modules 18:58
nine So it's only working because package lookups are done at runtime in general.
Aaand those lookups start at GLOBAL which collides with the urge to turn those required symbols into lexicals. 19:01
I'm not sure if it's really a good idea to extend those lookups to include my lexical %REQUIRE_SYMBOLS like I did with indirect lookup. 19:03
It really seems wrong that GLOBAL gets such special treatment when the goal was to make everything as lexical as possible... 19:04
TimToady the whole point of packages is to have global names, which is why the global names need :auth and :ver, so we have something unique to alias to lexically 19:09
the idea was never to get rid of globals, only prevent collisions in the global namespace
so lexical aliases are really the same mechanism as 'our', only the non-lexical thing is in someone else's package, rather than our own 19:11
nine Ah stupid me. In the shower I realized that we'd only generate code for a lookup in GLOBAL if we don't find the name lexically at compile time. So just creating a lexical stub will solve my problem. 19:20
I really should move my desk into the shower. I think so much more clearly there :)
Geth rakudo/Str-parse-names: c10ba0e126 | (Zoffix Znet)++ | 3 files
Implement Str.parse-names

Functionality:
  - similar to "\c[BELL, BLACK HEART SUIT]", except can be used by
   users at runtime, without requiring EVAL/nqp in user's code
  - Unlike \c[ā€¦] does not allow comments or anything similarly isoteric.
   The idea is this will process some sort of user input, so we want
... (5 more lines)
19:29
rakudo: zoffixznet++ created pull request #1031:
Implement Str.parse-names
roast/Str-parse-names: 5280a11a71 | (Zoffix Znet)++ | S32-str/parse-names.t
Test Str.parse-names routine

Rakudo implementation: github.com/rakudo/rakudo/pull/1031
roast: zoffixznet++ created pull request #247:
Test Str.parse-names routine
19:31
rakudo/Str-parse-names: 5c1761a648 | (Zoffix Znet)++ | 3 files
Implement Str.parse-names

Functionality:
  - similar to "\c[BELL, BLACK HEART SUIT]", except can be used by
   users at runtime, without requiring EVAL/nqp in user's code
  - Unlike \c[ā€¦] does not allow comments or anything similarly isoteric.
   The idea is this will process some sort of user input, so we want
... (5 more lines)
20:06
IOninja Did dalek detect force-pushes? 20:07
jnthn I don't remember it doing so 20:08
IOninja OK then :)
[Coke] IOninja: why is parse-names plural? 20:19
IOninja [Coke]: 'cause it parses a bunch of character names 20:20
[Coke] oh, because you allow ,-sep strings - is that desired?
ah, you can get combining chars this way into a single resulting grapheme?
IOninja IMO yes. We allow them in \c[].
[Coke] retains his +1
IOninja++
perlpilot_ IOninja: definitely +1 20:21
IOninja: though ... what does this have to do with IO? ;)
IOninja I'm... on a break :)
I do it on another box when I'm home and have a nice big monitor to look at things and box that isn't slower than molases to run things :) 20:22
Well, I have fast box as a google VM right now, but I type on it via pico.
and pico sucks
Geth rakudo/nom: 5c1761a648 | (Zoffix Znet)++ | 3 files
Implement Str.parse-names

Functionality:
  - similar to "\c[BELL, BLACK HEART SUIT]", except can be used by
   users at runtime, without requiring EVAL/nqp in user's code
  - Unlike \c[ā€¦] does not allow comments or anything similarly isoteric.
   The idea is this will process some sort of user input, so we want
... (5 more lines)
20:34
rakudo/nom: 84cf1d2fb3 | lizmat++ | 3 files
Merge pull request #1031 from rakudo/Str-parse-names

Implement Str.parse-names / &parse-names
IOninja \o/ 20:36
Geth roast: 5679afffa1 | (Zoffix Znet)++ | S32-str/parse-names.t
Test Str.parse-names routine (#247)

Rakudo implementation: github.com/rakudo/rakudo/pull/1031
gfldex All your unicode are belong to us! 20:37
IOninja: you may want to wait with docing new features until after release 20:51
perlpilot_ I think I'd rather the docs have a note about what release the feature is available in. 20:52
moritz (or just add "available in rakudo 2017.03+)
perlpilot_ We should probably be "versioning" docs in that way anyway 20:53
Geth rakudo/nom: 2cf9b5376d | (Elizabeth Mattijsen)++ | src/core/metaops.pm
Streamline METAOP_REDUCE_RIGHT completely

  - also for infix ops with more than 2 parameters
  - rewrite using nqp ops
  - remove use of iterator
  - use low level list for arguments
  - about 2x as fast
21:16
IOninja Nah, don't add "available rakudo..." thing. We need proper infrastructure on the docs site to label stuff. We require it to make 6.d happen. 21:38
As for waiting to document... release of what? Rakudo Star? That's two months away from today. At least half the people asking questions are using rakudobrewed dev commits anyway. I don't see much wrong with documenting stuff while it's still fresh in implementor's mimd and shouting from the rooftops that Perl 6 got something new and cool. Even if you wait, people with previous releases won't have it 21:42
anyway, so what's the point. Once we have proper way to label when X was introduced, this would be entirely seamless: devs will document right away amd system will first say "nightly" and after a release say the release
Wondering about making a bot build and stresstest nightly and and make rakudobrew use that instead of HEAD by default 21:44
IOninja leaves for the night
[Coke] (available rakudo) yes, do add that - we need to know when documented features are available, I think. 21:50
There are multiple places where we are doing this now.
[Coke] tries to find one example so we can discuss...
IOninja I recall us removing those... 21:54
[Coke] docs.perl6.org/language/unicode#Named_Sequences - though looking at it now, we probably need to explicitly mention rakudo, probably want to use something like [Available in rakudo-2017.02-*]
IOninja The language vs compiler thing
[Coke] a lot of the stuff added since 2016 isn't technically in the language yet.
IOninja We can figure those out automagically via introspection 21:55
[Coke] so do we document it? I think the practical answer is yes, but we have to make sure we're clear about when it's available.
IOninja: sure, if we can do it automatically, I'm all for that.
IOninja Except for stuff like Mexico terniaries, I guess
[Coke] IOninja: is that test in the errata? 21:56
IOninja Nope
Which test? The fancy ternary? Nope
[Coke] so, if we doc it, we mark is available in rakudo-2017.03, etc. (at this point, if we're doing this automatically, you need all the tagged releases available when generating the docs. 21:57
I think it helps to add them as we go for now, we can swap them out with automatically generated ones later.
Having a standard format will definitely help with replacing them with robots later. 21:58
(maybe we have an offline process that generates this and we run it once in a while, rather than having it be part of the build) 21:59
IOninja Yeah, having it run just in a while is better. 22:01
[Coke] Can add the class hierarchy to that. :| 22:03
every time I get back to "oh, bootstrap it!", I end up poking at some part of the build or test. :| 22:04
IOninja Side note: "available in rakudo 2017.03" is somewhat confusing to users who are told to use star.... 'cause there ain't such a release and won't be another for a month+ after 2017.03 compiler release. 22:05
And on the coolest docsite, a user selects the compiler and version they're using... and they only see stuff available in that release :D 22:06
Looking at that Unicode page.... I seee it's not just that "Starting.." blurb that refers to a specific compiler. A paragraph above reads "You can access Unicode codepoints by name: Rakudo supports all Unicode 9.0 names." 22:09
And I recall someone (pmichaud, I believe) saying how they worked hard to maintain the distinction between Perl 6 The Language and any particular compiler. And docs talking about Rakudo like it's the only thing ever made or will be made blurs that distinction quite a bit 22:10
Even today, there's agentz guy with their Perl 6 compiler that they plan to make freely available. So even today, Rakudo isn't really the only thing in town. 22:12
Anyway....
IOninja leaves for real now :)
[Coke] rakudo really is the only thing in town today; but if the docs explicitly mention rakudo in those blurbs (which they should), then I don't see the problem. 23:16
any references to rakudo-specific items or meta should definitely be tagged as such. 23:17
I'll write up a gist or something explaining my POV with some examples that will hopefully address the "perl6 is not rakudo" issue but dealing with the fact that compiler specific stuff needs mentioning 23:29