»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
Geth doc: fe2b7eb57a | (Will "Coke" Coleda)++ | htmlify.p6
avoid SEGV (no really)
00:09
DeadDelta \o/ 00:15
:D
[Coke] onto the next segfault. :( 00:16
lookatme morning 00:37
travis-ci Doc build errored. Will "Coke" Coleda 'avoid SEGV (no really)' 01:00
travis-ci.org/perl6/doc/builds/247750484 github.com/perl6/doc/compare/4c00a...2b7eb57adf
BenGoldberg grumbles that * is too smart for it's own good. Testing to see whether the user passed in a * as an argument is annoying. :P 03:20
m: say * === *
camelia { ... }
BenGoldberg m: say * =:= *; # All variants just produce WhateverCode things :P 03:21
camelia { ... }
geekosaur m: say * ~~ Whatever 03:24
camelia { ... }
geekosaur bah
WhateverCode is ...
TimToady m: say Whatever.ACCEPTS(*)
camelia True
TimToady in general, one should never test for whateverness using a literal * 03:28
m: given * -> $x { say $x ~~ Whatever } 03:29
camelia True
TimToady it's also fine if it's already in a variable 03:30
lookatme m: say so * === * 03:35
camelia { ... }
TimToady m: say (so * === *)(42,42) 03:36
camelia True
TimToady notes that so and not are operators, not listops
lookatme m: say * eq 42 ("42") 03:37
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3say * eq 427⏏5 ("42")
expecting any of:
infix
infix stopper
postfix
statement end
statement modifier…
lookatme m: say (* eq 42)("42")
camelia True
TimToady things like eq and == are coercive, unlike === 03:40
lookatme oh 03:42
TimToady m: say (* == 42)("42") 03:43
camelia True
TimToady m: say (* === 42)("42")
camelia False
BenGoldberg m: say given * { when 42 { 'the answer' }; when * { 'star' } } 03:47
camelia 5===SORRY!5=== Error while compiling <tmp>
Unsupported use of bare "say"; in Perl 6 please use .say if you meant to call it as a method on $_, or use an explicit invocant or argument, or use &say to refer to the function as a noun
at <tmp>:1
--…
BenGoldberg m: say do given * { when 42 { 'the answer' }; when * { 'star' } }
camelia star
BenGoldberg m: say do given 42 { when 42 { 'the answer' }; when * { 'star' } }
camelia the answer
BenGoldberg m: say do given 'other' { when 42 { 'the answer' }; when * { 'star' } }
camelia star
BenGoldberg m: say do given 'other' { when 42 { 'the answer' }; when 'star' { 'star' } } 03:48
camelia False
TimToady "when *" is equivalent to "default"
it always matches
BenGoldberg What's the clearest way to test whether the user passed in, say, an Int, a Str, or *, while rejecting objects of other types? 03:49
. o O (when .WHAT === *.WHAT) 03:50
TimToady refactor to a multi
or use: where Int | Str | Whatever 03:51
always test using the Whatever type, never with *
BenGoldberg m: say do given True { when Int { 42 }; when Str { 'perl6++' }; when Whatever { 'star' } };
camelia 42
BenGoldberg m: say do given pi { when Int { 42 }; when Str { 'perl6++' }; when Whatever { 'star' } }; 03:52
camelia False
BenGoldberg TimToady++
TimToady doesn't know why that returns False though
BenGoldberg I suppose you're one of those silly people who think that pi is 3, then? 03:53
BenGoldberg m: say do given * { when Int { 42 }; when Str { 'perl6++' }; when Whatever { 'star' } }; 03:54
camelia star
TimToady m: my $*TOLERANCE = 1; say pi =~= 3 03:55
camelia True
BenGoldberg Your're horrible :P 03:56
TimToady m: my $*TOLERANCE = 1; say pi ≅ 3
camelia True
BenGoldberg Prettier, but that doesn't make it an Int.
geekosaur that's not the question, I think. it's not clear why we get False instead of, say, Any 04:02
since nothing is done for that case
BenGoldberg Oh, I see. Any or Mu or Nil would have made more sense, I suppose.
TimToady or Slip 04:03
m: sub (Int() $x) { say $x == 3 }(π)
camelia True
BenGoldberg remembers once asking why the sky was blue, and being told 'raleigh scattering', when his real question was Why *blue*
geekosaur because nitrogen. and beyond that, you get to flirt with quantum theory
TimToady well, same reason the sun looks redder through smoke, only less so 04:05
geekosaur nitrogen just happens to have an electron that, when hit with a photon of a particular shade of blue light, will "ring" for a microsecond or so and then spit it back out again in a random direction
BenGoldberg "Because nitrogen" would have good answer, back when I was asking that originally, since I was thinking numbers (wavelengths and amount of scattering), not mechanisms in general. 04:06
s/would have/would have been/
m: sub foo { slip() }; dd foo; 04:07
camelia Empty
geekosaur right, but understanding why that particular wavelength gets you into the energy levels of electron orbitals, which we haven't fully solved yet for anything beyond 4He iirc
BenGoldberg m: sub foo { slip() }; my $x = foo; dd $x;
camelia Slip $x = Empty
BenGoldberg m: sub foo { Slip }; my $x = foo; dd $x; 04:08
camelia Slip $x = Slip
geekosaur although we can observe them spectrographically
TimToady m: sub foo { slip() }; say foo.defined
camelia False
TimToady m: sub foo { Slip.new }; say foo.defined
camelia False
BenGoldberg TimToady, Under what circumstances would someone ever *see* a slip object, other than the undefined one?
TimToady m: sub foo { slip(1) }; say foo.defined 04:09
camelia True
TimToady slip is only undefined for the empty list
well, and the type object
BenGoldberg m: dd slip().defined 04:10
camelia Bool::False
BenGoldberg The only undefined Slip is the type object, afaict.
(Or I suppose a subclass, but that would be silly( 04:11
TimToady look above, Slip.new is also undefined
BenGoldberg m: my WhenWet does Slip { }; sub foo { return 41, WhenWet.new, 42 }; say foo; 04:13
camelia 5===SORRY!5===
Type 'WhenWet' is not declared
at <tmp>:1
------> 3my WhenWet7⏏5 does Slip { }; sub foo { return 41, Whe
Malformed my
at <tmp>:1
------> 3my7⏏5 WhenWet does Slip { }; sub foo { return
BenGoldberg m: class WhenWet does Slip { }; sub foo { return 41, WhenWet.new, 42 }; say foo;
camelia 5===SORRY!5=== Error while compiling <tmp>
Slip is not composable, so WhenWet cannot compose it
at <tmp>:1
geekosaur Slip is not a role, so it would be 'is Slip' 04:14
BenGoldberg m: class Twinkle does Whatever { }; say Twinkle.new;
camelia 5===SORRY!5=== Error while compiling <tmp>
Whatever is not composable, so Twinkle cannot compose it
at <tmp>:1
BenGoldberg m: class Twinkle is Whatever { }; say Twinkle.new;
camelia *
BenGoldberg m: class WhenWet is Slip { }; sub foo { return 41, WhenWet.new, 42 }; say foo;
camelia (41 42)
geekosaur roles can promote to classes, classes do not demote to roles 04:14
TimToady that's because classes are mutable, while roles are immutable 04:15
geekosaur also I suspect the circularity could become a bit weird 04:16
BenGoldberg On the subject of 'is', I've got a bit of a problem. I was hacking away at my copy of NativeCall, and not testing it often enough; now my multi trait_mod:<is>(Routine,:$native!) is not getting exported, and I don't see what I did wrong. 04:18
Here is the gist of it: gist.github.com/BenGoldberg1/3f7b9...a5f791f86e
BenGoldberg is too sleepy to comprehend this tonight. I will figure this out mañana. 04:29
moritz DeadDelta: yes, I'll perlbrew an older perl 06:07
that's the solution my subconscious mind came up with during sleep as well :-) 06:08
(and it's kinda an attest to my lack of sleep that I didn't think of it earlier)
moritz ok, running on an older perl now 09:02
the IR clogs are back up :-)
... with Unicody trouble :( 09:03
tadzik :( 09:04
moritz: what was wrong with the new Perl?
I remember seeing a word "leak" here somewhere
moritz tadzik: memory usage of the fastcgi process grew fast, making the whole machine swap 09:05
(and unresponsive)
tadzik ugh
grondilu yeah I can confirm it was terribly difficult to compile the latest perl last night 09:55
*perl6
DeadDelta grondilu: morits was compiling perl5 tho. What issues are you having with perl6? 10:00
moritz: the encoding is busted now :) "Geth¦ rakudo/nom: ce20887760"
mscha m: my @a = 1,2,3; my $verbose = True; .say for @a if $verbose; # No it isn't... 10:02
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing semicolon
at <tmp>:1
------> 032,3; my $verbose = True; .say for @a if 7⏏5$verbose; # No it isn't...
DeadDelta It is. You're trying to chain two statement modifiers 10:03
grondilu DeadDelta: yesterday compiling rakudo took much longer than usual and lagged my machine 10:04
DeadDelta .tell mr_ron yesterday's discussion about natives was wrong. Literals *are* supposed to work work with native multies if they can fit (which they now do, once again, on latest commit) 10:11
yoleaux DeadDelta: I'll pass your message to mr_ron.
DeadDelta grondilu: no idea. Haven't had such issues.
lizmat fwiw, /me neither 10:13
DeadDelta New post "Perl 6: Seqs, Drugs, And Rock'n'Roll (Part 2)": perl6.party/post/Perl-6-Seqs-Drugs...ll--Part-2 10:14
lizmat reads
s/usecase/use case/ 10:15
(at least according to my dictionary :-)
DeadDelta Thanks. Fixed. 10:16
DeadDelta You likely won't learn anything from that post as you already know all of that better than me :) 10:16
lizmat well, there's one thing I'm not sure about 10:17
"The Iterator protocol forbids attempting to fetch more values from an Iterator once it generated the IterationEnd value"
I'm not sure that's true, I think the behaviour is undefined 10:18
timotimo i like how links have a slightly rounded border when you hover over them
lizmat jnthn? ^^^
timotimo um
i do believe we rely on that
jnthn lizmat: That's true
timotimo and i seem to recall an instance when some iterator or consumer did not honor that and things exploded violently
lizmat well, fwiw, I think all of the settings internal iterators you *can* call after IterationEnd and it will still generate IterationEnd 10:20
most of the time, it's just an effect of the implementation
jnthn It's fine if things do behave that way
It's just that you shouldn't rely on it
lizmat like needing to remember there's still one value to produce
even DeadDelta's example produces IterationEnd after it has produced its first IterationEnd 10:21
timotimo right
timotimo i find it slightly amusing that the one state variable will end up getting incremented more and more, while the other will stop at 4 10:21
not important at all, just a tiny detail
lizmat DeadDelta: s/brievity/brevity/ 10:25
DeadDelta Fixed thanks 10:29
grondilu finally received his additional RAM :) 11:07
Voldenet Did anyone make a grammar for C#? I need it for some tiny refactors and analysis (the current version in perl5 I use has gotten a bit /hairy/ and I need to add C#7 features for it)
timotimo could it be the c# compiler has a feature that outputs parse data? 11:49
moritz roslyn might have that 11:58
zengargoyle is there a .method on Hash that doesn't create arrays for duplicate keys like .push and .append do? something better than %stuff = %stuff, %new-stuff; 12:05
DeadDelta zengargoyle: %stuff ,= %new-stuff
DeadDelta backlogs a bit
m: say do given pi { when Int { 42 }; when Str { 'perl6++' }; when Whatever { 'star' } }; 12:06
camelia False
zengargoyle m: my %h = a => 1, b => 2; my %n = a => 2; %h .= %n; say %h; 12:07
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing required term after infix
at <tmp>:1
------> 3 = a => 1, b => 2; my %n = a => 2; %h .=7⏏5 %n; say %h;
expecting any of:
dotty method or postfix
DeadDelta TimToady: ^ that's False because Whatever is a :U and we're going through the Mu.ACCEPS that just type-checks. The `when *` uses a :D Whatever, which does the "anything goes" thing 12:07
zengargoyle m: my %h = a => 1, b => 2; my %n = a => 2; %h ,= %n; say %h;
camelia {a => 2, b => 2}
zengargoyle oh, , not .
should have guessed that by now. :) 12:08
DeadDelta .tell BenGoldberg your `is native` export issue is 'cause you got my package EXPORT::DEFAULT my package EXPORT::types. I don't think the `is export` things are additive. 12:18
yoleaux DeadDelta: I'll pass your message to BenGoldberg.
Voldenet timotimo: well, one could user roslyn to do something similar and roslyn could be used to make such tool, but I want to smuggle as much perl as I can into projects ;)
DeadDelta .tell BenGoldberg oh maybe they are :/ as this works m: package Foo { my package EXPORT::DEFAULT {}; sub bar is export(:DEFAULT, :meows) { say "hi" } }; import Foo; bar 12:19
yoleaux DeadDelta: I'll pass your message to BenGoldberg.
perlpilot DeadDelta: Nice article! It would make a nice Iterator tutorial on docs.perl6.org if there isn't one there already 12:27
DeadDelta Considering even basic docs for Iterator's methods use very confused examples, there probably isn't. 12:28
timotimo DeadDelta: it's spelled monstrosity (had to double-check though) 12:32
raschipi m: say test
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
test used at line 1
raschipi m: say "test"
camelia test
DeadDelta Fixed. Thanks 12:33
zengargoyle yay! `at` parser is working. modulo squishing actual output into `at` acceptable. no timezone, seconds, always goes into the future, rejects datetime in the past.
timotimo np 12:34
good post!
zengargoyle think i might try to add a couple of options to be strictly-at or a more liberal
melezhik hi Perl6 gurus! 12:51
DeadDelta Hello.
melezhik How to create directories in Perl6 recursively? Seems like docs.perl6.org/routine/mkdir can't do it
DeadDelta Yes, it can.
melezhik ahh 12:52
DeadDelta melezhik: what do you mean by recursively? like mkdir -p?
melezhik yeah
exactly
DeadDelta Yeah, that'd default behaviour of Perl 6's mkdir
melezhik ahh, good to know!
thanks
Geth doc: 9764f5eb14 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/IO/Path.pod6
Add more clarifications for mkdir

that it's like `mkdir -p`
12:53
doc: 6486f4e30d | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/IO/Path.pod6
Use more elaborate example for mkdir with nested dirs
12:55
Geth doc: 6d24253dc2 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/IO/Path.pod6
Fix typo
12:56
DeadDelta lizmat: not feeling guilty for sloppy commits like that ^ is my reason :) RE github.com/rakudo/rakudo/commit/41...t-22498793 12:57
lizmat DeadDelta: I'm just trying to get ahead so you will be listed 2nd :-) 12:59
DeadDelta lizmat++
zengargoyle return $++ if $++ < 4; -- heh, sorta confusing at first glance. 13:04
DeadDelta I like to sprinkle some intermediate/advanced features in my articles to kinda showcase the language and make people want to look up more features 13:05
than just what the article is about 13:06
raschipi What does it do? 13:08
timotimo the trick is that each of the $ is its own anonymous state variable 13:09
so you'll get ascending numbers but only up to the number 4
raschipi They will always be incremented toghether, right? 13:10
DeadDelta raschipi: $ is an annonymous state variable. $++ increments it. In return $++ if $++ < 4 uses two state vars to have the effect of `state $x; return $x if $x++ < 4
raschipi: no, the left one will stop incrementing (and stop being returned) once $++ returns 4
raschipi Right, thanks. I understood it.
DeadDelta But it don't matter much in that example, since the method isn't meant to be called forever after the point, just once 13:11
DeadDelta well, not once; zero times. The two vars with bee at 4 and 5 after the last call. 13:12
zengargoyle it's like those two $++ are $thing-to-return++ and $count-of-things-returned++ 13:15
timotimo yeah 13:16
DeadDelta m: dd "a􏿽xCC􏿽x88".subst("a", "x")
camelia "ä"
zengargoyle sorta thought $ was scoped to the same statement or something rather than being nope-exactly-this-once-here
DeadDelta Werid. Locally I get ""x􏿽xCC􏿽x88""
zengargoyle but i guess i just hadn't seen it used like this.
timotimo what you're getting locally there is utf8-c8
DeadDelta timotimo: but why am I? 13:17
It's on 2017.05-297-g608e886
DeadDelta Oh, I think we've been through this before. This is probably because my setup is busted on this box 13:18
Yeah, works fine in a script, when I don't use command line 13:19
timotimo strange 13:21
DeadDelta Yeah, it's something with encoding in my terminal. I get like chineese dates and stuff.
Should upgrade in a few months, so it'll be gone
timotimo huh, we don't do locale-based encoding though? 13:22
DeadDelta dunno. perlbrewed perl5 fails some of its unicode tests too on this box
DeadDelta & 13:23
timotimo i really haven't a clue what's wrong there
raschipi Yay! New P6 version! 13:29
timotimo oh? 13:30
raschipi I just got 2017.06 from Debian.
timotimo ah, nice
El_Che raschipi: unstable? 13:31
they are really keeping up
raschipi Yeah, I use unstable with experimental for Perl6.
travis-ci Doc build errored. Zoffix Znet 'Add more clarifications for mkdir 13:46
travis-ci.org/perl6/doc/builds/247925714 github.com/perl6/doc/compare/fe2b7...64f5eb14fd
Voldenet > curl ix.io/y4R | perl6 -e 'lines().say' 13:47
malformed utf 13:48
it looks like a standard BOM though
travis-ci Doc build errored. Zoffix Znet 'Use more elaborate example for mkdir with nested dirs' 13:49
travis-ci.org/perl6/doc/builds/247926356 github.com/perl6/doc/compare/9764f...86f4e30d9e
DeadDelta m: Buf[uint8]:0x<ff fe>.decode.say 13:49
camelia 5===SORRY!5===
Extra argument not allowed; pair already has argument of 0
at <tmp>:1
------> 3Buf[uint8]:0x7⏏5<ff fe>.decode.say
You can't adverb Buf[uint8]
at <tmp>:1
------> 3Buf[uint8]:0x<ff fe>7⏏5.decode.say
DeadDelta m: Buf[uint8]:0x<ff fe>.decode.say
camelia 5===SORRY!5===
Extra argument not allowed; pair already has argument of 0
at <tmp>:1
------> 3Buf[uint8]:0x7⏏5<ff fe>.decode.say
You can't adverb Buf[uint8]
at <tmp>:1
------> 3Buf[uint8]:0x<ff fe>7⏏5.decode.say
DeadDelta gggrrr WHY do I always have dumb copy paste issues -_-
m: Buf[uint8].new(255,254).decode.say 13:50
camelia Malformed UTF-8 at line 1 col 1
in block <unit> at <tmp> line 1
DeadDelta Voldenet: is bom valid UTF tho?
travis-ci Doc build errored. Zoffix Znet 'Fix typo' 13:50
travis-ci.org/perl6/doc/builds/247926806 github.com/perl6/doc/compare/6486f...24253dc20f
Voldenet DeadDelta: I'm sure "file".IO.slurp.say should handle BOM, if that's what you're asking 13:50
DeadDelta Ah
melezhik How can I add bash/shell script to Perl6 module distro? 13:51
just having script at bin/script.sh does make Perl6 treat it as shell script
raschipi DeadDelta: UTF-8 with BOM is valid
melezhik it tries to run is as Perl6 script 13:52
DeadDelta melezhik: you can put it in resources/ but I don't think it'll be installed in a way that'd make it runnable on user's system,
raschipi As much as I think it's broken and silly, it's valid.
melezhik probably I need to set shebang?
DeadDelta melezhik: what about permissions and PATH? 13:53
melezhik permissions are fine and script is resolvable
but it gets treated as Perl6 script
DeadDelta Voldenet: well, it fails with perl 5 too
melezhik I am going to set a shebang ... to see if it helps
DeadDelta melezhik: don't put it in bin 13:54
melezhik ok, where then to put it?
DeadDelta :|
melezhik ok, I may go with resource ... not a big deal
at least as workaround ... 13:55
zengargoyle i though binary/shell/script etc. you wanted installed along with a module went into 'script'
DeadDelta raschipi: what's UTF-8 with BOM? When I try to open a file with Voldenet's data in perl5 it dies the same as Perl 6, saying it's not valid utf8 13:57
zengargoyle at least in p5 'script' was the 'install these into the bin directory when installing the module'. you had to tweak things if you *really* liked to keep your things in 'bin'
raschipi Windows puts BOMs in the starts of it's files and Unicode gave up and declared it valid.
zengargoyle BOM in UTF-8 is an abomination. 13:58
raschipi zengargoyle: I agree, but here is exibit A: archive.is/BxgyE 13:59
DeadDelta .tell samcv is BOM supposed to be valid in latest utf8? Buf[uint8]:0x<ff fe>.decode.say dies. Perl 5 does the same. But here people are saying that it's not supposed to die: irclog.perlgeek.de/perl6/2017-06-28#i_14798132 14:00
yoleaux DeadDelta: I'll pass your message to samcv.
[Coke] ff 14:00
DeadDelta wonders if we need a "ff" lottery too :)
raschipi DeadDelta: IMHO, Perl6 should never die because of bad UTF-8, that's a ready-made DoS right there. 14:01
DeadDelta lol
mst does rakudo even build on DOS?
raschipi denial-of-service 14:02
zengargoyle raschipi: Windows explains most broken things. :P
[Coke] appreciated mst's dad-joke.
raschipi Any Perl6 program that deals with input dies right now if someone sends invalid UTF-8 14:03
mst zoffix just left and I was, indeed, making a dad joke
lizmat I think the DoS issue might make us consider making utf8-c8 the default encoding for everything ?
raschipi I liked the joke too, but I wanted to register what it meant in case someone got confused
Zoffix can't even right now 14:04
ilmari ZoffOdd? 14:06
[Coke] .tell DeadDelta apparently I need a better system for "did my connection drop"
yoleaux [Coke]: I'll pass your message to DeadDelta.
raschipi From the Unicode FAQ: Can a UTF-8 data stream contain the BOM character (in UTF-8 form)? A: Yes, UTF-8 can contain a BOM. 14:07
www.unicode.org/faq/utf_bom.html
raschipi Found the direct link: www.unicode.org/faq/utf_bom.html#bom5 14:08
zengargoyle maybe we should emit all output with a BOM just in case. 14:13
raschipi lizmat: I think the default should be what's suggested in the Unicode section 3.9, Constraints on Conversion Processes, Best Practices for Using U+FFFD 14:15
lizmat link? 14:16
raschipi "At that point, the converter can emit a single U+FFFD for the collected (but ill-formed) code unit( s)" 14:16
lizmat hope samcv reads this
raschipi Page 128 of the Unicode standard version 10
lucasb did anybody noticed that the irclog HTML pages is not displaying unicode characters correctly? 14:27
is it just on my machine?
[Coke] yes, moritz is aware. running an older version of perl5 to avoid a memory problem in the latest version. 14:45
... someone should offer to rewrite it all in six. :)
moritz ... and write a nice tool to clean up encoding mess in the database :-) 14:51
lizmat aaaahhh the memories :-)
Geth Inline-Python: 70477cfbd4 | Nic++ (committed using GitHub Web editor) | .travis.yml
Fix Travis

This should fix Travis auto-builds.
15:03
Inline-Python: babb15cc0b | niner++ (committed using GitHub Web editor) | .travis.yml
Merge pull request #24 from nicqrocks/patch-1

Fix Travis
cihan Hallo 15:08
perlpilot cihan: greetings 15:10
tinita hi cihan
grwetings from the german perlworkshop in hamburg 15:11
s/grw/gre/
FROGGS hi cihan ;o) 15:12
cihan Hehe
Hi Tina und Froggs :)
FROGGS welcome to the awesome world of #perl6 15:13
cihan Thanks
El_Che hamburg o/ 15:20
hallo! 15:21
:)
how do you wave in ascii
FROGGS well, like you did 15:22
cihan o/
FROGGS the workshop was awesome, I'm glad that I made it
El_Che FROGGS: was it mostly in german? 15:29
FROGGS El_Che: aye
El_Che good exercise
FROGGS because only two ppl were non native speakers (or listeners in that case) 15:30
one of them nwc10, and he has to learn germish anyway ;o)
El_Che FROGGS: speaking dutch, I am kind of in a good starting position :) 15:33
FROGGS aye ;o) 15:38
stemming distance from dutch to deutsch is pretty low actually
raschipi That is what leads to the most interesting misunderstandings. 15:42
user3 Path resolution. In the code below, how can I resolve ~/myfile, where ~ is /home/ssss, in order to get /home/ssss/myfile. Instead, this resolves the current working directory (/home/ssss) and prepends it to the original path like this: "/home/ssss/~/myfile".IO 16:06
my $p= IO::Path::Unix.new('~/myfile'); $p.resolve.say;
raschipi user3: you'll have to do tilde expansion yourself 16:08
raschipi tilde expansion is a function of the shell 16:08
user3 cant perl6 use $*HOME automatically ? 16:09
raschipi You can use "$*HOME/myfile" instead
raschipi If you want something the shell does, you can call the shell 16:11
user3 ok, we need a perl6 shell then
just kidding
raschipi run "echo ~/"
user3 i think $*HOME will do fine
user3 by the way, run "echo ~/" doesn't seem to work 16:31
user3 m: run "echo ~/" 16:31
camelia run is disallowed in restricted setting
in sub restricted at src/RESTRICTED.setting line 1
in sub run at src/RESTRICTED.setting line 14
in block <unit> at <tmp> line 1
jnthn Needs to be shell "echo 16:32
oops
Needs to be shell "echo ~/"
user3 yes 16:33
raschipi Like the docs say: "Shell escapes are a severe security concern and can cause confusion with unusual file names." That's why P6 doesn't do it. 16:34
user3 why not design a bash-style perl6 shell? 16:35
would be much better than bash
Juerd Writing a shell is actually hard
And even if you manage to write a pretty good one, you'll find that users can't use it because it does things slightly differently. 16:36
I'm back at bash, after having used fish for a few months
raschipi my $proc = shell 'echo ~/', :out; my $captured-output = $proc.out.slurp: :close; say $captured-output.chop
user3 bash is awkward but gets the job done 16:37
raschipi Now with config management I mostly don't use shell anymore. 16:38
seatek pointy blocks make me happy - just sharing ;) 16:52
timotimo they are good, eyah 16:53
user3 why does this print "mydir/myfile".IO instead of "myvolume/mydir/myfile".IO 16:56
say IO::Path::Unix.new(basename => "myfile", dirname => "mydir", volume => "myvolume/")
evalable6 (exit code 1) Cannot dispatch to method new on IO::Path because it is not inherited or done by IO::Path::Unix
in block <unit> at /tmp/5PqCOM2SYG line 1
user3 does volume make sense only under Windows? 16:59
seatek volume on unix is weird -- just paths really 17:00
you mount volumes into paths
seatek so for accessing them, you just use paths -- doesn't make much sense with volumes 17:01
ilmari would argue that windows is weird for having user-visible volumes
seatek yeah it's inflexible in windows
seatek yeah docs in IO:Path::Unix say volume on unix will be empty string 17:02
tyil tfw ´ and ¨ arent valid quotes :( 17:03
raschipi Well, windows does work like unix under the hood in the most recent versions. It's just very well hidden. 17:05
user3 basically, Bill Gates paid someone $10k to write the first DOS program, which is a scaled down version of unix, from then on his main paradigm has been to lower expectations by giving as little as possible to his users 17:11
cfa morning all. 17:12
bug: 'p6 --profile' segfaults (rakudo 2017.06-102-g864fa7298 on moar 2017.06-29-ga51ba620) 17:13
raschipi DOS is actually more based on CP/M, not Unix 17:13
cfa (encountered on mac, reproduced with a fresh moar install on linux)
user3 it resembles Unix a lot, except / replaced by \ and LF replaced by CRLF 17:14
in its commands, i mean, it resembles Unix
in contrast to the Mac 17:16
of the time
geekosaur both have DEC minicomputer OSes in their background 17:17
user3 Bill Gates = marketing expert 17:18
seatek sales & legal 17:20
raschipi Yeah, they are similar because both were based on systems like TOPS-10, MULTICS, etc.
epony checkout xenix
user3 the volume is empty on unix, but I used to have a dual boot system with A: for the volume in windows and ~/A for something equivalent to the volume on linux 17:32
that made it a lot easier to convert paths
user3 i gather that the folks who decided that the Path volume on unix would be always empty have never had a dual boot system 17:33
seatek you just use paths and forget the volume - then you can make the path be whatever for dual boot, whateve ryou need. you can't (or couldn't ) change the volumen names on windows, though 17:41
literal_ hello peeps 17:54
I'm trying to make a "loader" of sorts that will dynamically load up a perl6 file (a handler) and run a function or two. That part it easy enough, but I need the handler to have access to an API in the same program as the loader. Any good articles on something like this? 17:57
timotimo you can set up a dynamic variable before calling into the handler's code 18:03
the handler can then just access that variable and do whatever it wants with it
or pass your API objects as arguments to a common function the handler is supposed to implement 18:04
literal_ hm that's possible
but that feels kinda shoddy
But if it's less aggravation it's probably better 18:05
DeadDelta user3: yeah, volume is totaly ignored in Unix spec 18:08
Unix spec = IO::Spec::Unix
DeadDelta backlogs further 18:10
DeadDelta and yeah, we don't do anything shell XYZ does with expanding ~/ to anything. The only weird thing we have is '-'.IO that when .open'ed uses STDOUT/IN, but so far there's a motion to remove that in future language versions 18:11
Note that $*HOME is not guaranteed to be set, so using "$*HOME/whatever" isn't 100% foolproof 18:12
m: %*ENV<HOME>:delete; dd $*HOME
camelia Nil $HOME = Nil
seatek literal_: why not just load the API in the "handler"? Or do you need some variable brought over that you set in the API that only your main loader program has set? 18:18
user3 what is the best way to test if I'm on Linux or Windows 18:19
timotimo m: say $*KERNEL.is-windows 18:20
camelia No such method 'is-windows' for invocant of type 'Kernel'
in block <unit> at <tmp> line 1
timotimo m: say $*KERNEL.is-win
camelia No such method 'is-win' for invocant of type 'Kernel'
in block <unit> at <tmp> line 1
timotimo where was that ...
geekosaur m: say $*DISTRO.is-win 18:21
camelia False
timotimo ah, distro, yes
seatek When I need to do questionable things like sharing variables across objects, I usually use a singleton -- usually for stuff like database connections
user3 good
say $*DISTRO # OUTPUT: fedora (25.Workstation.Edition) 18:23
evalable6 debian (8.jessie)
DeadDelta user3: considering your earlier questions, out of curiousity, why do you need to know if you're on Windows? 18:23
user3 ok, but it's funny that the word "win" (in is-win) appears in the output on windows, while "linux" doesnt appear in the output on linux 18:24
DeadDelta Or why you're using IO::Path::Unix instead of regular one
user3 it's not completely consistent imho
FROGGS # ubuntu (16.04.2.LTS.Xenial.Xerus)
DeadDelta hm?
.is-win gives you a Bool True or False
DeadDelta doesn't follow what the word win has to do with anything
user3: $*KERNEL.say has linux in it 18:25
DeadDelta I get linux (3.2.0.23.generic) from $*DISTRO 18:26
m: $*KERNEL.say
camelia linux (4.4.70.18.9.default)
seatek debian (9.stretch)
user3 say $*KERNEL # OUTPUT: linux (4.11.6.201.fc.25.x.86._.64)
evalable6 linux (3.16.0.4.amd.64)
DeadDelta And it's an object, not a string, you can query parts you're interested in with methods 18:31
m: say $*KERNEL.name 18:32
camelia linux
DeadDelta c: HEAD say $*KERNEL.name
committable6 DeadDelta, ¦HEAD(2a8d1e7): «linux»
DeadDelta "win32" on win7
DeadDelta BTW shell 'echo ~/' don't work on Windows, but $*HOME does give you user's home 18:34
user3 isn't Win32 obsolete in this name: class IO::Path::Win32 18:38
Win32 barely still exists lol
raschipi Windows 10 is still win32 18:39
user3 yeah, but for how long?
raschipi Forever
user3 which computer manufactuer is going to keep making 32 bit computers forever?
raschipi Windows 64 bit is win32 too.
DeadDelta user3: you don't need to use subclasses of IO::Path other than for testing purposes. Just use IO::Path and it will Do The Right Thing on all OSes 18:40
TEttinger win32 is used to avoid the trademark on Windows
it's a de facto name 18:41
user3 what about windows0000
FROGGS what is windows0000? 18:45
moritz it's when the windows version will overflow in the year 10k 18:46
FROGGS win32 is the operating system name that many compilers and other things spit out when you ask them... (e.g. cygwin)
TEttinger doesn't matter if it's an x86 or other architecture
user3 what are they gonna do when they reach the name Windows 13? 18:47
move directly for 12 to 14?
*from
DeadDelta Why?
TEttinger Windows "Holy cow we still exist"
user3 recall Apollo 13 !!!!
DeadDelta doesn't recall 18:47
TEttinger Windows Existential Crisis 18:47
timotimo bring apollo 13 home!
DeadDelta doesn't understand what rocket has to do with Windows
TEttinger they would avoid 13 for the same reason as 4 I guess 18:48
DeadDelta heh
stupid humans and there silly superstitions
TEttinger every culture has unlucky and lucky number associations
well, the ones with numbers
DeadDelta And that's why the robots will win :) 18:49
TEttinger *their 18:49
geekosaur microsoft will do what microsoft will do, and the rest of the world will have to deal.
FROGGS win32 v6.1 would be Windows 7 for example (I think)
(maybe Windows Server 2008 (R2) too)
and the operating systen name does not say anything about the architecture, so the 32 in there is quite meaningless
r: say $*KERNEL.bits
that's what you'd use instead
(outputs 64 here)
camelia 64 18:49
mscha m: say [X] [[1,2,3],[4,5,6]]; # correct 18:50
camelia ((1 4) (1 5) (1 6) (2 4) (2 5) (2 6) (3 4) (3 5) (3 6))
TEttinger windows 7 is v6.1 for historical compatibility reasons, the same reason why win32 is not useless as a name
mscha m: say [X*] [[1,2,3],[4,5,6]]; # correct
camelia (4 5 6 8 10 12 12 15 18)
mscha m: say [X] [[1,2,3],]; # correct
camelia ((1 2 3))
mscha m: say [X*] [[1,2,3],]; # wrong? at least inconsistent, should be (1, 2, 3)
camelia (6)
TEttinger it looks like that's vector math? 18:51
TEttinger multiplying two vectors in an earlier example. but multiplying a vector by a scalar is a scalar for at least one arrangement of the arguments, right? 18:52
timotimo it's not supposed to be, though
oh, haha
mscha: X is X, so it's comma-fying the list, so you get 1, 2, 3
when you use X*, you get multiplication instead of commafication, so you get 1 * 2 * 3
timotimo that seems consistent to me 18:53
mscha timotimo: that's not what's happening: [X] [[1,2,3]] is commafying a list with one list 18:54
timotimo no, [X] [[1, 2, 3]] isn't even getting a list of lists passed to it
you mean [[1, 2, 3],], right? 18:55
mscha Yes, that's what the code examples have
timotimo [X] [[1,2,3],] ought to be the same as infix:<X>([1, 2, 3]) 18:56
hmm
i think i might see what you mean
mscha Since it gets 1 argument, should be a no-op
Actually, I changed my mind about [X] [[1,2,3],] being correct. It should be: ((1), (2), (3)), not ((1, 2, 3)). 18:57
[Coke] is anyone else seeing xt/space-after-comma.t fail in the doc repo?
mscha m: say [X] [[1,2],[3,4],[5,6]] # 2×2×2=8 lists of 3 elements 19:04
camelia ((1 3 5) (1 3 6) (1 4 5) (1 4 6) (2 3 5) (2 3 6) (2 4 5) (2 4 6))
mscha m: say [X] [[1,2],[3,4]] # 2×2=4 lists of 3 elements 19:05
camelia ((1 3) (1 4) (2 3) (2 4))
mscha m: say [X] [[1,2],[3,4]] # 2×2=4 lists of 2 elements, I mean...
camelia ((1 3) (1 4) (2 3) (2 4))
mscha m: say [X] [[1,2]] # should be 2=2 lists of 1 elements, not 1 list of 2 elements
camelia ((1 2))
TimToady m: say [X] [1,2],[3,4] # outer [] are useless
camelia ((1 3) (1 4) (2 3) (2 4))
mscha m: say [X] [[1,2],] # should be 2=2 lists of 1 elements, not 1 list of 2 elements 19:06
camelia ((1 2))
mscha So how do I get what I need? If have a list of n lists (n ≥ 1), and I want the cross product. 19:07
Works fine for n > 1, but for n = 1 it decides to behave differently.
timotimo i do believe X will give you flat stuff 19:08
or is that only Z ... 19:09
m: say (1, 2, 3) X (9, 9, 9)
camelia ((1 9) (1 9) (1 9) (2 9) (2 9) (2 9) (3 9) (3 9) (3 9))
timotimo it's actually pairs, huh
i mean tuples
m: say (1, 2, 3) Z (9, 9, 9)
camelia ((1 9) (2 9) (3 9))
TEttinger m: say (1, 2, 3) Z* (9, 9, 9) 19:10
camelia (9 18 27)
timotimo m: say &infix:<,>(1).perl 19:11
camelia (1,)
mscha To be specific, I want the divisors for, say, 2³×3² = 72. 19:12
m: my @prime-powers = (1,2,4,8),(1,3,9); say [X*] @prime-powers;
camelia (1 3 9 2 6 18 4 12 36 8 24 72)
mscha That works.
Now I want the prime powers for 2⁴.
m: my @prime-powers = (1,2,4,8,16),; say [X*] @prime-powers;
camelia (1024)
mscha (divisors, I mean) 19:13
Oops, that's not what I get.
So how do I deal with this?
It's supposed to give me (1,2,4,8,16)
geekosaur that sounds wrong to me 19:16
geekosaur oh, missed trailing comma. hm 19:17
Geth doc: 86213a4a23 | (Jan-Olof Hendig)++ | doc/Type/Supply.pod6
Added a few code examples
19:19
travis-ci Doc build errored. Jan-Olof Hendig 'Added a few code examples' 20:10
travis-ci.org/perl6/doc/builds/248084633 github.com/perl6/doc/compare/6d242...213a4a2399
DeadDelta Voldenet: so we do actually handle BOM. You just used the wrong one. utf8 bom is three bytes long 20:26
DeadDelta github.com/MoarVM/MoarVM/blob/mast...tf8.c#L360 20:26
literal_ Hey guys, when i `require` a file, what's the correct way to call a sub with a known name in there? 20:40
DeadDelta literal_: is it just a sub? There's no module or package in the file? 20:41
literal_ nope, just the sub and possibly other stuff 20:42
Oh, my bad
DeadDelta make it `our` and it should just work
our sub foo {…}
literal_ yes, the while thing's a module
DeadDelta ok, does it got `is export` on it? thw sub 20:42
*the sub 20:43
literal_ yes
DeadDelta then run import ModuleName and it'll be imported 20:43
How it's not a module tho
?
DeadDelta relocates
literal_ Sorry, I said wrongly
literal doppelganger :P
yoleaux 1 Nov 2016 16:31Z <jnthn> literal: Seems that various occurences of once in Version, Process, Kernel, and Backtrace are vulnerable.
1 Nov 2016 16:32Z <jnthn> literal: disregard that, tab-o :)
literal_ the whole deal is a module 20:44
something along the lines of `unit module MyProject::Handler; sub init(some args...) is export { ... }` 20:45
oh hey other literal :P 20:46
DeadDelta literal_: ok, is there a reason why you're using `require` instead of just `use`? 21:14
and import MyProject::Handler; after require will import the subs. There's, um, MyProject::Handler::EXPORT::DEFAULT::init() you can call it as too, if you don't wanna import 21:15
literal_ Yeah I'm using require because I don't have a guarantee at compile time as to what the name will be 21:17
DeadDelta m: my $name = 'Test'; require ::($name); ::('&\qq[$name]::EXPORT::DEFAULT::ok')(1) 21:20
camelia ok 1 -
DeadDelta Not sure how to `import` with a run-time name. It doesn't like `import ::($name)`
jnthn import happens at compile time, not runtime 21:23
use = need + import, approximately
DeadDelta oh
literal_ Yeah hmm 21:31
seatek m: multi a($a, :$b = False, :$c = True) { say 'a' }; multi a($a, :$b = False, :$c = True, UInt :$d) { say 'b' }; a('test', :d(2)); 21:32
camelia b
seatek m: class C { multi method a($a, :$b = False, :$c = True) { say 'a' }; multi method a($a, :$b = False, :$c = True, UInt :$d) { say 'b' };}; C.a('test', :d(2));
camelia a
seatek Is that a bug?
jnthn No, all methods have an implicit *%_ 21:33
seatek hmm. ok 21:34
seatek So, am I right in thinking then that multi dispatch isn't a good idea for methods unless you're dealing with positional parameters only? 21:43
El_Che I don't agree
I have methods that do the same thing but with different input (eg a file and a string) 21:44
I like that in perl6 I can have multi methods
while in e.g. go I need to go with methodForStr and methodForFile 21:45
seatek I do too -- I just wish that they behaved the same between methods and subs
El_Che I tend to write a prive generic method that is used by both public methods
that said, I am only now reading the backlog
seatek it matches differently between methods and subs 21:46
i thought i was insane, or that there was a bug
jnthn seatek: It's fine if you're using required named parameters 21:48
seatek: It's just that they are optional by default
El_Che what john says :)
DeadDelta john is always right :)
El_Che been bitten by that
DeadDelta ZofBot: all hail john!
El_Che his beard make him look wise, that's true
jnthn
.oO( who is this john guy and what's he doing with a vowel in his name? )
21:49
DeadDelta :)
seatek So, multi dispatch will not work as expected with named parameters unless the named parameters are all required. That would make sense with the slurpy bit 21:50
(with methods)
DeadDelta seatek: no, it works as expected. Nameds just don't participate in multi-dispatch, except for tie breaking and I think the difference you're seeing between the subs is only due to ALL methods have named args, while some subs don't 21:51
DeadDelta looks at earlier evals above
DeadDelta Not sure why the chosen canidate differs there 21:53
seatek because theyr'e more like positionals in methods, even when they're named, because of *%_ 21:54
DeadDelta Ahhh 21:55
seatek i just tried it as a sub in a last desperate test before i leaped out the window -- and it worked as a sub one
DeadDelta Nah, I see why
seatek: in your sub case, the first sub is not a valid candidate because it cannot accept :d named param, so it despatches to the only candidate available: the second sub. In the method case however, the first one does match, so it goes to it 21:56
And it matches because in methods we have *%, so it can take the :d
m: class C { multi method a($a, :$b = False, :$c = True, UInt :$d) { say 'b' }; multi method a($a, :$b = False, :$c = True) { say 'a' }; };
camelia ( no output )
DeadDelta m: class C { multi method a($a, :$b = False, :$c = True, UInt :$d) { say 'b' }; multi method a($a, :$b = False, :$c = True) { say 'a' }; }; C.a('test', :d(2)); 21:57
camelia b
DeadDelta And now method goes to b too, because it's first in the list
seatek yeah there's that extra slurpy bit
which has the side-effect of making multi dispatch not behave as expected unless you're using required named parameters -- unless you're extrememly familiar with the language and know about that slurpy bit 21:58
DeadDelta I wouldn't place the knowing of *% bit to be that arcane TBH :/ 21:58
seatek which i didn't ;)
DeadDelta Though I don't think we have a full and complete list of how multi dispatch happens. 21:59
Which certainly would be helpful
seatek that's right there
no mention in the docs
DeadDelta We should tell john to do it :)
lol, john left :P 22:00
seatek it's a weird thing to say though because you'd expect it to be the same... it's a weird edge case... so it might sound funny in docs
like oh, you can go out and in any door in the house, except the side door on wednesday 22:01
who knew? ;)
DeadDelta It probably depends on your background. If you come from somewhere like Perl 5 where methods are subs, then sure. But otherwise, it doesn't seem strange for there to be difference 22:01
I mean, you have an invocant there at play too. So that right there is already a difference 22:02
seatek i'm just happy the world makes sense again
DeadDelta :)
seatek but i would change it ;)
DeadDelta My spidey senses are telling me there's a very good reasons why methods have implicit *% 22:03
'cause it's expensive and would've been gone a long time ago :)
Probably something to do with inheritance or something.
or them being "latebound" or whatever. Like how you can statically optimize subs but have to wait till runtime to know what you're calling the method on 22:04
jnthn It's to make inheritance and deferring to the base class work out correctly 22:05
DeadDelta Ah
jnthn Named parameters are primarily for options
seatek yeah i figure there's super good reasons. it's just some weird little side effect that of course i fall into 22:06
jnthn Many good uses of inheritance delegate to the base class, since that's the safest way to be sure you're doing at least as much as the bae class does
jnthn *base 22:06
And this means that, provided you are doing it with callsame or similar, you can safely add an extra option to a method in a base class and not have to do changes in the subclasses
DeadDelta Makes sense. 22:07
jnthn But yeah, the cost of getting *that* right is the surprises that the implicit *%_ bring 22:08
lizmat wonders where :{} is getting parsed 22:09
DeadDelta It's an op at the end of ...
s: &circumfix:<:{ }>
SourceBabyDeadDelta, Sauce is at github.com/rakudo/rakudo/blob/2a8d...sh.pm#L768 22:10
lizmat aaaah
Geth doc: 6996421ddc | seatek++ (committed using GitHub Web editor) | doc/Language/functions.pod6
multi methods and optional named parameters
El_Che the named/unnamed option is a little incoherent, but it's handy 22:14
El_Che it can make your api a little incoherent if you don't pay attention is what I mean 22:15
linuksz why this code don't work? 22:29
sub modify ( $var)
{
$var = 5;
}
modify 1;
El_Che is rw 22:29
linuksz i am new to perl 6 22:30
Juerd linuksz: Because $var is a readonly alias. To get a read-write alias, use "sub modify ($var is rw) { ... }"
El_Che linuksz: sorry I wasn't more verbose. Too much multitasking. Juerd++
Juerd linuksz: This is considered a bad style, though. Instead of having a function modify a variable directly, it's better to have the function return the new value and leave the task of assigning it to a variable to the caller: sub five { return 5 }; my $var = five; 22:31
linuksz: Besides that, in your code you're trying to assign 5 to the number 1. You can't change literals, they're always read-only.
El_Che Changing in place make sense eg when you have a big data structure and you want to save memory, imho 22:32
AlexDaniel yea, it is needed sometimes
linuksz it isn't the code i got problem with, it only an extraction from it to easier understand my problem
Juerd El_Che: There are always reasons for doing the ugly thing, but they're the exceptions :) 22:33
AlexDaniel that said, if you hava a data structure… that's probably in an object, right? And if so, you can probably change attributes of an object without is rw…
Juerd El_Che: This is why "is rw" exists, but is not the default
El_Che I have ugly style in a small production app 22:34
that won't compile on recent rakudo release
El_Che I think I made a hash is ew 22:34
is rw
:)
need to rewrite that
linuksz my code that i made this extract from, does a few regexp matching, and string replacement on a string.
El_Che linuksz: I would return a new string 22:35
Juerd linuksz: Unless the string is expected to be huge, it's still better style to return the changed value rather than to change it in place
linuksz it don't change it in place
Juerd linuksz: You can get a copy of the variable using "is copy" instead of "is rw".
El_Che linuksz: it's *way* readable
AlexDaniel linuksz: so is there anything wrong with “is rw” or “is copy”?
linuksz: docs.perl6.org/type/Signature#Para..._Modifiers
Juerd really likes "is copy" and would want that in other languages. 22:36
Basically I get it in Perl 5, but only as a side-effect of unpacking @_ using assignment :)
AlexDaniel hehe
linuksz so if i give it for the subroutine as "is copy", it can modify it, but not globally, it only has effect in the code block?
but rw modifies it as it was declared globally? 22:37
AlexDaniel well, kinda, yes
Juerd linuksz: "is rw" will change the given variable, whereas "is copy" literally makes a copy and leaves the original untouched. 22:38
linuksz but why isn't "is copy" default?
timotimo because it's extra (expensive) work 22:39
Juerd linuksz: Because most of the time, you just want read-access to the variable. You get a read-only alias. That is, no copies are made, but there's some protection against accidentally writing to the variable.
AlexDaniel also, it makes the code easier to read 22:40
linuksz so if i pass it with "is copy", it will act as default in C, and it is only an enhacement by perl6 ?
Juerd In most languages that support aliasing or pass by reference, there's no protection against changing the variable. Perl 6 has the protection, and enables that by default. "is rw" just turns the write protection off. 22:41
Juerd linuksz: My C is not good enough to answer that question :) 22:41
Besides that, C doesn't really have strings or bufs, which are probably the only data types for which "is rw" makes sense anyway :) 22:42
BenGoldberg m: my $test = 42; sub foo($bar) { say $test =:= $bar }; foo($test);
yoleaux 08:18 EDT <DeadDelta> BenGoldberg: your `is native` export issue is 'cause you got my package EXPORT::DEFAULT my package EXPORT::types. I don't think the `is export` things are additive.
camelia False
yoleaux 08:19 EDT <DeadDelta> BenGoldberg: oh maybe they are :/ as this works m: package Foo { my package EXPORT::DEFAULT {}; sub bar is export(:DEFAULT, :meows) { say "hi" } }; import Foo; bar
timotimo rejoice, you can now profile stuff again (if you get moarvm master) 22:43
BenGoldberg m: my $test = 42; sub foo($bar is raw) { say $test =:= $bar }; foo($test);
camelia True
BenGoldberg m: my $test = 42; sub foo($bar is rw) { say $test =:= $bar }; foo($test);
camelia True
BenGoldberg m: my $test = 42; sub foo($bar is copy) { say $test =:= $bar }; foo($test);
camelia False
zengargoyle in that things passed by C are just nubers on a stack (that you now own the location of) C is 'is copy'. 22:44
BenGoldberg Interestingly, without any of 'is rw', 'is copy', etc, it prints False, indicating they are separate objects. 22:45
zengargoyle one of those items might be a pointer which you can deref and use 'is rw'
El_Che or it may be an explosion :)
the readonly default is nice
seatek i love the ro default - it makes me behave 22:47
zengargoyle except when you want to do a ~~ in a method foo ($/) { ... } in an action class of a grammar. :P
zengargoyle and i don't think 'is rw' or 'is copy' actually help there anyways... 22:48
neither does a scope with { temp $/; $s ~~ //; ... } 22:49
DeadDelta m: my $b = buf8.new: 1, 2, 3; sub foo ($b) { $b.append: 42 }; foo $b; dd $b 23:00
camelia Buf[uint8] $b = Buf[uint8].new(1,2,3,42)
DeadDelta Juerd: ^ there's no protection for mutating the object, like buf 23:01
DeadDelta You simply can't assign to the container 23:01
Juerd DeadDelta: That's why I said "some" protection :)
timotimo yeah, there's a few immutable things, though 23:02
DeadDelta And is rw doesn't turn the protection off, it requires a writable container
timotimo like a Blob is the immutable equivalent of Buf
DeadDelta *doesn't just
m: -> $ {}(42)
camelia ( no output )
DeadDelta m: -> $ is rw {}(42)
camelia Internal error: inconsistent bind result
in block <unit> at <tmp> line 1
DeadDelta hahaha
Well, in a perfect world that would say something about wanting a writable container :) 23:03
m: sub ($x is rw) {}(42)
camelia Parameter '$x' expected a writable container, but got Int value
in sub at <tmp> line 1
in block <unit> at <tmp> line 1
Juerd DeadDelta: I'm assuming linuksz is a beginner and intentionally did not want to mention containers
DeadDelta It's the anon that makes it go weird 23:04
m: sub ($ is rw) {}(42)
camelia Internal error: inconsistent bind result
in sub at <tmp> line 1
in block <unit> at <tmp> line 1
[Coke] seatek: 6996421ddc appears to be missing a word
(in docs)
DeadDelta Filed as rt.perl.org/Ticket/Display.html?id=131673 23:06
DeadDelta m: my @a = 1, 2, [3, 4]; -> @z is copy { @z.tail.append: 42 }(@a); dd @a 23:08
camelia Array @a = [1, 2, [3, 4, 42]]
DeadDelta Same with `is copy` it won't let you get away with murder :)
DeadDelta zengargoyle: in those cases, just don't name the parameter $/ 23:10
class Actions { method foo ($bar) {} }; will work just fine, you'll simply have to access captures like $bar<foo> instead of just $<foo> 23:11
zengargoyle yeah, i just didn't want to go back and change all those $/ into $bar. but realized .substr would work even better. 23:14
plus i like being able to grep '($/' and find my action methods. 23:15
Geth doc: d92888310a | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/grammars.pod6
Show non-$/ var use in actions in example

  - Already mentioned in the adjacent prose
  - Also include example that shows you don't have to use `$/.make` and can just make
Geth ecosystem: titsuki++ created pull request #348:
Add Chart::Gnuplot to ecosystem' -m 'See github.com/titsuki/p…
23:38
ecosystem: 6427314855 | titsuki++ | META.list
Add Chart::Gnuplot to ecosystem' -m 'See github.com/titsuki/p6-Chart-Gnuplot'
ecosystem: 1becf943fc | (Itsuki Toyota)++ (committed using GitHub Web editor) | META.list
Merge pull request #348 from titsuki/cgnuplot

Add Chart::Gnuplot to ecosystem' -m 'See github.com/titsuki/p…
Geth doc: ecd74e95cf | seatek++ (committed using GitHub Web editor) | doc/Language/functions.pod6
Coke discovered my missing be
23:51
seatek [Coke]: thanks :)