Perl 6 - the future is here, just unevenly distributed

IRC log for #perl6, 2006-12-20

Perl 6 | Reference Documentation | Rakudo

| Channels | #perl6 index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:04 polettix joined perl6
00:09 mjk joined perl6
00:15 whooosh joined perl6
00:15 lambdabot joined perl6
00:47 zgh joined perl6
01:04 ssig33 joined perl6
01:26 weinig is now known as weinig|bbl
01:27 lyokato joined perl6
02:29 TimToady @tell Ovid It looks like junctions are working right to me.  See S09:543 for description of autothreading.
02:29 lambdabot Consider it noted.
02:42 dmq joined perl6
03:00 bonesss joined perl6
03:16 weinig|bbl is now known as weinig
03:18 nothingmuch joined perl6
03:20 weinig is now known as weinig|zZz
04:08 elmex_ joined perl6
04:15 prism joined perl6
04:29 mako132_ joined perl6
05:06 bsb left perl6
05:15 vanny joined perl6
06:13 nipra joined perl6
06:14 BooK joined perl6
06:16 kisu joined perl6
06:31 vanny left perl6
06:49 iblechbot joined perl6
07:06 trexy joined perl6
07:06 trexy hi?
07:07 trexy I just wanted to drop an idea into the meme pool ...
07:07 trexy first a confession ...
07:07 trexy I was once a Java programmer
07:07 trexy which means using "this" all over the place
07:08 trexy so I'm preparing to change to "self" --- per the synopses
07:09 trexy while doing a global replace of this for self --- I realised both are 4 letters long
07:09 trexy and then I wondered about a shorter version: me?
07:09 trexy which kind of mirrors "my"
07:10 trexy me-»do_some_method()
07:10 trexy but I was always taught to say "I" instead of "me"
07:10 trexy i-»wen_to_the_beach()
07:11 trexy the problem with that is i --- is almost universally used in compsci as a loop iterator
07:11 trexy hmmm .... then maybe capital I?
07:12 trexy I.went_to_the_beach()
07:13 TimToady we abbreviate self to S and put an I in the middle so it's legal to say
07:13 TimToady $.went_to_the_beach()
07:13 trexy Ok ... that's another character less
07:13 trexy :-)
07:13 trexy so "the topic" is $.
07:14 trexy the "I"
07:14 TimToady no, the topic is always $_
07:14 TimToady the "self" is not really "I"
07:14 trexy so the I is $.?
07:14 TimToady I is the programmer.
07:14 TimToady or maybe the lexical scope.
07:14 TimToady the "self" is really "yourself"
07:15 TimToady a method is a recipe given by the programmer to the object.
07:15 TimToady ...now shoot yourself in the foot...
07:15 trexy ok ...
07:15 trexy when you call a method on an object
07:16 trexy it kind of exists though
07:16 trexy but whenever you use this/self etc ... it always inside the object
07:17 TimToady sure, but it's just like a self-help book.
07:17 trexy that you look up from inside the object
07:18 trexy so $. really performs this function anyway ---- so I think my problem is solved
07:18 trexy a shorter version of this/self
07:19 TimToady we spent a lot of time thrashing this out several years ago...
07:19 trexy cool
07:19 TimToady you *can* have the current topic be self, but only by explicitly declaring your invocant as $_
07:20 TimToady for a while ./foo() was the self call, but it doesn't really work out right.
07:20 trexy ok
07:21 TimToady the sigil-as-self works to document the item/list/hash context nicely.
07:21 TimToady and keeping the dot in the middle means all the dot variants also work.
07:21 TimToady $.=foo $.*foo etc.
07:21 trexy cool
07:23 trexy on a different note ....
07:23 TimToady G#?
07:23 trexy a Perl6 presentation at LPW last week demonstrated roles
07:24 trexy I'm not sure if I got this right ...
07:24 ssig33 joined perl6
07:24 TimToady that's okay, neither are we. :)
07:24 ofer1 joined perl6
07:25 trexy but I think role can't hold a data structure
07:25 trexy so no attributes per se - for the role?
07:25 TimToady 'course not, it's not an object.
07:25 TimToady however, it can have a generic attribute that gets instantiated
07:25 TimToady when the role is composed into a class
07:26 trexy ok ... but then if the role acts on some data --- it needs to specify what it wants?
07:26 TimToady by just calling the appropriate method?
07:26 TimToady $.foo is really a method call, btw
07:27 trexy the example given I think required a "does" to pull in the data structure
07:28 TimToady does is how you compose a role into a class, or into another role.
07:29 TimToady you can also use them more like ordinary mixins at run time.
07:29 TimToady but if it's something that's known at compile time, it's better to compose them then because you can detect collisions.
07:29 trexy sorry --- I just pulled up the slide
07:30 trexy you use the "has" keyword to pull in the shared state
07:31 TimToady has is just the declarator for attributes
07:31 trexy OK ... this is what I'm talking about
07:31 trexy sorry about the confusion
07:32 trexy so if you declare a role on attributes --- you can say that the class "has" something the role needs
07:33 trexy anyway the reason why brought this up --- is a member of the audience made want sounded like a good suggestion
07:34 trexy if the role says ---- the class I get composed into needs .... "thing"
07:35 trexy what about the word "have"? ... as in the class must "have" this attribute if the role is going to work?
07:35 TimToady The code already indicates what you need, generally.
07:36 TimToady if the role says $.foo then something must provide the foo method.
07:36 TimToady either with explicit "method foo" or by "has $.foo" or by inheritance or composition or delegations of something that provides the foo method.
07:36 trexy OK
07:37 TimToady so I don't see a need for an explicit extra declaration.
07:37 trexy the example given as a dog with 4 paws
07:37 trexy has @paws
07:37 TimToady roles are more-or-less immutable, so they have to have the code when they're compiled.
07:37 TimToady so it's not like a role can defer something with naming it, generally.
07:38 TimToady the composition process is allowed to assume that all the methods it sees at class composition time are all that are availabe.
07:38 TimToady and issue warnings on missing things.
07:38 TimToady the warnings can be suppressed, which is a form of declaration, I suppose...
07:39 trexy Ok ... but I'm not sure I understand
07:39 trexy if I declare a role for a dog class ---- lift_leg()
07:40 TimToady lift_leg() would be a method, not a role
07:40 TimToady well, not with that syntax...
07:40 TimToady $.lift_leg()
07:40 trexy ok .... I'm trying to think of a use case for roles and dogs
07:41 TimToady class Dog is Mammal does Pet {...}
07:41 trexy can't more that dogs lift their legs --- cats too?
07:42 trexy ok Pet ... eats_dinner?
07:42 TimToady class Mammal is Quadraped does Legs {...}
07:42 TimToady well, Quadraped does Legs, maybe
07:42 trexy Legs lift_one?
07:43 TimToady the hierarchy starts breaking down when functions cut across...
07:43 TimToady but that's why we have roles.
07:44 TimToady but the Pet role is more like a role.
07:44 trexy indeed --- I can see that roles apply across the hierarchy --- which is great
07:44 TimToady leggedness is more an innate quality of Dog is Mammal is Animal
07:44 trexy OK... I'm just trying to come up with an example where your role needs data in the class like @legs / @paws etc.
07:45 TimToady well, that example is probably my fault.
07:45 TimToady how 'bout role Pet { has $tag; has $collar }
07:45 TimToady something associated with Pethood, not animalhood.
07:45 trexy sounds good
07:46 trexy so this means that the composing class needs to have a collar?
07:46 TimToady no
07:46 trexy ok .. then I misunderstand
07:46 TimToady it means that Pet will make sure one is provided.
07:47 TimToady except has $collar would be private, you'd want has $.collar to declare an accessor to be public
07:47 trexy to allow the role to get to it
07:47 TimToady or write your own accessor in the role.
07:48 trexy OK
07:48 TimToady the role can access the private storage directly, but generally anyone outside the role will use the method.
07:48 TimToady inside $!collar is the actually storage location.
07:48 TimToady but you can't access that from outside.
07:48 trexy so I think the suggestion was simply:  role Pet { have $tag; have $collar }
07:48 TimToady at least, not outside the class.
07:49 TimToady there's some debate whether the class should make a role's private data available to the rest of the class.
07:49 trexy hmmm .... it's tricky
07:49 TimToady well, that's a useless role, really, unless there are accessors.
07:49 TimToady which is why I should at least have put $.collar
07:50 trexy like this ...  role Pet { have $.tag; have $.collar } ?
07:50 TimToady but then the have isn't buying you much over the has.
07:51 trexy so anything that plays the Pet role must have a tag and a collar
07:51 TimToady we proposed a different use for "have" dealing with turning closures into objects, so that would conflict too.
07:51 trexy I just thought I would pass on the suggestion
07:52 TimToady though it's kind of similar, in that "have $x" inside a closure would make a $.x attribute from any inherited lexical $x from outside the closure.
07:52 trexy it seemed to make sense when reading the role --- as it applied to the class
07:53 TimToady I agree that there is a natural tendency to take plurals as shared.
07:53 TimToady that's how we ended up with "our", after all.
07:53 trexy I like our, my etc
07:53 TimToady I do think that where "has" is expected, "have" looks a little too much alike.
07:54 trexy ok
07:54 TimToady I in fact missed your haves there for about 20 seconds...
07:54 TimToady and misread them as has.
07:54 trexy i'm sure with usage it will work out
07:55 TimToady anyway, if we need something declarative to do that, we'll certainly not hesitate to provide some kind of declaration, though perhaps not with "have".
07:55 TimToady adding new declarators is not supposed to be difficult in Perl 6...
07:56 trexy sure ... something that lets the programmer know what the role needs --- when it is re-used
07:56 TimToady yes, that's been our approach to a lot of this stuff, design what we can, and assume we'll tweak it where it doesn't quote work.
07:56 TimToady *quite*
07:57 trexy role Pet { needs $tag; needs $collar }
07:57 trexy ;-)
07:57 TimToady well, and the original Traits paper had something very like that.
07:58 TimToady though only with methods, not attributes.
07:58 trexy this would certainly put any role user on notice --- to use this role -- you need ...
07:59 TimToady the compiler already knows you've called $.tag and $.collar though.
08:00 TimToady (unless they're in an eval or something)
08:00 ssig33 joined perl6
08:00 trexy I mainly thiinking from the programmer's perspective
08:01 TimToady well, comments have to be good for something..  :)
08:02 trexy "I need something to do this"
08:02 trexy "what does this"
08:02 TimToady but maybe just something noopy: "exists $.tag;"
08:03 trexy ok ... there must exist a $.tag for the role to work
08:03 TimToady just some way to mention $.tag near the top is sufficient, I think.
08:04 TimToady "hasn't $.tag;"  :)
08:04 trexy ok ... this will cue the programmer - if I'm going to use this role my class needs .... such and such
08:05 TimToady on the other hand, maybe there's some way for all participating roles to declare a shared attribute.
08:05 TimToady without any of them taking responsibility for actually creating it.
08:05 TimToady seems a little odd though.
08:05 trexy that's interesting
08:06 TimToady I think the standard position though is that you just call it $.foo from all the roles and force the class to "has" it.
08:07 TimToady if that's good enough most of the time, we probably don't want to clutter the works with additional declarators.
08:08 trexy hmmm ... then variables would be cast into role-space
08:09 TimToady In general it's just a lot safer to do all the interfaces with methods, since that lets you refactor the attribute out to a base class or role.
08:10 trexy yes ... and it can be hidden inside an object
08:10 TimToady so if you have a bunch of roles wanting to share an attribute, they probably all just pull in a single role that defines it, or delegates it, or whatever.
08:11 trexy so maybe conventionally speaking people will do this to make their role doable
08:11 TimToady we'll see how it all works out, or not...
08:12 trexy I'm personally really excited about it
08:12 TimToady the new metaobject protocol is about to be hooked into pugs, so maybe you'd like to help out with that over the next little while.
08:13 TimToady have you played with pugs at all?
08:13 buetow joined perl6
08:13 trexy I'm hoping to help out with an IDE-like thingy
08:13 trexy I've played with a pugs a bit
08:14 TimToady well, certainly an IDE needs to know all the metadata it can know.
08:14 TimToady have you got a pugs commit bit yet?
08:14 trexy indeed --- and I think a way of hypertextually traversing the OO structure is called for too ....
08:15 trexy I note Stevan's smalltalk-esque class browser etc.
08:17 trexy no commit bit yet ... but I would like to share this IDE-like thing at some point
08:18 TimToady if you send an email I can send you a commit bit.
08:19 trexy ok ... not sure what I would commit though?
08:20 TimToady anything you like.  tests, docs, idea files, code
08:21 kisu joined perl6
08:24 trexy I'm going to start the process of converting the IDE-like thing into Perl6 and once it looks reasonable donate it to the cause!
08:25 TimToady cool!
08:26 trexy best wishes to you and the pugs team
08:26 trexy bye
08:26 TimToady thanks, good night.
08:27 TimToady zzz &
08:50 ssig33 joined perl6
08:56 fayland joined perl6
09:11 lyokato_ joined perl6
09:12 elmex joined perl6
09:19 buetow joined perl6
09:26 devogon joined perl6
09:31 ssig33 joined perl6
09:41 frankg joined perl6
10:01 andara joined perl6
10:19 chris2 joined perl6
10:35 ruoso joined perl6
11:04 nothingmuch joined perl6
11:17 pbuetow joined perl6
11:21 ssig33_ joined perl6
11:58 drbean joined perl6
12:13 xpika joined perl6
12:21 araujo joined perl6
12:24 araujo joined perl6
12:34 iblechbot joined perl6
12:35 xpika left perl6
12:50 mako132_ joined perl6
12:50 pbuetow joined perl6
13:12 jrockway so cross operators don't work yet?
13:13 jrockway ?eval (1..10) X+X (10..1)
13:13 evalbot_r14929 Error: ␤Unexpected "X"␤expecting operator
13:14 marmic joined perl6
13:15 amv joined perl6
13:20 dduncan left perl6
13:21 ruz joined perl6
14:04 iblechbot joined perl6
14:16 gnuvince joined perl6
14:48 chris2 joined perl6
14:58 nothingmuch audreyt: ping
14:58 audreyt pong
14:59 nothingmuch i was wondering how MO is working out in pugsland
14:59 audreyt I made dispatch work for Str.reverse
15:00 audreyt otherwise still in deep tuit debt to touch that code
15:00 nothingmuch ah
15:00 * nothingmuch will check back
15:00 nothingmuch how's life?
15:01 audreyt extremely saturated
15:01 audreyt doing, generally, this: http://xrl.us/tx6e
15:05 iblechbot_ joined perl6
15:10 * nothingmuch has been doing that too, to some extent
15:10 nothingmuch i am a naughty module author now
15:10 nothingmuch (i have some known bugs which I haven't fixed yet)
15:10 nothingmuch but i am getting a lot of hiking done ;-)
15:11 audreyt cool :)
15:11 nothingmuch freezing, in fact
15:11 nothingmuch twas -5 in the desert the night before last
15:11 * nothingmuch will upload pics in a sec
15:12 awwaiid joined perl6
15:12 nothingmuch hola brock
15:14 nothingmuch http://gallery.woobling.or​g/main.php?g2_itemId=4535
15:14 lambdabot Title: Hiking in the Desert
15:19 awwaiid joined perl6
15:19 jrockway nothingmuch: looks like it was a fun trip; very pretty
15:19 nothingmuch aye
15:19 jrockway nothingmuch: any HDR pictures on your site?
15:19 nothingmuch more photos from Henryk and Stan are pending
15:20 nothingmuch from the first 2 days
15:20 nothingmuch nope
15:20 * nothingmuch hasn't felt the need to take one since having learned that there is software for that
15:23 kolibrie what's up with the poles?  http://gallery.woobling.or​g/main.php?g2_itemId=4594
15:23 lambdabot Title: IMG_1954.jpg
15:25 awwaiid joined perl6
15:29 weinig|zZz is now known as weinig
15:37 kolibrie nothingmuch hikes up and skiis down?
15:38 nothingmuch kolibrie: sooon sooooooon
15:38 jrockway i think the premise behind the use of poles is so you can use your upper body to help you climb
15:38 * nothingmuch is buying a splitboard and going to california
15:38 jrockway or maybe nothingmuch just wants to look cool in pictures
15:38 nothingmuch but as for the desert hiking;
15:38 nothingmuch if you use the poles correctly (clkao++ for improving my technique)
15:38 nothingmuch then you can go faster
15:39 nothingmuch and also you get to save your knees on the down hill (my main concern)
15:39 * kolibrie normally carries children, rather than poles, which significantly slow hiking speed
15:39 nothingmuch and you can get up without needing to do weird balance tricks
15:39 nothingmuch (assuming a heavy backpack is making it difficult... c.f. the aforementioned picture)
15:40 kolibrie it is a cool picture
15:40 nothingmuch yeah, i don't look as ugly as always ;-)
15:40 * nothingmuch is trying to upload a large panorama
15:40 nothingmuch but gallery is being a pain
15:41 kolibrie nothingmuch: who is the girl in http://gallery.woobling.or​g/main.php?g2_itemId=4051
15:41 lambdabot Title: DSC_3222.jpg
15:41 nothingmuch neta
15:41 nothingmuch foaf
15:41 nothingmuch we were the only non drunks at that party
15:42 nothingmuch ;-)
15:42 kolibrie :)
15:42 nothingmuch well... partly
15:56 bonesss joined perl6
15:59 svnbot6 r14930 | andara++ | [runpugs]
15:59 svnbot6 r14930 | andara++ | -Now with preloaded pugs sessions for faster startup.
15:59 hexmode joined perl6
16:01 nothingmuch_ joined perl6
16:03 pasteling "kolibrie" at 66.239.158.2 pasted "how to I push values onto an array in regex" (40 lines, 1K) at http://sial.org/pbot/21891
16:04 kolibrie s/to/do/
16:11 nipra joined perl6
16:11 nothingmuch_ http://gallery.woobling.org/v/Family/al​bum05/nothingmuch/desert/pano.jpg.html
16:11 nothingmuch_ wow, that was difficult =(
16:12 kolibrie that's a pretty nice picture
16:13 andara yes, very nice!
16:13 lambdabot Title: pano, http://tinyurl.com/api-create.php?url=h​ttp://gallery.woobling.org/v/Family/alb​um05/nothingmuch/desert/pano.jpg.html"></HEAD><BODY>
16:14 andara nothingmuch_: where do the shadowy figures come from?
16:16 nothingmuch_ the panorama blending
16:16 nothingmuch_ they are those two people
16:17 nothingmuch_ and Steffi is the one ont he right... she is also slightly transparent
16:17 nothingmuch_ she was the oone who stayed with me for the whole 4 days
16:25 buetow joined perl6
16:27 weinig is now known as weinig|bbl
16:28 kanru joined perl6
16:36 frederico joined perl6
16:41 buetow joined perl6
16:43 fglock joined perl6
16:44 fglock hi
16:45 kolibrie fglock: hi
16:45 kolibrie fglock: I have a question - I'll paste it in a minute
16:45 fglock ok
16:46 fglock I've been busy with a workflow app, I'm more or less back on schedule now
16:46 fglock I've got mp6-mo started, but it still looks very unclean
16:46 * kolibrie is using PCR/v6.pm for $work
16:47 fglock oh, nice!
16:50 pasteling "kolibrie" at 66.239.158.2 pasted "how do I read from this array returned from a regex?" (47 lines, 1.2K) at http://sial.org/pbot/21892
16:52 bcorn joined perl6
16:57 orafu joined perl6
16:57 andara left perl6
17:01 fglock kolibrie: the regex is not returning an array for me
17:02 kolibrie hmm
17:03 pasteling "kolibrie" at 66.239.158.2 pasted "fglock: my output" (15 lines, 356B) at http://sial.org/pbot/21893
17:04 fglock same here - did you try to print $match.perl (trying here)
17:06 fglock it looks like the captures are nested (not in the return object)
17:06 bcorn joined perl6
17:07 kolibrie it looks like the array should be available as @$match and @($match<numbers>)
17:07 kolibrie I think
17:08 fglock kolibrie: you probably need to use return blocks
17:08 fglock see the output of $match.perl
17:08 kolibrie I am using return blocks
17:09 fglock you are not returning the recursive result of <numbers>
17:10 fglock from inside <numbers>
17:10 kolibrie { return [ $$<number>, @( $$<numbers> ) ] }
17:10 fglock something like that
17:10 kolibrie that's in there
17:12 kolibrie uggh, my wrap was off, so the paste is incomplete
17:12 fglock ah, ok
17:13 pasteling "kolibrie" at 66.239.158.2 pasted "trying to read array returned from regex" (49 lines, 1.3K) at http://sial.org/pbot/21894
17:18 fglock this works: for @$$match -> $object { say $object };
17:18 * kolibrie tries
17:18 fglock not sure if it's a bug
17:19 kolibrie ok, that works here, too
17:22 kolibrie fglock: what if I want to return the whole submatch object, not just the string value?
17:22 kolibrie return [ $<number> ] does not seem to work
17:23 kolibrie return [ $$/ ] maybe?
17:23 kolibrie no, probably not...
17:24 fglock do you mean $$<number> ?
17:24 fglock for the object returned by the subcapture
17:25 kolibrie right now the array returned from the subcapture is ['one', 'two', ...]
17:25 kolibrie what if I want it it be [$submatch1, $submatch2, ...]
17:26 kolibrie for @$$match -> $object { say $object<name> };
17:26 kolibrie or <number> or whatever it is
17:27 fglock you are using 'return [ $$<number> ]' - try 'return [ $<number> ]'
17:28 fglock but $$<numbers> is ok
17:29 kolibrie ah, yep, that works
17:29 kolibrie I was switching $$<numbers> too
17:29 kolibrie but that makes sense to leave it $$<numbers>, I think
17:30 fglock $$<numbers> is the array under construction
17:30 fglock while $<number> is the new item
17:30 kolibrie right
17:31 * kolibrie is trying to keep everything straight in his brain
17:34 fglock I wonder if using method names would help, like '$<numbers>.thing' instead of '$$<numbers>'
17:36 kolibrie do you have an example?  (I'm intregued, but lost)
17:39 fglock no, I'm just thinking if it would help if you could have an alternate, more verbose syntax
17:40 fglock that would be more readable, maybe
17:40 kolibrie well, really, the whole perl 6 regex syntax is the alternate.  I'm just getting used to it
17:41 kolibrie plus, I'm trying to make a base grammar to hold all the tricky stuff, and have subclasses of that grammar that other people can write and maintain
17:45 justatheory joined perl6
18:21 diotalevi joined perl6
18:28 bcorn_ joined perl6
18:32 mr_ank joined perl6
18:33 fglock joined perl6
18:41 kolibrie when I do this in a 'for' loop, I can see the values, but I can't seem to get the values into an array
18:41 kolibrie for @$$match -> $object { say $object<name> }; # works
18:41 kolibrie my @list = map { $_<name> }, @$$match; for @list -> $name { say "name: " ~ $name }; # prints name: ARRAY(0x8c47038)
18:43 avar ?eval 1
18:43 evalbot_r14930 1
18:43 avar kolibrie: use evalbot
18:47 fglock kolibrie: not sure if map works properly, I think there was some Data::Bind or arrayref related bug
18:47 fglock in v6.pm
18:47 kolibrie fglock: any other ways to get the data in an array?
18:47 kolibrie avar: works properly in pugs
18:48 rindolf joined perl6
18:48 rindolf Hi all.
18:49 rindolf I have a question about perl6: if every block is a closure, how come it gets executed?
18:49 fglock kolibrie: lib/Pugs/Grammar/Rule2.pm still uses 'use v5; map ...'
18:50 rindolf Hi fglock
18:50 kolibrie fglock: hmm.  well, at least there's a workaround
18:50 integral there's a rule covering that case , rindolf
18:50 rindolf fglock: happy Hanukkah/xmas.
18:50 fglock rindolf: it just executes immediately
18:50 fglock rindolf: hag sameach
18:50 rindolf fglock: todah.
18:51 rindolf fglock: but sub { ... } in Perl 5 doesn't execute immediately.
18:51 rindolf eval: print "5"; sub { print "6"; } ; print "7"
18:51 buubot rindolf: 5 7  1
18:51 fglock it does not execute immediately in p6, either
18:52 fglock only bare blocks
18:52 rindolf fglock: ah.
18:57 kolibrie fglock: this seems to work: my @list; for @$$match -> $object { push @list, $object<name> };
18:58 kolibrie it just takes more lines
19:05 nothingmuch_ is now known as nothingmuch
19:07 penk joined perl6
19:09 ofer0 eval: print 5; sub { print 6 }->(); print 7
19:09 buubot ofer0: 5 6 7  1
19:09 ofer0 just wanted to make sure
19:13 gnuvince ?eval sub foo { return "x" }()
19:13 evalbot_r14930 ()
19:13 gnuvince ?eval sub { return "x" }()
19:13 evalbot_r14930 "x"
19:20 Aankhen`` joined perl6
19:33 kolibrie yay!  now my grammar is behaving!
19:34 kolibrie fglock: thank you very much for all your help today
19:34 kolibrie (and in the past, too)
19:39 fglock np
19:41 justatheory joined perl6
19:45 ozo joined perl6
19:50 DebolazX YAML::RPC would be nice.
20:19 nipra joined perl6
20:25 Ovid joined perl6
20:26 thepler joined perl6
20:30 Ovid How do I count how many keys are in an array without using a temporary array?  Various permutations of one liners keep giving me "Cannot cast from vlist"
20:30 lambdabot Ovid: You have 1 new message. '/msg lambdabot @messages' to read it.
20:30 Ovid is %unique.keys.elems, 6, '... and they should all be unique numbers';
20:34 TimToady ?eval my %foo = (a => 1, b => 2, c => 3); say +%foo
20:34 evalbot_r14930 OUTPUT[3␤] Bool::True
20:37 Ovid ?eval my %unique = map { $_ => 1 }, 1.. 6; %unique.perl.say;
20:37 evalbot_r14930 Error: Cannot cast from VList [VInt 1,VInt 2,VInt 3,VInt 4,VInt 5,VInt 6] to Pugs.AST.Internals.VCode (VCode)
20:39 Ovid I think I'm misunderstanding something.
20:40 TimToady ?eval my %unique = map { return $_ => 1 }, 1 .. 6; %unique.perl.say
20:41 evalbot_r14930 Error: Cannot cast from VUndef to Pugs.AST.Internals.VCode (VCode)
20:41 araujo_ joined perl6
20:42 TimToady ?eval my %unique = map sub { return $_ => 1 }, 1 .. 6; %unique.perl.say
20:42 evalbot_r14930 OUTPUT[{("1" => 1), ("2" => 1), ("3" => 1), ("4" => 1), ("5" => 1), ("6" => 1)}␤] Bool::True
20:42 TimToady seems to be overzealously turning {...} into hash composer
20:43 araujo joined perl6
20:44 Ovid Ah, I see.  Time to add a test.  Should known failing tests kill a *.t program?  I don't know what's intended there.
20:44 allbery_b use eval?
20:45 Ovid I've seen eval used for things which are not implemented yet (though I haven't gone through the test suite too thoroughly), but adding tons of evals everywhere sounds like something which would be a pain to remove later on when it's the real Perl 6 test suite.
20:47 TimToady they don't really need to be removed, esp since other implementations may need them later
20:47 Ovid OK.  Thanks.
20:48 TimToady on the other hand, until we're getting close to another release, it doesn't really matter much if the whole .t blows
20:48 gaal I doubt other implementations will share pugs' bug battlin' biography :)
20:48 gaal (hello1)
20:48 gaal heh, s/1/!/
20:48 Ovid On another note, I've converted the "99 Problems" into separate test files.  Are they OK to commit?  If so, examples or (likely repetitive) .t programs?
20:49 gaal sure, commit
20:49 gaal hmm, I'd say examples/
20:50 TimToady examples will autotest at least the compilation of them.
20:50 Ovid OK
20:53 TimToady but if they're already TAP format, put 'em into t/
20:54 TimToady that is t/examples/
20:55 TimToady or maybe t/general, since t/examples is about testing examples/
20:56 TimToady or put 'em in examples with something special in t/examples to run 'em.
20:57 Ovid Hmm, I could put them in t/examples/99problems/.  How does that sound?  They are proper tests:
20:57 Ovid use v6-alpha;
20:57 Ovid use Test;
20:57 Ovid plan 1;
20:57 Ovid # P01 (*) Find the last box of a list.
20:57 Ovid #  
20:57 Ovid # Example:
20:57 Ovid # * (my-last '(a b c d))
20:57 Ovid # (D)
20:57 Ovid is <a b c d>.[-1], 'd', 'Find the last box of a list.';
20:57 Ovid (I shoulda used nopaste)
20:59 * dmq waves hello
20:59 * Ovid waves back.
21:05 TimToady t/e/99 sounds fine
21:07 TimToady probably want to include a link to the original 99, so people can figure out what "box" means.
21:09 TimToady but with your own dir you can put a README easily enough
21:11 Ovid I put a README in there and just committed.  Hopefully people will try to solve some of them.
21:11 svnbot6 r14931 | Ovid++ | Added the "99 Problems".  Currently I've only "solved" the first 24.  See the
21:11 svnbot6 r14931 | Ovid++ | README for more information.
21:17 Odin- joined perl6
21:22 wamiks joined perl6
21:39 jrockway Ovid: i replied to your email to perl6-users, but it appears to have been lost
21:39 jrockway basically the issue is, what does say(1&2&3) really mean?
21:39 jrockway say 1, then say 2, then say 3?
21:39 jrockway or say "1&2&3"
21:41 Ovid No, I got the email.  However, I'm still concerned about the original function which took a junction as an argument, didn't use it, returned a scalar which should have been evaluated in a numeric context ($count++) and yet still appeared to return a junction.
21:43 TimToady you didn't read my lambdabot message
21:43 TimToady please see S09:543
21:44 TimToady you're not allowed to pass a junction to a routine that isn't expecting it.
21:45 TimToady instead, such routines are autothreaded.
21:47 Ovid Where's S09:543?  I've been looking in http://perlcabal.org/syn/S09.html#Junctions
21:47 lambdabot Title: S09
21:47 Ovid Is that the wrong spot?
21:47 Ovid (I know you've sent the link before and my apologies if I've forgotten)
21:47 TimToady that's the right spot: In any scalar context not expecting a junction of
21:47 TimToady values, a junction produces automatic parallelization of the algorithm.
21:48 TimToady Str is not a Junction
21:48 Ovid OK. Thanks. I'll catch on sooner or later.
21:49 TimToady otherwise we'll have all sorts of routines getting surprised by values that are simultaneously true and false.
21:53 scw joined perl6
21:59 Ovid Is the following a legal syntax legal?  http://rafb.net/paste/results/YNsbbg66.html
21:59 buubot The paste YNsbbg66 has been copied to http://erxz.com/pb/669
22:00 Ovid Hmm, I typed the sentence, went and pasted the code and then finished typing the sentence.  I shouldn't do that.
22:01 TimToady s/subtype/subset/
22:02 TimToady but why not just use UInt?
22:03 TimToady Quibble: I think most people would consider 0 to be neither Positive nor Negative.
22:03 Ovid Does an unsigned integer include 0?
22:04 Ovid (I don't know C terribly well)
22:04 TimToady and you probably want to return List rather than Array
22:04 TimToady certainly
22:04 Ovid OK.  Thanks.
22:05 Ovid So the Positive::Int works better for that.
22:05 TimToady but you defined it to include 0 too
22:05 Ovid Oops.
22:17 Ovid http://www.oreillynet.com/onlamp/blo​g/2006/12/99_problems_in_perl_6.html
22:17 lambdabot Title: 99 Problems in Perl 6 - O&#039;Reilly ONLamp Blog, http://tinyurl.com/w763k
22:17 Ovid Feel free to post any corrections.
22:20 TimToady looks good
22:22 dduncan joined perl6
22:22 * Ovid sports a miniskirt and pom-poms online.
22:22 dduncan is there a picture?
22:23 weinig|bbl is now known as weinig
22:23 Ovid http://www.oreillynet.com/onlamp/blo​g/2006/12/99_problems_in_perl_6.html
22:23 lambdabot Title: 99 Problems in Perl 6 - O&#039;Reilly ONLamp Blog, http://tinyurl.com/w763k
22:23 stevan_ Perl 6 has only 99 problems !
22:23 stevan_ we are almost finished then !!!
22:23 stevan_ :P
22:24 Ovid Actually, my "secret Santa" gift at work was purple wings, a purple feather boa, a wand with a star on top and a pink thong.  At least one coworker has a picture.
22:24 Ovid (I was wearing clothes underneath all of that, though)
22:26 Ovid I'm just amazed at how verbose all of the non-Perl solutions were.  Either the online solutions I found were poorly written or Perl 6 has done a great job at solving many common programming problems.
22:26 dduncan speaking of problems remaining, check this out: http://joyoftech.com/joyof​tech/joyarchives/903.html
22:26 lambdabot Title: The Joy of Tech comic... laughter is the best tech support.
22:27 stevan_ Ovid: well the perl 6 version uses Juntions,.. which the other languages dont have
22:27 Ovid Oops.  There was a bug in the Prolog solution.  It's fixed now.
22:27 stevan_ I would be interested to see a non-Junction verison and how it compares
22:27 jrockway ?eval say (1|2)
22:27 evalbot_r14931 OUTPUT[any(VInt 1,VInt 2)␤] Bool::True
22:28 jrockway that shouldn't randomly select between "say 1" or "say 2"?
22:29 Ovid Hmm, the Lisp version had the same problem.  Just fixed that, too.
22:29 TimToady ?eval say (1|2).pick
22:29 evalbot_r14931 OUTPUT[2␤] Bool::True
22:30 Ovid stevan:  my Perl 6 version used a junction?  Does .pick use that under the hood or something?
22:31 jrockway TimToady: i see.  that looks like what's been going back and forth in here over the last few days
22:31 stevan_ Ovid: IIRC, pick is related to Junctions,.. but hmm... maybe not
22:31 * jrockway is slowly starting to understand a language that only partially exists :)
22:31 stevan_ is now known as stevan
22:31 * TimToady likewise
22:32 jrockway with the usual choices in langauges, you can type something in to see if it's right or not.  with perl6, you have to decide whether you're right or pugs is right :)
22:32 jrockway fun
22:33 TimToady it is, hopefully, a convergent process
22:33 stevan Ovid: according to S29, it is a "method" of Lists/Arrays
22:34 TimToady it also happens to coerce a junction to a list
22:34 stevan ah,..thats where I was confused then :)
22:34 TimToady hmm.
22:35 TimToady ?eval any(1..5).pick(*)
22:35 evalbot_r14931 Error: pick not defined: VJunc any(VInt 1,VInt 2,VInt 3,VInt 4,VInt 5)
22:35 TimToady ?eval (1..5).pick(*)
22:35 evalbot_r14931 (1, 2, 5, 3, 4)
22:35 gnuvince joined perl6
22:35 TimToady looks like luqui only made pick(*) work for lists/arrays, not junctions.
22:36 TimToady ?eval (1..5).values
22:36 evalbot_r14931 (1, 2, 3, 4, 5)
22:36 TimToady ?eval any(1..5).values
22:36 evalbot_r14931 (1, 2, 3, 4, 5)
22:36 Ovid The current implementation doesn't scale well, either.
22:36 TreyHarris hey, does anyone know somewhere i can see the complete list of funny symbols the Mac uses to represent the functional keys on the keyboard?  cloverleaf and caret and that funny microswitch symbol for option i've got down, but some of the odder ones confuse me. googling for "mac keyboard symbols" and other such keywords is decidedly unhelpful so far
22:36 Ovid ?eval (1 .. 10000).pick(9999).perl.say
22:36 evalbot_r14931 pugs: out of memory (requested 1048576 bytes)
22:36 TimToady heh
22:37 Ovid I think a better strategy would be to shuffle the list and take the first $count elements, but I don't know how to write the Haskell :(
22:37 lumi TreyHarris: http://macbiblioblog.blogspot.com​/2005/05/special-key-symbols.html looks useful
22:37 lambdabot Title: The Macintosh Biblioblog: Special Key Symbols, http://tinyurl.com/y8cev2
22:38 TimToady when I say "uni clover" I don't find anything, so if it's in Unicode it's got a different name.
22:39 lumi "PLACE OF INTEREST SIGN"?
22:39 TimToady PLACE OF INTEREST SIGN
22:40 TreyHarris TimToady: it's the place of inte.... yes, beat me to the punch
22:41 TimToady lumi beat us both, by a couple microseconds...
22:43 TreyHarris none of the pages i've found say what the symbol in this image is:  http://ibiblio.org/harris/whats-this-symbol.png
22:43 TimToady hmm, whether you want to presort the shuffle depends on how many you want
22:43 TreyHarris next to the bottom... "Show sticky desktop overlay pager".  option-something, but what?
22:43 jrockway Ovid: what about something like f x = [y | y <- x, y < rand xmax ]
22:43 lumi TreyHarris: Tab
22:43 TreyHarris lumi: hah, so it is
22:44 TreyHarris thanks :)
22:44 jrockway actually, not what i meant...
22:44 jrockway back to thinking before i type :/
22:44 Ovid jrockway:  does that guarantee unique elements?
22:44 TimToady ⌥
22:44 TimToady option (alt, alternative)
22:44 TimToady U+2325
22:44 TimToady according to the other page.
22:44 jrockway Ovid: it does, but it doesn't do anything useful
22:44 jrockway it gives you "a few" elements
22:45 Ovid Er, is that Haskell, I assume?
22:46 jrockway yeah. perl5 equiv: @few = grep { $_ < rand } @many
22:47 TimToady assign a random num to each element, then find lowest N, then sort those in order of randoms, unless N is big, in which case better to sort first.
22:47 Ovid I don't know Haskell, I fear. (and Lisp and Prolog are languages I only know a few "words" in)
22:48 jrockway the way to not not know haskell is to learn it
22:48 jrockway i'm enjoying it so far
22:48 TimToady as a limiting case, it'd be stupid to sort them all for .pick(1)
22:48 jrockway however i still don't understand darcs or pugs
22:48 jrockway TimToady: it would be nice to not sort at all
22:48 TimToady how do you randomize them?
22:48 Ovid TimToady, what about the unlikely event that two random numbers are the same?  You still have to test for uniqueness.
22:48 jrockway i.e. pick 3 == @list[rand @list, rand @list, rand @list]
22:49 TimToady no, that's with replacement
22:49 jrockway Ovid: if you use an unstable sort then you can let the other random numbers randomize the ordering of "same" elements
22:49 TimToady pick is without replacement
22:49 Ovid Ah.  OK.
22:50 TimToady however, for a small N @list[rand @list] and throw back dups is pretty fast.
22:50 TimToady very fast for N==1
22:50 TimToady since by definition there's no dups
22:51 TimToady but that would be really slow for .pick(*)
22:51 TimToady though not as slow as the World's Slowest Sort Algorithm.
22:52 Ovid I would think that .pick(*) would be an edge case.  Shuffle and return.
22:52 jrockway it would be O(N) right
22:52 TimToady somewhere in the middle there's a breakeven, or a 3rd algorithm.
22:53 Ovid Incidentally, pursuant to http://use.perl.org/~Ovid/journal/31970, it would be wonderful to have a special syntax saying "all subroutine arguments are 'is copy'"
22:53 lambdabot Title: Journal of Ovid (2709)
22:53 TimToady get close to the right number with one probabalistic pass, then add or subtract a few to make it exact.
22:54 jrockway that idea i like
22:54 Ovid I wouldn't always use it, but Aristotle made an interesting point about most Perl programmers defaulting to copies instead of aliases.
22:54 jrockway Ovid: probably not by conscious choice
22:54 jrockway i.e my $foo = shift; my $bar = shift;
22:55 jrockway they make copies beacuse it's easier to refer to "foo" than "$_[0]"
22:55 TimToady "autocopy if body contains mutator, ref otherwise"?
22:55 Ovid jrockway, that's likely true, and I certainly wouldn't want to force "is copy" on everyone, but the more I work through the 99 problems, the more I find it an annoyance.
22:55 jrockway that's fair
22:56 Ovid TimToady:  I like that idea, though I wonder how it would play out in practice?  I can't think of how it would hurt since arguments are read-only by default, but since we change the meaning of arguments by the code following them, I wonder what "action at a distance" side-effects might crop up.
22:57 TimToady esp with eval ""
22:57 TimToady but you have to detect readonly violations anyway
22:57 TimToady so maybe it can be sidetracked into autocopying instead.
22:58 TimToady really, we're probably discussing COW proxies here.
22:58 Ovid On the other hand, since "copy if mutator" would be such an extremely handy default, I wonder which would cause less grief? :)
22:58 jrockway what would be wrong with good-old-copy-on-write
22:59 Ovid The Dutch call this "harm reduction".
22:59 jrockway it makes reads quick, and writes sane
22:59 Ovid This is Perl 6 on drugs (sorry if that's too obscure)
22:59 jrockway although there's the possibility that you want to modify the arguments
22:59 Ovid You could force it with "is alias"
22:59 jrockway reducing harm is always good
22:59 TimToady that's what "is rw" means
22:59 Ovid Oh, duh/
23:01 TimToady I wonder what percentage of real subs will want to modifiy their args...
23:02 Ovid I'm not sure.  All I know is that I kept hitting that with "99 Problems", but perhaps those aren't terribly representative.  Perhaps this is a minicpan/ppi problem?
23:02 jnthn A related-ish question: do lower-cased types like int, num and so on automatically get is copy semantics since they aren't reference types.
23:02 Tene add a popup box whenever you use a sub to ask "do you want alias or copy?"
23:02 pasteling "stevan" at 71.234.68.135 pasted "Lotto function in OCaml" (14 lines, 475B) at http://sial.org/pbot/21906
23:02 jnthn s/./?
23:03 TimToady the nice thing about defaulting to readonly is that you don't have to commit to autoboxing int and num.
23:04 jnthn You could commit to not autoboxing them, but I guess other lowercase types like str are really references under the hood so it all kinda breaks down a bit...
23:04 Ovid I guess that's one question that minicpan/ppi can't answer.
23:04 jrockway i think subs that modify their arguments are not the usual case
23:04 jrockway the only Real Module i've ever used that does that is BerkeleyDB
23:04 jrockway and it's an insane module
23:04 jrockway success == 0, failure == !0
23:05 jrockway so you write $db->get_something($key, $value) and die "failed!"
23:05 Ovid stevan:  post your OCaml as a response to the ORA post.
23:05 Ovid (please?)
23:05 jrockway (and you get the value of key inside $value)
23:05 TimToady well, it's only insane because they flipped from interesting values of success to interesting values of failure without preserving interesting values of success.  :)
23:06 jrockway it would be nice if they just threw the exception for me :)
23:06 TimToady exceptions are by definition too interesting.
23:06 stevan Ovid: posted
23:06 Ovid The only thing I *like* which modifies it's arguments is trim().  chomp() is another common example, but I don't care for that syntax (oh, and open() alters its arguments, but that syntax is changing anyway)
23:06 TimToady well, when I said "modifies it arguments" I was really referring to "is copy"
23:06 jrockway Ovid: i have always hated the chomp-modification thing
23:07 Ovid jrockway:  careful!  Exceptions should be used very, very sparingly.
23:07 jrockway Ovid: like for... exceptional... cases?
23:07 TimToady Perl 6 has lazy exceptions.
23:07 Ovid Well, if we have COW for arguments, exceptions aren't needed.  Or is that now what you meant?
23:08 Psyche^ joined perl6
23:08 Ovid Exceptions should be used in such a way that you can remove all of them from your program and the program still runs if nothing goes wrong.
23:08 TimToady COW doesn't have much to do with exceptions.
23:08 jrockway Ovid: yes
23:08 svnbot6 r14932 | book++ | typos
23:08 Ovid Agreed, but I thought jrockway meant throw an exception if one tried to modify an aliased argument.  Did I misunderstand?
23:09 jrockway yes
23:09 jrockway i was complaining about the berkeleydb interface :)
23:09 jrockway offtopic, sorry :(
23:09 Ovid Oh.
23:09 TimToady I'd rather catch the error at compile time.
23:09 autark joined perl6
23:09 TimToady the problem with defaulting to COW is that the code will assume you want "is copy" rather than "is rw".
23:09 TimToady it will just silently fail to backpropagate
23:10 TimToady so I still think readonly is the sanest default.
23:10 TimToady perhaps "is copy" needs huffmanizing.
23:10 Ovid Thanks book!
23:10 jrockway i'm thinking of this case: sub foo ($arg) { say $arg; $arg = 3; say $arg; }
23:10 jrockway i.e. reusing the variable
23:11 TimToady technically illegal right now.
23:11 jrockway not really good code, but people do it
23:11 jrockway fine
23:11 Ovid huffmanizing++
23:12 jrockway better example is sub foo ($arg) { say $arg++ while($arg < 100) }
23:12 jrockway i don't see a reason to prohibit that, but it could be made illegal by default
23:12 TimToady which it is
23:12 Ovid Yeah, I see that sort of stuff all the time (I probably write it, too)
23:13 jrockway yeah, it's not the worst piece of code ever written
23:13 Ovid My rotten programming is all between us, right? :)
23:13 TimToady .say for $arg .. ^100
23:13 jrockway Ovid: i'm going to go to the bookstore and insert a copy of this transcript in your book :)
23:14 Ovid chromatic's book!  O'Reilly offered me a space on the cover and I wasn't so stupid as to say 'no'
23:14 jrockway so there are three cases: pass an arg and never modify it (ro), pass an arg and modify it, but don't change it outside the lexical scope (my $foo = shift), and then $_[xx]-style aliasing
23:15 jrockway the middle case can be eliminiated by rethinking your code, of course
23:15 Ovid (Damian also deserved a place there on the cover.  My stuff was just random tidbits, but enough to get me noticed)
23:16 jrockway ?eval sub foo($arg){ $arg++ }; foo(10);
23:16 evalbot_r14932 Error: Can't modify constant item: VInt 10
23:16 jrockway i'm liking the current behavior
23:16 jrockway optimizes for speed, since no copy is ever necessary
23:17 TimToady ?eval my $x = 42; sub foo($arg){ $arg++ }; foo($x); say $x
23:17 evalbot_r14932 Error: Can't modify constant item: VRef <Scalar:0xb68d5dcc>
23:17 jrockway ah, yes
23:17 TimToady jrockway: that was the idea
23:18 Ovid I can understand a universal optimization.  I'd still like the huffmanization of "is copy" since I keep hitting it.
23:18 TimToady let me sleep on it during the incipient nap attack...
23:18 jrockway sub (+$arg) { ... }
23:19 jrockway i also need a nap :)
23:19 jrockway Ovid: could you nopaste a place where you want an "is copy"
23:19 Ovid jrockway: that looks clean, but I can't say if it's good or bad since I don't have enough P6 knowledge.
23:19 jrockway "is copy" confuses me because i have narrowed things down in my mind to "is rw" and "is ro"
23:19 jrockway is ro is the default, and is rw is an alias... right?
23:20 jrockway hence the beautiful php syntax foo (&$bar) would make $bar an alias
23:20 TimToady rw requires an lvalue. ref merely requires an object that might fail at run-time.
23:20 Ovid Sure, but first:  ack 'is copy' t/examples/99problems/
23:21 jrockway ack?
23:21 TimToady a recursive grep
23:21 jrockway got it
23:21 Ovid See App::Ack on the cpan.
23:21 jrockway "look for all instances of 'is copy' in my examples"
23:21 jrockway yeah, i use ack
23:22 jrockway however i don't verb it :)
23:22 Ovid is copy: http://rafb.net/paste/results/IkBy6f44.html
23:22 buubot The paste IkBy6f44 has been copied to http://erxz.com/pb/670
23:22 TimToady how many of those would go away with a truly functional solution?
23:22 jrockway ie perl6 a purely functional language?
23:22 TimToady no, but "is copy" would encourage people in that direction.
23:22 TimToady :P
23:23 Ovid TimToady:  I'd like to see counter-examples -- you have commit rights, yes? :) -- but I suspect most people don't think that way.
23:23 TimToady well, my nested gathers was already one such.
23:24 Ovid It was elegant.  It was also longer code.  I often find that gather/take is easier to read for beginners, but is longer code (hmm, that sounded a bit odd)
23:24 Psyche^ is now known as Patterner
23:24 TimToady mostly only because gather still requires a block
23:24 TimToady and take doesn't work en passant yet.
23:25 weinig is now known as weinig|away
23:25 weinig|away is now known as weinig
23:25 Ovid I think the fact that it's not a loop should be the biggest win (IMHO)
23:27 Ovid Actually, going back and reading things, your longer gather/take example is much easier to read than my example, though Aristotle (aka, edge_walker), shows an "easier to read" map in this thread:  http://publius-ovidius.livej​ournal.com/219738.html?nc=12
23:27 lambdabot Title: publius_ovidius: Pleasant pre-Christmas Evenings
23:28 TimToady sub group4 ($a) {
23:28 TimToady    gather while @$a {
23:28 TimToady        take [
23:28 TimToady            gather loop (my $h = $a[0]; @$a and $h eq $a[0]; take shift $a) {}
23:28 TimToady        ]
23:28 TimToady    }
23:28 Ovid Or I guess that "easier to read" is purely subjective.
23:28 TimToady }
23:28 TimToady hmm, that supposed to be |$a
23:29 TimToady since you can shift the capture to get its values.
23:29 Ovid OK, it's late here and I have to hit the hay.  Talk to everyone later.
23:29 TimToady night
23:30 TimToady zzz &
23:31 larsen_ joined perl6
23:32 weinig is now known as weinig|away

| Channels | #perl6 index | Today | | Search | Google Search | Plain-Text | summary

Perl 6 | Reference Documentation | Rakudo