Perl 6 - the future is here, just unevenly distributed

IRC log for #perl6, 2010-01-13

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:02 payload joined #perl6
00:05 arthur-_ joined #perl6
00:10 hercynium joined #perl6
00:25 diakopter an article.  http://terrychay.com/articl​e/1500-lines-of-code.shtml
00:35 Juerd 1500 lines of code a day. I don't think I've ever wrote that much in a single day :)
00:36 diakopter the only language in which I've ever done that was JavaScript.  But there was a decent amount of copy-and-paste code "reuse". :)
00:37 s1n pmichaud: don't forget, dallas.p6m
00:37 diakopter and only once.  back when my brain worked.
00:37 s1n it's easy to churn out well over 1500 a day in c++ :)
00:37 Juerd You copy-paste-reused even though your brain was fully functional at the time? :)
00:39 diakopter it wasn't fully functional, just barely working. That's my story and I'm sticking to it.
00:39 Juerd :)
00:40 diakopter decommuting&
00:41 s1n that is _one_long_post_
00:46 blubblub joined #perl6
00:48 ash_ counting the lines of code you right a day doesn't seem like the most productive use of your time
00:49 ash_ espcially considering how much or how little you can put on 1 line
00:51 cotto_work you could try to count tokens
00:53 ash_ it still doesn't prevent you from inflating the statistic though
00:54 ash_ i could say my $a = 5; or i could say my $a = 1; $a = $a + 1; $a = $a + 1; $a = $a + 1; $a = $a + 1;
00:54 cotto_work It's a slightly less naive way of solving the wrong problem.
00:54 sjohnson i count all the cool stuff i do in one day with perl
01:01 blubblub left #perl6
01:10 punkish joined #perl6
01:10 simcop2387 joined #perl6
01:10 frew pmichaud: we need you!
01:11 punkish hi all... a n00b question. Is it really necessary to have perl Configure.pl --gen-parrot use https with svn to download the code? My small desire to try out Perl 6 on my Macbook is turning into a long exercise in installing SVN with SSL
01:13 ashizawa joined #perl6
01:21 ashizawa joined #perl6
01:31 agentzh joined #perl6
01:51 Meldrake joined #perl6
01:57 Exodist joined #perl6
01:58 punkish joined #perl6
02:19 orafu joined #perl6
02:30 arthur-_ joined #perl6
02:33 drbean joined #perl6
02:38 nihiliad joined #perl6
02:40 JimmyZ joined #perl6
03:20 cognominal joined #perl6
03:20 cognominal rakudo:   my $o = 'hello'; say substr $o, 1, 1, 'i'
03:21 p6eval rakudo 3867ff: too many positional arguments: 4 passed, 4 expected␤in Main (file <unknown>, line <unknown>)␤
03:21 cognominal ng:  my $o = 'hello'; substr $o, 1, 1, 'i'
03:21 p6eval ng 93d662: No applicable candidates found to dispatch to for 'substr'␤current instr.: '_block14' pc 29 (EVAL_1:0)␤
03:29 galf joined #perl6
03:33 cxreg joined #perl6
03:37 Baggiokwok joined #perl6
03:40 sjohnson rakudo:   my $o = 'hello'; say $o.substr(1, 1, 'i')
03:40 p6eval rakudo 3867ff: too many positional arguments: 4 passed, 4 expected␤in Main (file <unknown>, line <unknown>)␤
03:40 cj ooh, composition key lets me do « and » easily!
03:41 cj why didn't you people tell me about this before? :)
03:41 cj ¡¿por que?!
03:53 skeptical_p joined #perl6
04:14 nihiliad joined #perl6
04:17 PZt joined #perl6
04:53 pinc0de joined #perl6
05:25 synth joined #perl6
05:33 Snider joined #perl6
05:37 we joined #perl6
05:38 we left #perl6
05:48 meteorjay joined #perl6
05:57 Chillance joined #perl6
06:09 saschi moin
06:34 JimmyZ joined #perl6
07:22 kaare joined #perl6
07:26 mikehh joined #perl6
07:29 akl_ joined #perl6
07:30 LionMade1fLions joined #perl6
07:31 Su-Shee joined #perl6
07:32 Su-Shee good morning
07:37 saschi huhu
07:41 hicx174_ joined #perl6
07:41 galf joined #perl6
07:54 kangu joined #perl6
07:55 kangu left #perl6
07:55 iblechbot joined #perl6
08:15 mberends joined #perl6
08:32 Baggiokwok joined #perl6
08:35 ihrd joined #perl6
08:35 ihrd left #perl6
08:42 mikehh_ joined #perl6
08:46 hicx174 joined #perl6
09:01 pugs_svn joined #perl6
09:01 mssm joined #perl6
09:29 dakkar joined #perl6
09:34 dalek joined #perl6
09:43 jonasbn joined #perl6
09:44 Juerd joined #perl6
09:45 jonasbn joined #perl6
09:46 jnthn joined #perl6
09:47 Juerd feather1 was out of memory beyond repair :(
09:47 Juerd Does anyone know what caused this?
09:48 * Juerd had to reboot the VM
09:48 dduncan left #perl6
10:00 buubot joined #perl6
10:25 meneldor joined #perl6
10:28 mberends svn up pugs also timed out, now it works again :)
10:31 Juerd It's something with apache.
10:32 Juerd I've done a "killall -9 apache2" because I don't have time to investigate the problem now.
10:32 Juerd Load was up to 44 again.
10:32 Juerd If someone has time on their hands and wants to investigate, please do so (request sudo access if necessary)
10:36 mberends sorry, I'd like to, but $work is pretty full time this week :(
10:44 frettled Juerd: what kind of system is it, Debian, Ubuntu, ...?
10:47 soupdragon joined #perl6
10:47 Juerd frettled: Debian
10:48 frettled Juerd: In that case, I can at least have a look, I administer one or twenty Debian systems. :)
10:48 Juerd Do you have access to feather?
10:48 frettled nopes
10:48 frettled I can give you an SSH public key if that helps.
10:49 Juerd Yes please
10:50 am0c joined #perl6
10:59 somebody_ joined #perl6
11:00 soupdragon joined #perl6
11:09 frettled Okay, I think I see one possible cause for the problem.  Of the last 100k lines in the access log, a Google crawler has over 18% of the hits.
11:09 frettled So my guess is that a too eager indexer turned nasty.
11:10 frettled 51.8% of the hits are from 193.200.132.146 (feather3.perl6.nl), so I assume that's something related to SVN.
11:11 frettled I've installed a perl (5, sorry ;)) script in /usr/local/sbin which analyzes the log and either sorts by number of hits or number of bytes, called "bandwidthips" and "hitips".
11:11 frettled Hmm, actually, the Google crawler came from another IP address as well, 6% more hits.
11:11 frettled I see that someone else started Apache now, we'll see how that pans out.
11:12 frettled lunch!
11:12 Baggiokwok joined #perl6
11:16 Baggiokwok joined #perl6
11:22 meppl joined #perl6
11:26 Baggiokwok joined #perl6
11:31 dalek joined #perl6
11:32 Juerd joined #perl6
11:32 Juerd Damnit!
11:35 buubot joined #perl6
11:43 Juerd And happening again
11:44 Juerd apache2 killed, /etc/init.d/apache2 renamed to /etc/init.d/apache2.disabled
11:46 payload joined #perl6
12:00 Baggiokwok joined #perl6
12:07 bluescreen joined #perl6
12:09 Infinoid hmm.  Does feather1 still run svn::web?
12:09 Infinoid I do remember that was sort of a resource pig, but I don't know what would have changed recently about that
12:09 nico__ joined #perl6
12:27 pugs_svn joined #perl6
12:37 bluescreen joined #perl6
12:38 SmokeMachine joined #perl6
12:41 jnthn joined #perl6
12:45 muixirt joined #perl6
12:51 takadonet morning all
12:52 Juerd Infinoid: At the moment, feather1 does not run apache at all.
12:55 ignacio_ joined #perl6
12:59 clintongormley joined #perl6
13:07 ruoso joined #perl6
13:13 colomon joined #perl6
13:19 mathw Hello o/
13:19 jnthn hi mathw
13:22 mathw \o/ jnthn
13:22 mathw I hope the weather's better where you are
13:23 mathw Or at least, that you're better equipped to deal with it
13:23 frettled urghle, I need to figure out how to turn off the fugly syntax highlighting that's default on feather, it's useless in white-on-black or black-on-white terminals
13:23 jnthn mathw: It's not at all bad here.
13:23 frettled Aha, it's elvis, not vim.
13:24 mathw The main problem here is that the pavements are covered in slick, slippery ice
13:24 mathw on which I have almost zero grip
13:24 mathw I need some spiked shoes I think. Or ice saktes.
13:25 ignacio_ joined #perl6
13:30 frettled Juerd: is ConsoleKit the wrong goose to chase for this?  It seems to be somewhat noisy in daemon.log just before there are problems.
13:33 Juerd It's a known issue but not causing OOM conditions
13:34 frettled It's rather interesting that it hangs at approximately the same periods of time.
13:35 frettled I'll keep a top running, sorted by memory, refresh each second.
13:35 frettled It might be clamd or something like that.
13:36 frettled Oooh, it's running an interesting combinatino of etch, sid and experimental.
13:37 buubot joined #perl6
13:37 frettled And there are a bunch of package upgrades pending.  Perhaps the clamav and/or kerberos vulnerabilities that were patched recently aren't yet patched on feather?
13:43 Juerd frettled: Note that apache caused the OOM crashes, and it's not running at the moment :)
13:44 astrojp joined #perl6
13:47 frettled Juerd: are you certain that Apache caused them, and that it wasn't just the unlucky process to be killed because one of the daemon processes was unlucky?
13:47 plainhao joined #perl6
13:47 payload joined #perl6
13:54 ive joined #perl6
13:54 Juerd frettled: It stopped, twice, when I killed apache2
13:54 Juerd frettled: It had a dozen processes running at lots of CPU, and was eating memory.
13:54 frettled Juerd: hrm
13:55 frettled not fun
13:55 Juerd And it appears that not every site is logged, even.
13:55 Juerd So it'd require live monitoring on the /server-status
13:55 Juerd :|
13:55 frettled Juerd: or that the virtualhost line is logged.
13:56 frettled I can fix that.
13:56 payload joined #perl6
13:58 Juerd afk
14:09 PerlJam joined #perl6
14:19 PerlJam good morning #perl6
14:20 mathw good {localtime()} PerlJam
14:21 takadonet PerlJam:morning
14:21 frettled Good $facepalm!
14:23 diakopter Juerd: pugscode svn down?
14:24 diakopter oh.  /me backlogs more
14:24 diakopter frettled: you working on it?
14:24 frettled diakopter: yup
14:25 sun_ joined #perl6
14:27 ash_ joined #perl6
14:27 frettled It's back up again now.
14:28 frettled But it may be slightly unrealiable.
14:28 diakopter erm
14:29 diakopter why unreliable?
14:30 sun_ left #perl6
14:30 frettled It's already crashed/hung twice because feather ran out of memory.
14:31 diakopter hm
14:31 frettled Apparently, something in Apache or a module goes haywire.
14:31 diakopter oh, I bet someone upgraded a .pm that Infinoid hacked to solve a memory leak
14:32 Infinoid svn::web again?
14:32 diakopter Infinoid: I don't remember where you added those weak scalars
14:32 ash_ jnthn: did the patches i sent apply cleanly?
14:32 frettled hrm
14:33 frettled If it's a .pm that's part of a Debian package, then it's better to uninstall the Debian package and install the module separately in this case, or it will just happen again.
14:34 frettled Alternatively, we can pin the package to a specific version, which may cause breakage later on.
14:38 diakopter many times the Debian package can't be uninstalled because it has too many others that depend on it
14:38 frettled mm
14:38 frettled pinning is the solution, then
14:38 frettled or, of course, create a sub-version of the package which satisfies the requirements of the dependencies, and pin that.
14:38 diakopter but, there isn't a .deb ... yes.
14:39 frettled I prefer that solution myself.
14:39 frettled But I think it can turn into a proper mess if there suddenly is a Perl package needed that depends on versions which aren't installed, and you use the cpan tool to install them.  Kaboom-risky
14:41 soupdragon joined #perl6
14:47 nihiliad joined #perl6
14:49 ash_ so, submethods in roles, they will get composed into a class once? then it can't be inherited to the children of that class?
14:49 diakopter frettled: can you unblock the svn::web crawler
14:50 ash_ what if you want to replace a built-in role function? like ^compose
14:50 frettled diakopter: is it blocked?  hrm.
14:50 frettled I don't even know where that is, heh
14:51 diakopter hm
14:51 ash_ you don't want your ^compose getting added to a class, that could be bad
14:54 frettled diakopter: might be in a .htaccess somewhere, I don't see any "deny" statements in /etc/apache2
14:59 frettled Oh it's only 4 million inodes, how long can it take to find all .htaccess files and grep for "deny" in them.  :D
14:59 frettled hrm, no, 4 million here and 5.5 there, no matter.
15:02 Exodist joined #perl6
15:04 Baggiokwok joined #perl6
15:05 ash_ frettled: do you have locate installed? it should be pretty quick for finding the files (yay cached databases)
15:05 Exodist joined #perl6
15:05 frettled ash_: locate is installed on feather, but I'm not sure how much it actually indexes.
15:06 frettled nor how often it does it
15:06 Exodist joined #perl6
15:06 ash_ ah, i just use it for its speed, find's good too though
15:07 frettled okay, it apparently does it daily, so any changes after 06:25 CET are not in there.
15:07 frettled I suspect that the block, if it's there, was added after 12:00.
15:10 Psyche^ joined #perl6
15:10 cognominal joined #perl6
15:37 jnthn ng: class Hash { }
15:37 p6eval ng 93d662:  ( no output )
15:40 pnu joined #perl6
15:40 payload joined #perl6
15:46 ash_ jnthn: did you find anything with the patch for meta methods?
15:46 jnthn ash_: I didn't get chance to look at it yet today, sorry.
15:46 jnthn ash_: I will have time later on.
15:47 jnthn Managed to have two longish phone meetings on one day. Such is life. :-)
15:47 ash_ ah, thats cool, no worries just was gonna bug you since i can
15:47 jnthn :-P
15:49 ash_ so, jnthn, let me see if this logic is sound, i used the get interpreter opcode to inspect the lexpad (which should have the lexical variables right?) in the add_meta_method method which should contain the $meth_name lexical variable, but the lexpad as no lexical variables in it
15:49 ash_ so... .lex '$meth_name', name  isn't working, i'd assume?
15:51 ash_ also, changing that to: $P0 = name \n store_lex '$meth_name', $P0  causes an error (which should be the exact same thing as .lex '$meth_name', name according to the docs
15:51 frettled diakopter, Infinoid, Juerd: I think we can consider it confirmed that it's svnweb that's hogging memory a bit.  I see that there are lots of Perl libraries loaded into the apache2 processes, and that those using 70+ MB of resident RAM all reference svnweb.
15:51 Juerd I say disable that for now
15:51 frettled Also, the processes are long-running, they don't jack down their memory usage.
15:52 Juerd Though the hogging processes were using >100 MB when I killed apache
15:52 frettled Juerd: two of them are 100 and 105 respectively right now, plus 30-40 that's only virtual
15:52 Juerd Right
15:53 frettled It might be better to use some shorter-living FastCGI thingy for this, if that is possible.
15:53 Juerd If svnweb supports that I don't see why not
15:53 frettled That way, memory might get freed up earlier -- I take it that this is modperl-like code.
15:54 Juerd frettled++ for investigating this, by the way
15:54 ash_ jnthn: https://svn.parrot.org/parrot/trunk/t/pmc/lexpad.t contains an example of how i used the lexpad to inspect the method's lexical variables, look towards the bottom at test_iter
15:54 Juerd People with sysadmin clue *and* free time are hard to find
15:54 frettled *blush*
15:55 PerlJam frettled++ for keeping feather healthy
15:56 frettled Ah, well, time to go roleplaying in the wonderful universe of Legend of the Five Rings.  :)
15:57 frettled Juerd: I have not changed anything about svnweb, _but_ I've added a %v to the logging.  That means that access_log should now contain the virtualhost as the first column in every log entry.  I'll upload new versions of hitips and bandwidthips tonight or tomorrow.
15:57 * frettled idles.
15:58 jnthn ash_: Note that store_lex does not actually declare storage for a lexical.
15:58 jnthn ash_: It just stores it.
15:58 jnthn ash_: Just to confirm, when you do .lex '$meth_name', name
15:58 jnthn name is a PMC register?
15:58 jnthn You should get an error if not though...
15:59 Juerd and there we go agian
15:59 ash_ yes, .param string name
15:59 Juerd http://juerd.nl/i/0c3af3a9a​3ba054047f6fdeed41ef4ed.png
15:59 Juerd apache2 killall'ed (-9)
16:00 jnthn ash_: oh!
16:00 ash_ jnthn: is using it as .param string name good enough? or do i need a pmc?
16:00 jnthn ash_: No, that's a string register
16:00 ash_ .lex takes pmc's doesn't it?
16:00 jnthn ash_: Oh no, please say this isn't *the* problem...
16:00 jnthn *sigh*
16:00 jnthn ash_: Yes, only
16:00 jnthn ash_: I'd not thought of that before now
16:00 Juerd frettled: It didn't survive 5 minutes without your presence :)
16:01 Juerd frettled: I've disabled apache2 again. We'll patiently wait until one of us has time again
16:01 jnthn ash_: It really, *REALLY* sucks that Parrot didn't give you a compile time error about that...
16:01 ash_ *facepalm* told you its related to my lack of parrot knowledge
16:01 jnthn ash_: Well, Parrot (sh|c)ould be a bunch more helpful here though.
16:01 Juerd frettled: http://juerd.nl/i/0c3af3a9a​3ba054047f6fdeed41ef4ed.png was top just before I killed them
16:02 ash_ lets put a ticket in parrot's track for a new feature, error messages on .lex assignments that aren't pmc's
16:02 ash_ :P
16:03 ash_ hmm
16:04 ash_ so, here's what i tried, i have a .local pmc meth_name  .... meth_name = name \n .lex '$meth_name', meth_name
16:05 ash_ it compiles fine, but now when i run it, i get:  Null PMC access in set_string_native()  current instr.: 'perl6;ClassHOW;add_meta_method' pc 3884 (src/metamodel/ClassHOW.pir:366)
16:06 jnthn ash_: Yup
16:06 jnthn You need
16:06 jnthn meth_name = new ['String'] first
16:06 ash_ do i need to box the value?
16:06 ash_ oh, okay
16:06 jnthn ash_: actually
16:06 jnthn you can do it in one line
16:06 jnthn meth_name = box name
16:06 jnthn :-)
16:06 jnthn (you still need the .local pmc meth_name decl...then follow it with that)
16:06 ash_ cool, in the test from parrot they box the strings in their assignment s
16:07 ash_ yeah, i see, lets see if it worked
16:07 ash_ \o/ it worked
16:08 jnthn \o/
16:08 jnthn ash_++
16:09 jnthn back soon, need a quick break
16:10 ash_ jnthn: one more question, and i'll stop bugging you, addmethod $P0, name, $P1 vs. meta.'add_method'(name, $P1)
16:11 * Juerd made a temporary page at http://perlcabal.org/svn/ to explain why it's not available
16:13 jnthn ash_: meta.'add_method'(meta, name, $P1)
16:13 ash_ k, thats what i thought
16:17 ash_ is there a type of declaration on role's that don't get inherited into the class they are composed into? so you can override say the ^compose method but not let that get passed into the class
16:17 ash_ submethod doesn't seem to be correct
16:29 am0c joined #perl6
16:31 pmichaud joined #perl6
16:31 pmichaud good morning, #perl6
16:31 uniejo joined #perl6
16:32 ash_ good morning pmichaud
16:33 TimToady howdydoo
16:35 pmichaud screen isn't running for me on feather  ("No more PTYs")
16:35 pmichaud known issue?
16:36 ash_ feather had some issues eariler, i don't know if screen was one of them
16:36 pmichaud I see that other folks have screen processes running, so I'm guessing it's a resource issue.
16:36 ash_ i know they took down SVNWeb because it was causing problems on the server http://perlcabal.org/svn/
16:37 TimToady feather2 was running out of memory repeatedly; don't know how that's related
16:37 pmichaud maybe I need to find a different host for my screen session :-(
16:43 jnthn pmichaud: oh hai
16:43 pmichaud jnthn: oh hai!
16:43 jnthn pmichaud: Server went down, I had to restart screen after the reboot too.
16:44 pmichaud jnthn: right... my problem is that screen won't start
16:44 jnthn oh.
16:44 jnthn That's...sucky.
16:45 ash_ jnthn: i sent another patch to you btw, so, between the 3 of them you should have everything working, if you want i can put them in 1 patch instead
16:45 jnthn ash_: The whole "does .^foo add to the metaclass of the role or get held until we compose the role and go into the metaclass of where we compose it" question is why I was putting off having those in roles. :-)
16:46 jnthn ash_: That may be easier for me, if it's easy for you.
16:46 jnthn ash_: Especially so if the latest one is a diff off current master.
16:48 fridim_ joined #perl6
16:57 szbalint moritz_++ # hired.
16:59 cdarroch joined #perl6
17:00 pmichaud afk, lunch
17:03 ash_ jnthn i did a clean checkout of ng and am going to apply it vs that
17:04 colomon szabgab: how's that?
17:15 zloyrusskiy joined #perl6
17:22 justatheory joined #perl6
17:25 colomon szbalint: how's that? (I meant)
17:33 ash_ jnthn: do you know anything else OO related that needs working on in ng?
17:53 cotto_work joined #perl6
18:12 bbkr joined #perl6
18:23 justatheory joined #perl6
18:24 bbkr Does rakudo support variables in regexps like m/$var/ (not-interpolated) ? It returns "Null PMC access in get_string()" for me. $var is Str type.
18:25 pmichaud bbkr: rakudo doesn't support those yet.  It will soon.
18:25 hejki doesn't seem so atm. you could use m:P5// awhile instead
18:26 pmichaud (where "soon" == "next week")
18:26 bbkr wow! nice
18:27 PerlJam pmichaud: is ng gonna make it?
18:27 pmichaud PerlJam: I hope so.  I certainly plan to be working hard to do that.
18:27 pmichaud At the moment that's still my plan.
18:27 PerlJam good enough for me :)
18:30 ShaneC joined #perl6
18:31 bbkr will that also include using $.var in grammar tokens? like for example: grammar CSV { has $.quote; token csv_line { (<csv_field> $.separator)+ } } ?
18:31 ignacio_ joined #perl6
18:32 bbkr i mean: grammar CSV { has $.separator; token csv_line { (<csv_field> $.separator)+ } }
18:32 pmichaud that might work.
18:32 PerlJam bbkr: you really mean token csv_line { <csv_field> ** $.separator }  # :-)
18:33 pmichaud one would then need to do    $g = CSV.new(separator => ',');   $g.parse(...)
18:33 bbkr yes, and this currently does not work yet.
18:34 buubot joined #perl6
18:34 stephenlb joined #perl6
18:34 bbkr perl6 -e 'grammar CSV { has $.sep }; CSV.new(sep => ",")' gives too few positional arguments: 1 passed, 2 (or more) expected
18:37 bbkr Pearljam: what does ** operator do? i thought it is for multiplication of results. like m/a ** 2/ is the same as m/aa/. am i wrong?
18:38 PerlJam bbkr: you are correct. But it also has a nifty new semantic where you can say  'a' ** ','  to match "a,a,a,a"
18:38 PerlJam (or just "a")
18:39 bbkr that rocks!
18:39 PerlJam indeed it does
18:39 PerlJam I've also come to really like the "goal matching" syntax too (though at first it bugged me)
18:40 PerlJam '(' ~ ')' <stuff> /  is the same as  / '(' <stuff> ')' /
18:40 PerlJam (except that IRC ate my leading /)
18:42 jackyf joined #perl6
18:43 pmichaud it's the same as / '(' <stuff> ')' /  except that you get a useful error message if there's no ')' found after <stuff>
18:44 bbkr hmm, this ** is dangerous: easy to make mistake by typing a ** 2 instead of a ** '2' and the other way. but if you pay attention to quotes it makes life easier.
18:46 PerlJam I don't know if I'd call it "dangerous", but yes it is surprising sometimes if you make a mistake.
18:47 PerlJam (but if you make mistakes, that's an opportunity for you to learn too  :)
18:48 PerlJam for instance, your csv_line should have really had anchors on it:   token csv_line { ^^ <stuff> ** $.sep $$ }
18:48 PerlJam otherwise you would have had some surprising positive matches.
18:49 bbkr you're right about learning. i've wrote few grammars for various stuff and learned a lot :)
18:52 fridim_ joined #perl6
18:55 payload joined #perl6
18:58 bbkr when $.var in grammars will be working i'll post CSV class on github. now it's too messy because $.var has to be defined as token and stuff like quotings and separators can only be configured by inheriting grammar.
19:13 IllvilJa joined #perl6
19:15 PerlJam bbkr: you might want to call it something other than CSV if the separator is variable
19:16 PerlJam pm: Want to come back to TAMUCC as the CIO?  Irby is finally retiring.  :)
19:23 hejki one of the main reasons to make project euler in perl6: 'sub postfix:<!>($n) { [*] 1..$n }; say [+] gather { for 3..50_000 -> $x { if $x == [+](map { $^a! }, $x.comb()) { take $x; } } }' :)
19:23 hejki (that's #34)
19:25 Tene It would be nice to see a module that adds operators for math symbols.
19:25 Tene I've done that with the set operators a few times.
19:25 hejki it would be nice if solving these wouldn't take so long time :P
19:26 hejki i can solve one problem, start running the script, have a lunch, walk my dog and solve another problem before i get the answer :P
19:26 hejki rakudo being hugely slow :<
19:31 nihiliad joined #perl6
19:35 bluescreen joined #perl6
19:35 hejki rakudo: reduce { say "$^a + $^b" }, 5..10
19:35 p6eval rakudo 3867ff: 5 + 6␤1 + 7␤1 + 8␤1 + 9␤1 + 10␤
19:35 Tene rakudo: reduce { say "$^a + $^b"; $a+$b }, 5..10
19:35 p6eval rakudo 3867ff: 5 + 6␤11 + 7␤18 + 8␤26 + 9␤35 + 10␤
19:36 hejki ahh
19:36 hejki i was too focused on the say-part :P
19:37 pmichaud PerlJam: No, I don't want to come back to TAMUCC as the CIO.  :-)
19:38 japhb joined #perl6
19:40 ash_ joined #perl6
19:42 ash_ joined #perl6
19:54 scp1 joined #perl6
19:58 vamped joined #perl6
20:00 TimToady phone
20:01 vamped P06#line_607
20:01 vamped rakudo: my @a; push @a,1,2,:a<b>; push @a,3,4,(:b<c>); push @a, 5,6,"d"=>"e"; for @a { printf "%-12s%s\n",.perl,.WHAT }
20:01 p6eval rakudo 3867ff: 1           Int()␤2           Int()␤3           Int()␤4           Int()␤"b" => "c"  Pair()␤5           Int()␤6           Int()␤"d" => "e"  Pair()␤
20:02 vamped doesn't named argument "a" get pushed, or am I missing something?
20:03 vamped s/P06/S06/
20:04 TimToady unless there's a version of push that accepts a named arg of 'a', it should fail
20:05 nihiliad joined #perl6
20:06 vamped this means I'm likely missing something from the example @ line_607 "push @array,1,2,:a<b>;"
20:06 TimToady the example was not intended to be meaningful, actually...
20:06 vamped lol. ok now 'that' makes sense.
20:06 TimToady should probably be marked as # FAILS
20:06 * ruoso .oO( that should probably be written as push @array,1,2,(:a<b>)
20:07 vamped the following lines state is that way ruoso. it was written that way with intent (whatever that may have been)
20:08 rgrau` joined #perl6
20:10 vamped i think perhaps this makes a better point: my sub x { @_.perl.say; %_.perl.say}; x 1,2,:a<b>; x 3,4,(:b<c>); x 5,6,"d"=>"e";
20:10 vamped rakudo: my sub x { @_.perl.say; %_.perl.say}; x 1,2,:a<b>; x 3,4,(:b<c>); x 5,6,"d"=>"e";
20:10 p6eval rakudo 3867ff: [1, 2]␤{"a" => "b"}␤[3, 4, "b" => "c"]␤{}␤[5, 6, "d" => "e"]␤{}␤
20:20 vamped exit ciao
20:25 snearch_ joined #perl6
20:25 jnthn ash_: Back from food, looking at your patch now :-)
20:26 jferrero joined #perl6
20:28 ash_ jnthn i am talking to #parrot about .lex giving an error, so hopefully people can't make my stupid mistake in the future
20:29 jnthn ash_: OK, cool.
20:29 jnthn ash_: Are you adding the method immediately ratehr than as a mix-in role? It looks so...
20:30 ash_ i pass that off to add_method, add_method is adding the method directly, not using a role
20:30 jnthn To the HOW of the HOW, yes?
20:30 jnthn as in, the metaclass of the metaclass?
20:30 jnthn The problem is that this adds it for _all_ metaclass instances, not just this specific one.
20:30 jnthn So it doesn't quite get the semantics right.
20:32 jnthn ash_: That aside, the patch looks good.
20:32 ash_ so, my use of addmethod in add_method is wrong then?
20:32 jnthn no, no
20:33 ash_ or my use of HOW.add_method in add_meta_method
20:33 jnthn That one.
20:33 jnthn The latter.
20:33 ash_ hmm
20:33 ash_ okay
20:33 jnthn It's meant to influence the current metaclass instance, not every metaclass instance.
20:33 jnthn It's the difference between augmenting a class and mixing in to an instance.
20:34 ash_ yeah, i didn't realize it was affecting all metaclass instances
20:34 jnthn OK
20:34 jnthn I'm going to apply the patch because it's overall good.
20:34 jnthn And then we can work from there.
20:35 jnthn Essentially though, it should be something like this:
20:35 jnthn .local pmc mixin_role, meta_mixin_role
20:35 jnthn $P0 = get_hll_global 'RoleHOW'
20:35 jnthn meta_mixin_role = $P0.'new'()
20:36 jnthn $P0.'add_method'(meta_mixin_role, name, method)
20:36 jnthn mixin_role = $P0.'compose'(meta_mixin_role)
20:36 jnthn '&infix:does'(how, mixin_role)
20:36 jnthn Or some such.
20:36 jnthn That is, use the metamodel to construct the anonymous role and then mix it in to the metaclass instance.
20:37 ash_ i guess i avoided that because it seemed like a lot to declare a whole new role and mix it in for each method
20:37 jnthn Well, thus why master collects them together and makes one role and mixes it in at the end.
20:38 jnthn That does mean you can't override any of the declarative parts, which may be a blessing. ;-)
20:39 ash_ well that showes me for thinking creating a whole new role was a bit much for 1 method, oops, i should of probably asked a bit more in depth why you guys did it the way you did, now the meta methods are leaking all over the place. I really should write some tests for this and put them in the spec
20:41 jnthn ash_: No worries, it's all fixable. :-)
20:42 jnthn ash_: Do you want to work on the patch to do it mix-in style?
20:42 ash_ sure, i can do that
20:43 ash_ i am at $work though, so i may not be able to finish it today
20:43 jnthn ash_: That's fine, no rush.
20:43 jnthn I'm quite happy that between the two of us watching this, we won't drop the ball and forget that one of us should fix it. :-)
20:44 jonasbn joined #perl6
20:52 ash_ i have a project i'd like to work on in perl 6, and to get it working i'd need most of the OO stuff, including roles functioning properly and AUTO* so i'll probably be hacking on parts of that until rakudo can do what i need it to do
20:53 ash_ hmmm, i am getting a non-existent sub error on infix:does
20:53 jnthn Sorry - should be: &infix:<does>
20:54 jnthn ng: class Foo { method postcircumfix:<[ ]>() { } }
20:54 p6eval ng 93d662:  ( no output )
20:54 ash_ try calling it :P
20:54 ash_ ng: class Foo { method postcircumfix:<[ ]>() { } }; my $f = Foo.new; $f['a'];
20:54 p6eval ng 93d662: Too many positional parameters passed; got 2 but expected 1␤current instr.: 'perl6;Foo;postcircumfix:<[ ]>' pc 285 (EVAL_1:119)␤
20:54 jnthn ng: class Foo { method postcircumfix:<[ ]>($x) { say "omg" } }; my $a = Foo.new; $a[42]
20:54 p6eval ng 93d662: omg␤
20:55 ash_ err
20:55 jnthn \o/
20:55 ash_ i thought that didn't parse with ng yet
20:55 jnthn yeah me too.
20:55 jnthn Apparently it does! :-)
20:55 ash_ hmmm must of been something else i had a problem with then
20:55 jnthn ng: class Foo { method postcircumfix:<{ }>($x) { say "omg" } }; my $a = Foo.new; $a{42}
20:55 p6eval ng 93d662: get_pmc_keyed() not implemented in class 'Foo'␤current instr.: '_block14' pc 29 (EVAL_1:0)␤
20:55 jnthn ah, that's the issue I was trying to evoke.
20:55 colomon \o/ indeed!
20:55 ash_ that looks like an error i was seeing
20:56 dalek rakudo/ng: 499c7c8 | jonathan++ |  (6 files):
20:56 dalek rakudo/ng: Start to get method ^foo style declarations working again with the metamodel. Also rip out the ParrotBackend.pir role. Patch courtesy of John Harrison. ash++
20:56 dalek rakudo/ng: review: http://github.com/rakudo/rakudo/commit/4​99c7c8eaf895c62bc8bf3d1564b83582dc7191e
20:56 dalek rakudo/ng: 448f882 | jonathan++ | src/ (2 files):
20:56 dalek rakudo/ng: Make sure we emit calls to add_meta_method for roles, even though it's NYI, so we get error saying so. Also make error a bit more awesome.
20:56 dalek rakudo/ng: review: http://github.com/rakudo/rakudo/commit/4​48f8825d9e8da8d9dd4930b7a4fe3af55374e97
20:58 jnthn ng: role Foo { method bar { say "wtf" } }; Foo.bar
20:58 p6eval ng 93d662: Method 'bar' not found for invocant of class 'Perl6Role'␤current instr.: '_block14' pc 29 (EVAL_1:0)␤
20:58 jnthn ng: role Foo { method bar { say "wtf" } }; Foo!select.bar
20:58 p6eval ng 93d662: Could not find non-existent sub !get_flattened_roles_list␤current instr.: 'parrot;P6role;!pun' pc 277976 (src/gen/core.pir:33845)␤
20:58 jnthn kk
20:58 jnthn time to pun.
20:58 ash_ jnthn: does 'infix:<does>' exist yet? because I am getting: No applicable candidates found to dispatch to for '&infix:<does>'
20:59 jnthn rakudo: role Foo { method bar { say "omg" } }; my $x = 42; $x does Foo; say $x; $x.bar;
20:59 jnthn (I think that works)
20:59 jnthn oops
20:59 jnthn ng: role Foo { method bar { say "omg" } }; my $x = 42; $x does Foo; say $x; $x.bar;
20:59 p6eval rakudo 3867ff:  ( no output )
20:59 p6eval ng 93d662: 42␤omg␤
20:59 jnthn yeah
20:59 jnthn It's there.
21:00 ash_ is it a multi-method? it might be the types i am passing it
21:00 jnthn Yes, it is.
21:01 jnthn But the signature is pretty liberal at the moment due to Other Issues, so should work...
21:02 ash_ http://gist.github.com/276573
21:02 ash_ is the top relevant parts of add_meta_method
21:05 jnthn That doesn't look wrong. Hm.
21:06 jnthn Curious. What does $S0 = tyopeof mixin_role \n say $S0 give?
21:06 ash_ is ClassHOW a decedent of Mu
21:06 jnthn Yes, in a twisted kinda way.
21:07 ash_ *building*
21:07 jnthn (given that ClassHOW also describes Mu...)
21:08 ash_ P6role # is mixin_role
21:08 ash_ ClassHOW # is meta
21:09 jnthn ng: role Foo[::T] { }; say Foo[Int] ~~ Mu
21:09 p6eval ng 93d662: 1␤
21:09 jnthn hmm
21:10 jnthn ng: class Foo { }; say Foo.HOW ~~ ClassHOW
21:10 p6eval ng 93d662: 1␤
21:10 jnthn ng: class Foo { }; say Foo.HOW ~~ Mu
21:10 p6eval ng 93d662: 1␤
21:10 jnthn Well no surprises / issues there.
21:12 ash_ should it say P6role?
21:12 jnthn Yeah
21:12 jnthn It's the "internal" name of what it si.
21:12 jnthn *is
21:12 jnthn For now, anyway.
21:12 jnthn ng: role Foo[::T] { }; say Foo.WHAT
21:12 p6eval ng 93d662: Foo()␤
21:13 jnthn ng: role Foo[::T] { }; say Foo[Int].WHAT
21:13 p6eval ng 93d662: Foo()␤
21:13 jnthn ng: role Foo[::T] { }; say Foo.perl
21:13 p6eval ng 93d662: Foo␤
21:13 jnthn ng: role Foo[::T] { }; say Foo[Int].perl
21:13 p6eval ng 93d662: Foo[Int]␤
21:13 jnthn Those look good.
21:13 * jnthn ponders what could be wrong
21:14 payload joined #perl6
21:15 ash_ whats the mixin_role = $P0.'compose'(meta_mixin_role) for? is that calling ^compose? and what does that return? a fully finished role?
21:16 jnthn ash_: Yes, that's right.
21:16 jnthn ash_: on a class you get back the type object.
21:16 jnthn For a role it's something analogous.
21:17 pmichaud gone for a while (no screen on feather)
21:21 ewilhelm left #perl6
21:25 hudnix joined #perl6
21:30 dalek rakudo/ng: 3ebc807 | jonathan++ | src/ (3 files):
21:30 dalek rakudo/ng: Delete lots of code, add back a little bit, finish up with role punning working.
21:30 dalek rakudo/ng: review: http://github.com/rakudo/rakudo/commit/3​ebc80709103557bd8a2768ef3dc49b812221225
21:30 dalek rakudo/ng: 1387712 | jonathan++ | t/spectest.data:
21:30 dalek rakudo/ng: We now pass S14-roles/crony.t again.
21:30 dalek rakudo/ng: review: http://github.com/rakudo/rakudo/commit/1​387712e6a9037f1a741ff7efafc394d36a4bdd6
21:31 payload joined #perl6
21:31 xinming_ joined #perl6
21:36 dalek rakudo/ng: 7eb763a | jonathan++ | src/core/traits.pm:
21:36 dalek rakudo/ng: If somebody tries to inherit from a role, needs to be punned there too. Handled nicely with a multi candidate in ng rather than magic in master. :-)
21:36 dalek rakudo/ng: review: http://github.com/rakudo/rakudo/commit/7​eb763ae92fd642143b4150c4e933068e6fe042d
21:36 dalek rakudo/ng: 9551672 | jonathan++ | t/spectest.data:
21:36 dalek rakudo/ng: We now pass S14-roles/instantiation.t again.
21:36 dalek rakudo/ng: review: http://github.com/rakudo/rakudo/commit/9​5516723d0fb3ede85f94447c9aefedbc4fd44ed
21:38 jnthn std: role R1[::T] { method x { T } }; my R1 of Int $x;
21:38 p6eval std 29531: ok 00:01 111m␤
21:38 jnthn ng: role R1[::T] { method x { T } }; my R1 of Int $x;
21:38 p6eval ng 448f88: In "my" declaration, typename R1 must be predeclared (or marked as declarative with :: prefix) at line 1, near " of Int $x"␤current instr.: 'perl6;HLL;Grammar;panic' pc 500 (src/stage0/HLL-s0.pir:328)␤
21:38 jnthn aww
21:42 * colomon is very happy to see ng progress again...
21:42 * jnthn is very happy to have energy and brain cycles to cause ng progress again. :-)
21:43 ash_ any idea about why i am getting this error?
21:44 jnthn ash_: Not really. :-(
21:44 jnthn I wonder...
21:45 jnthn ng: multi test(Mu $x) { say "ok" }; role Foo[::T] { }; test(Foo)
21:45 p6eval ng 448f88: ok␤
21:45 jnthn ng: multi test(Mu $x) { say "ok" }; role Foo[::T] { }; test(Foo[Int])
21:45 p6eval ng 448f88: ok␤
21:45 jnthn Here's the oddness. :-/
21:46 jnthn That works too.
21:46 jnthn Which is like, odd. Because if it were a multi-dispatcher bug I'd also expect that one to fail.
21:46 diakopter ng: test(4)
21:46 p6eval ng 448f88: sh: ./perl6: No such file or directory␤
21:47 jnthn diakopter: OMG you broke it!!
21:47 jnthn ;-)
21:50 diakopter ng: multi sub test() { say 3 }; multi sub test() { say 4 }; test()
21:50 p6eval ng 955167: Null PMC access in invoke()␤current instr.: '_block14' pc 29 (EVAL_1:0)␤... call repeated 1 times␤
21:50 ash_ jnthn: can you call infix:does directly in perl6? like &('infix:<does>)($b, Foo) or something?
21:51 jnthn ash_: In theroy, &infix:<does>
21:51 jnthn ash_: In practice...
21:51 jnthn ng: say &infix:<+>(1,2)
21:51 p6eval ng 955167: Symbol '&infix:<+>' not predeclared in <anonymous>␤current instr.: 'perl6;PCT;HLLCompiler;panic' pc 137 (src/PCT/HLLCompiler.pir:101)␤
21:51 jnthn We don't recognize that form yet.
21:51 ash_ diakopter: that should be a parser error i think, since there is already a definition of test with no arguements
21:53 ash_ chromatic++ is going to try to add an error message if you use .lex with anything other than a pmc, woot
21:53 jnthn chromatic++
22:00 diakopter ng: multi sub test() { say 3 }; &.test
22:00 p6eval ng 955167: Lexical 'self' not found␤current instr.: '_block14' pc 29 (EVAL_1:0)␤
22:01 justatheory joined #perl6
22:04 nihiliad joined #perl6
22:16 dalek rakudo/ng: 219899f | jonathan++ | src/Perl6/ (2 files):
22:16 dalek rakudo/ng: Re-enable parsing of my Can of Beer $starobrno style declarations.
22:16 dalek rakudo/ng: review: http://github.com/rakudo/rakudo/commit/2​19899ff79207674efb3184ed801ade59c89eb8e
22:16 dalek rakudo/ng: b653310 | jonathan++ | t/spectest.data:
22:16 dalek rakudo/ng: We now pass S14-roles/parameterized-type.t again.
22:16 dalek rakudo/ng: review: http://github.com/rakudo/rakudo/commit/b​653310f7f534d01d57dee3984215a5fabd8c518
22:25 jnthn Hmm.
22:26 jnthn STD uses ** <param_sep>
22:26 jnthn In signature
22:26 jnthn Which is cute
22:26 jnthn But seems in Rakudo it only captures the final <param_sep>, not an array of all of them.
22:27 cognominal joined #perl6
22:39 jnthn phenny: tell pmichaud In STD and Grammar.pm, in the signature rule, we use a construct like [ ...parameter... ] ** <param_sep>. However, unfortunately it seems the regex engine doesn't capture all of the parameter seperators, but instead only the last one. Tried a couple of possible workarounds, but no joy...any thoughts? kplzthnxbai.
22:39 phenny jnthn: I'll pass that on when pmichaud is around.
22:48 colomon__ joined #perl6
22:53 * jnthn -> rest
22:57 cognominal joined #perl6
22:58 colomon joined #perl6
23:02 Limbic_Region joined #perl6
23:19 ash_ ng: my $a = Array.new; $a.push(5);
23:19 p6eval ng b65331: Method 'elems' not found for invocant of class ''␤current instr.: 'perl6;Mu;' pc -1 ((unknown file):-1)␤
23:19 ash_ rakudo: my $a = Array.new; $a.push(5);
23:19 p6eval rakudo 3867ff:  ( no output )
23:19 ash_ hmmm
23:20 cotto_work joined #perl6
23:22 colomon rakudo: my $a = Array.new; $a.push(5); say $a.perl
23:22 p6eval rakudo 3867ff: [5]␤
23:22 ash_ i think ng has a bit of an issue
23:22 _bob_k joined #perl6
23:23 colomon ash_: agreed
23:23 * colomon wonders if he implemented push...
23:23 ash_ ng: my $a = Array.new; say $a.elems;
23:23 p6eval ng b65331: Method 'elems' not found for invocant of class ''␤current instr.: 'perl6;Mu;' pc -1 ((unknown file):-1)␤
23:24 colomon nope, that's more PIR that I'd have used.
23:24 _bob_k While trying to build Rakudo, I'm getting error messages similar to this: http://pastie.org/758753
23:24 _bob_k Any idea what's going on?
23:24 ash_ i don't know if its a problem with push, but i do see there is also a problem with elems
23:25 colomon _bob_k: that's a new one on me, I fear.
23:25 ash_ _bob_k: i haven't seen that one, whats your build enviorment? gcc version?
23:25 ash_ or cc
23:25 colomon ng: my $a = Array.new; say $a.elems
23:25 p6eval ng b65331: Method 'elems' not found for invocant of class ''␤current instr.: 'perl6;Mu;' pc -1 ((unknown file):-1)␤
23:26 colomon my $a = Array.new; say $a.WHAT
23:26 ash_ colomon: its funny though, you can list the methods and its in the list
23:26 _bob_k ash_: Ubuntu 8.10, so gcc (Ubuntu 4.3.2-1ubuntu12) 4.3.2
23:26 ash_ ng: my $a = Array.new;
23:26 p6eval ng b65331:  ( no output )
23:26 colomon ng: my $a = Array.new; say $a.WHAT
23:26 p6eval ng b65331: Array()␤
23:26 ash_ ng: my $a = Array.new; say ~$a.^methods;
23:26 p6eval ng b65331: postcircumfix:<[ ]> shift pop push unshift perl postcircumfix:<[ ]> list Num postcircumfix:[ ] perl of elems Str Iterator Int unpolar floor asech ord round split match acosh lc p5chop words join sinh cotan acotan atan2 trim reverse asec isa cotanh ucfirst sech tan cos rand fmt first sqrt
23:26 p6eval ..…
23:27 ash_ elems is in the list
23:27 ash_ hmmm
23:27 colomon ash_: I know we've got tests running for elems, too.
23:27 ash_ _bob_k: did you do: perl Configure.pl --gen-parrot ?
23:27 ash_ or did you use a built in parrot?
23:28 ash_ colomon: are they fudged in ng? or is this something that hasn't been addressed yet?
23:28 colomon ash_: I suspect it's something wrong with Array.new.
23:28 colomon ng: my @a = (1, 2, 3); say @a.elems
23:28 p6eval ng b65331: 3␤
23:29 colomon of course, that's a list.  hmmm...
23:29 colomon ng: my $a = [1, 2, 3]; say $a.elems
23:29 p6eval ng b65331: 3␤
23:29 ash_ my @a = 1, 2, 3; say @a.WHAT:
23:29 colomon ng: my $a = [1, 2, 3]; say $a.WHAT
23:29 p6eval ng b65331: Array()␤
23:29 ash_ ng: my @a = 1, 2, 3; say @a.WHAT;
23:29 p6eval ng b65331: Array()␤
23:29 ash_ ng: my @a = 1, 2, 3; @a.push(5);
23:29 p6eval ng b65331:  ( no output )
23:29 _bob_k ash_: I build parrot before I build rakdudo, so my shell script is basically:
23:29 _bob_k pushd ~/parrot/rakudo/ && make clean && git pull && perl Configure.pl --parrot-config="$HOME/parrot/bin/parrot_config" && make && make test && popd
23:29 colomon so anyway, yeah, elems works.
23:30 ash_ weird...
23:30 colomon _bob_k: which branch of rakudo?
23:30 _bob_k colomon: whichever is the default.
23:31 _bob_k So, I believe the non-ng branch.
23:31 colomon right, should be master.
23:31 ash_ master is default in git
23:31 _bob_k Yeah, that's it.
23:31 colomon which version of parrot?
23:32 _bob_k Again, head from svn.
23:32 colomon ah, wonder if that's it.
23:32 _bob_k Parrot is to far forward?
23:32 colomon could be.
23:32 ash_ i haven't built rakudo with trunk parrot in a while
23:33 colomon master's default parrot is 43076.
23:34 _bob_k And current parrot is 43449, right?
23:34 _bob_k Er, head parrot...
23:34 ash_ yeah, thats correct bob
23:35 _bob_k So either I need to bactrack Parrot or hop to ng, correct?
23:35 colomon that seems likely to be the problem, let me see if I can duplicate it here.
23:36 ash_ i am trying it too to see if its os related
23:41 _bob_k OK, digging around the net a bit, I found this:  http://irclog.perlgeek.de/text.p​l?channel=perl6;date=2009-12-28
23:41 colomon ng: my $a = List.new; say $a.elems
23:41 p6eval ng b65331: Method 'elems' not found for invocant of class ''␤current instr.: 'perl6;Mu;' pc -1 ((unknown file):-1)␤
23:41 _bob_k Which seems to indicate that masak was made aware of this issue a couple of weeks ago.
23:42 ash_ hmmm
23:42 ash_ ng builds fine, let me try master
23:44 colomon I get the error in master if I bump PARROT_REVISION to head.
23:49 colomon ash_: I've got to go for a bit, but see that List has the same problem Array does....

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

Perl 6 | Reference Documentation | Rakudo