[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 |