<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet Perl Six</title>
	<link>http://planetsix.perlfoundation.org</link>
	<language>en</language>
	<description>Planet Perl Six - http://planetsix.perlfoundation.org</description>

<item>
	<title>Carl Masak: The typo trap: a farcical FAQ</title>
	<guid>http://use.perl.org/~masak/journal/40167?from=rss</guid>
	<link>http://use.perl.org/~masak/journal/40167?from=rss</link>
	<description>&lt;p&gt; &lt;b&gt;Help! I'm getting the error &quot;invoke() not implemented in class 'Undef'&quot; in my large application. What did I do wrong?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;You've mistyped a class name which sits inside a namespace.&lt;/p&gt;&lt;p&gt; &lt;b&gt;How am I supposed to figure that out?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;I didn't say it was a particularly good error message.&lt;/p&gt;&lt;p&gt;It's like this: if you mistype a class name which is not in a namespace, you'll get an informative error message:&lt;/p&gt;&lt;p&gt; &lt;code&gt;$ perl6 -e 'A.foo'&lt;br /&gt;
Could not find non-existent sub A&lt;br /&gt;
in Main (file src/gen_setting.pm, line 324)&lt;/code&gt; &lt;/p&gt;&lt;p&gt;However, if you mistype a class name which &lt;em&gt;is&lt;/em&gt; in a namespace, you will get an &lt;em&gt;un&lt;/em&gt;informative error message:&lt;/p&gt;&lt;p&gt; &lt;code&gt;$ perl6 -e 'A::B.foo'&lt;br /&gt;
invoke() not implemented in class 'Undef'&lt;br /&gt;
in Main (file &amp;lt;unknown&amp;gt;, line &amp;lt;unknown&amp;gt;)&lt;/code&gt; &lt;/p&gt;&lt;p&gt;So there's your error message. Linking it to the actual cause is something which you'll learn by experience.&lt;/p&gt;&lt;p&gt; &lt;b&gt;So in that case, I don't get the name of the class which was mistyped in my program?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Correct.&lt;/p&gt;&lt;p&gt; &lt;b&gt;And I don't get the line number of my typo?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Indeed not.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Or the file?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Right. You'll get no information about the location of the typo.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Is that intentional?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Well, no. As you see from the error message above, the information is meant to be printed, but it comes out as &lt;code&gt;(file &amp;lt;unknown&amp;gt;, line &amp;lt;unknown&amp;gt;)&lt;/code&gt; instead.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Why?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Rakudo is built on top of Parrot. Usually, Rakudo generates its own error messages, but in some cases, Parrot will also generate an error. The error &lt;code&gt;invoke() not implemented in class 'Undef'&lt;/code&gt; is such a case. When a Parrot-internal error like this one occurs, Rakudo will not be able to extract the annotation information required to provide a sensible line number and file.&lt;/p&gt;&lt;p&gt; &lt;b&gt;I... I see.&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Yeah. Sorry about that.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Are you able to pick up the irony in the fact that when I use namespaces to help mitigate the complexity of my project, I end up with an error message that in fact makes it harder for me to manage the complexity of my project?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Hold on.&lt;/p&gt;&lt;p&gt;Yes. We are able to pick up the irony in that. Quite easily, in fact.&lt;/p&gt;&lt;p&gt;Consider not using namespaces at the present juncture. They are very useful, but they are also known as a frequent source of annoyances like this.&lt;/p&gt;&lt;p&gt; &lt;b&gt;By the way, I couldn't help but note that the line number and file information in your first example doesn't make any sense either. What the heck is &lt;code&gt;src/gen_setting.pm&lt;/code&gt; and &lt;code&gt;line 324&lt;/code&gt;?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Well, uh, that's the last line of internal Rakudo code that actually has a working line-and-file annotation. It's nothing that should reach the user, really.&lt;/p&gt;&lt;p&gt; &lt;b&gt;So that's kinda broken, too?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Annotations are currently broken, yes. Apologies.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Back to my mistyped type name. My program is distributed over fifteen modules and ten thousand lines of code. How do you propose I find my typo?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;First off, we recommend that you compile often. That way, the diff from the last working code will not be too large, and you will not have to visually scan so much text hunting for your typo.&lt;/p&gt;&lt;p&gt;Secondly, it's often useful to have your project in a version tracker such as Git, so that you can do &lt;code&gt;git diff&lt;/code&gt; to see the changes against the index, or against the latest commit.&lt;/p&gt;&lt;p&gt;Thirdly, when all else fails, you can always insert print statements into your code, to try to bisect the origin of the error.&lt;/p&gt;&lt;p&gt; &lt;b&gt;So in other words, Rakudo is no help whatsoever when this occurs?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Now, that's not quite fair. Rakudo tells you &lt;em&gt;that&lt;/em&gt; the error occurs. That's actually useful information.&lt;/p&gt;&lt;p&gt; &lt;b&gt;And you consider that adequate?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;No, I didn't say that! No-one is happy about this situation. It's just the way things are.&lt;/p&gt;&lt;p&gt; &lt;b&gt;So it can't be fixed?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Theoretically, yes. But not easily. Remember that the error occurs in Parrot.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Don't Rakudo and Parrot developers confer with each other?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Oh, sure we do. Do not assume that we're deliberately causing this situation. It's just that the current way Rakudo and Parrot are welded together makes the situation non-trivial to rectify.&lt;/p&gt;&lt;p&gt; &lt;b&gt;So this problem is going to go away with the advent of the new &lt;code&gt;ng&lt;/code&gt; branch?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;There's nothing to indicate that this would be the case. In &lt;code&gt;ng&lt;/code&gt;, you currently get a Null PMC access:&lt;/p&gt;&lt;p&gt; &lt;code&gt;$ ./perl6 -e 'A::B.foo' # ng branch&lt;br /&gt;
Null PMC access in invoke()&lt;br /&gt;
current instr.: '_block14' pc 29 (EVAL_1:0)&lt;br /&gt;
called from Sub '!UNIT_START' pc 984 (src/glue/run.pir:17)&lt;br /&gt;
called from Sub 'perl6;PCT;HLLCompiler;eval' pc -1 ((unknown file):-1)&lt;br /&gt;
called from Sub 'perl6;PCT;HLLCompiler;command_line' pc 1489 (src/PCT/HLLCompiler.pir:794)&lt;br /&gt;
called from Sub 'perl6;Perl6;Compiler;main' pc -1 ((unknown file):-1)&lt;/code&gt; &lt;/p&gt;&lt;p&gt;To its credit, Rakudo &lt;code&gt;ng&lt;/code&gt; does provide more information in this case, but unfortunately the information is of a kind which was concealed from the user in Rakudo &lt;code&gt;master&lt;/code&gt; about a year ago (because it tended to be very uninformative).&lt;/p&gt;&lt;p&gt; &lt;b&gt;Just to summarize: this all sucks, right?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;That would be a succinct description of the state of this particular error message, yes.&lt;/p&gt;&lt;p&gt; &lt;b&gt;I heard that the Perl 6 community has adopted very high standards with respect to error messages. There's talk about &quot;awesome error messages&quot;, and last summer I was in the audience when Larry Wall demonstrated how good Perl 6 was at reporting error messages to the user. How does this error message square with all of that?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;The awesome error messages are like a platonic ideal towards which all implementations aspire. Rakudo, being rooted in our imperfect physical world, doesn't always get all the way. Yet.&lt;/p&gt;&lt;p&gt; &lt;b&gt;I'm about to go visually scan ten thousand lines of code, looking for where my error message might have originated. Any last words?&lt;/b&gt; &lt;/p&gt;&lt;p&gt;We value your efforts as an early adopter of Rakudo. Your feedback is important to us. Have a nice day.&lt;/p&gt;</description>
	<pubDate>Mon, 08 Feb 2010 12:54:56 +0000</pubDate>
</item>
<item>
	<title>Jonathan Worthington: Catching up: two Rakudo Days  from December</title>
	<guid>http://use.perl.org/~JonathanWorthington/journal/40161?from=rss</guid>
	<link>http://use.perl.org/~JonathanWorthington/journal/40161?from=rss</link>
	<description>&lt;p&gt;Today plenty happened in Rakudo land - in fact, it was my most active day's Rakudo hacking in quite a while. colomon++ also made some great commits, and between us a lot of things moved forward today. For my part, hashes and pairs are in much better shape.&lt;/p&gt;&lt;p&gt;I wrote before that I'd got some Rakudo days left to write up; there are two of them, but I'll cover them both in this post, since some of the work crossed the two of them anyway. Here's what I got up to between them.&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Filled out attribute composition logic for role application. A good chunk of this was written in NQP - in fact, all of the role appliers are. :-) Along the way I brought roles up to speed with the attribute part of the meta-object protocol - I'd forgotten that when doing it for classes, though since we couldn't compose attributes at that time it wasn't so interesting anyway. The end result was that we could pass S14-role/attributes.t again.&lt;/li&gt;&lt;li&gt;The specification states that if in a role you do inheritance, then this is just passed on to the class that the role is eventually composed in to, and added to that class's parents. We never had any support for this in master; with a neat meta-model approach it became rather easier to get it in place in ng.&lt;/li&gt;&lt;li&gt;Got BUILD/CREATE fixed up a bit and added back support for &quot;has $.answer = 42&quot; style declarations, again through the new attribute sub-protocol.&lt;/li&gt;&lt;li&gt;Got us handling non-block where blocks again, and added Block.ACCEPTS back - in Perl 6.&lt;/li&gt;&lt;li&gt;We had various &quot;helpers&quot; to let us do some of the low-levelish stuff in PIR. This is mostly for the places where we need those things in place in order to be able to compile the rest of the built-ins that are written in Perl 6. However, a couple of these helpers knew too much about Parrot and too little about the meta-model, which abstracts it away. So, I re-wrote some of those in terms of the meta-model. Much cleaner.&lt;/li&gt;&lt;li&gt;Before we relied entirely on Parrot for our &quot;do we do this role&quot; checks. However, given the unfortunate semantic mis-match between Parrot's built-in role support and what we need for Perl 6 (I did try and influence things in a different direction back when we were doing Parrot's role support, but failed), I've been gradually working us towards not relying on those for Perl 6's role support. (In master, it felt to me like we have almost as much code working around the semantics of Parrot roles as we'll need to have to not use them.) Anyways, the divorce isn't quite complete yet, and it's not even a goal for the ng branch. However, I did make a notable step towards it by getting our .does checks implemented entirely in terms of the meta-model. In the long run, I'm hoping we may be able to write the entire role implementation in NQP, which helps with the even-longer-run dreams I have of Rakudo having additional backends. But that's for The Future. :-)&lt;/li&gt;&lt;li&gt;Cleaned up and re-enabled sigil based type checking in signatures.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Thanks to Vienna.pm for sponsoring me to hack on Rakudo, not only for these two days, but also throughout 2009!&lt;/p&gt;</description>
	<pubDate>Sat, 06 Feb 2010 22:45:42 +0000</pubDate>
</item>
<item>
	<title>Jonathan Worthington: The importance of a break</title>
	<guid>http://use.perl.org/~JonathanWorthington/journal/40160?from=rss</guid>
	<link>http://use.perl.org/~JonathanWorthington/journal/40160?from=rss</link>
	<description>&lt;p&gt;Several days before Christmas, encouraged by my mum asking, &quot;when you're going to start your Christmas break&quot;, I stopped working and hacking on stuff and started relaxing. Until then, I hadn't realized just how tired I was. I slept quite a few ten hour nights in the following week, and had an enjoyable Christmas break. I'd figured I'd maybe take a week or so's break, and then get straight back to things, but a week on I had no motivation or energy to dig in again whatsoever. So, I decided my break would go on through New Years. New Year's celebrations this year involved curry - something I certainly wouldn't mind it involving again.&lt;/p&gt;&lt;p&gt;Early January brought several days in Sweden, part of planning for an upcoming refactoring of my work/location - there's &lt;a href=&quot;http://www.jnthn.net/cgi-bin/blog_read.pl?id=713&quot;&gt;details on my personal blog&lt;/a&gt;, but the short version is that I've accepted a job at a Swedish startup and will be moving there in March. It's not full time, so I'll continue to have time for Perl 6 development. They know about and, happily, are supportive of my involvement in Perl 6 and my continued attendance of Perl conferences.&lt;/p&gt;&lt;p&gt;I spent a weekend in Prague on the way home. I did it by train rather than flying, which was enjoyable. It snowed almost my entire time in Prague, and I caught a cold in the following week, but it was kinda worth it to wander around this beautiful city. Didn't bother studying Czech at all, and sorta got by with speaking Slovak, though some folks heard me speak and immediately concluded English would be easier. :-) Somehow it kinda felt like I was back somewhere I belonged, even though I'd never been there before. I love central Europe, and excited as I am about Sweden, I know I'll miss this part of the world a lot.&lt;/p&gt;&lt;p&gt;Anyway, I eased back into some work in January, but mostly took it quite easy. The happy result is that, come February, I'm finding myself recharged and ready to dig back into things again. I got some nice commits done to Rakudo yesterday, and today I meant to, but instead participated on an interesting thread on p6l and did some other useful meta stuff (like this post). Tomorrow should have plenty of hacking time though, and I'm looking forward to it. I also have a couple of blog posts to do about Vienna.pm-funded Rakudo Days I did in December, but never got around to writing up; thankfully I did make notes on what I did on them. :-) My main focuses from here on will be on:&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Continuing to get Rakudo's ng branch into shape - we'll make it master soon. A lot is missing, but things are going back fast and often very neatly. It's easy to focus on what it doesn't yet do that master does, but it has many things right that master does not - now including laziness!&lt;/li&gt;&lt;li&gt;Finishing up my signatures grant. I really, really want to do that within the next couple of weeks.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Anyway, that's what's been up with me. If you take away anything, it's that you may not realize how much you need a break from something until you take it, and if it's not the only thing putting food on the table, then it's probably better to take the needed amount of break and come back revitalized. I guess the other option is to dig back in regardless, but I suspect that's the path to burnout, something I'm quite keen to avoid.&lt;/p&gt;&lt;p&gt;More technical blabbering here soon. :-)&lt;/p&gt;</description>
	<pubDate>Sat, 06 Feb 2010 00:31:49 +0000</pubDate>
</item>
<item>
	<title>Carl Masak: Blast from the past: E02</title>
	<guid>http://use.perl.org/~masak/journal/40159?from=rss</guid>
	<link>http://use.perl.org/~masak/journal/40159?from=rss</link>
	<description>&lt;p&gt;SF took &lt;a href=&quot;http://irclog.perlgeek.de/perl6/2010-02-03#i_1954377&quot;&gt;my challenge&lt;/a&gt; to heart and started producing a &quot;modern Perl 6&quot; version of the example code in &lt;a href=&quot;http://dev.perl.org/perl6/doc/design/exe/E02.html&quot;&gt;E02&lt;/a&gt;. His thought process can be seen &lt;a href=&quot;http://lastofthecarelessmen.blogspot.com/2010/02/binary-tree.html&quot;&gt;here&lt;/a&gt;, and &lt;a href=&quot;http://lastofthecarelessmen.blogspot.com/2010/02/binary-tree-almost-complete-script.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;After being a bystander for a few hours, I coulndn't restrain myself anymore: I produced &lt;a href=&quot;http://gist.github.com/294621&quot;&gt;my own version&lt;/a&gt;. I should say at once that it's quite different from SF's: while he keeps close to the original &lt;a href=&quot;http://dev.perl.org/perl6/doc/design/exe/E02.html&quot;&gt;E02&lt;/a&gt; (which, in turn, sets out to prove that Perl 6 is/was not very different from Perl 5), my version is a bit more liberal in its interpretation. I do mix in some of my personal preferences into it. Some examples:&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;We don't do &lt;code&gt;$ARGS prompts(&quot;Search? &quot;)&lt;/code&gt; anymore, but there's a nice &lt;code&gt;&amp;amp;prompt&lt;/code&gt; function which I used instead, together with a &lt;code&gt;while&lt;/code&gt; loop.&lt;/li&gt;&lt;li&gt;The &lt;code&gt;&amp;amp;show&lt;/code&gt; function now uses &lt;code&gt;gather/take&lt;/code&gt;, rather than printing directly.&lt;/li&gt;&lt;li&gt;Also, I avoided the statement-modifying mess from the original E02 &lt;code&gt;&amp;amp;show&lt;/code&gt; code.&lt;/li&gt;&lt;li&gt;Also, E02's &lt;code&gt;&amp;amp;show&lt;/code&gt; makes a point of using a slurpy &lt;code&gt;@_&lt;/code&gt; rather than naming the paramters. I don't. (Neither does SF.)&lt;/li&gt;&lt;li&gt;It just makes sense to use a &lt;code&gt;given/when&lt;/code&gt; construct in the &lt;code&gt;&amp;amp;insert&lt;/code&gt; function. To its credit, E02 tantalizingly hints of it, but then does a MIB mind-wipe. (You don't recall that bit? Oh well...)&lt;/li&gt;&lt;li&gt;In the same function, E02 puts &lt;code&gt;undef&lt;/code&gt; to initiate the child nodes to some empty value. Both SF and I independently realized that just any undefined value won't work if &lt;code&gt;&amp;amp;insert&lt;/code&gt; is to have &lt;code&gt;%tree&lt;/code&gt; in the signature, because &lt;code&gt;%tree&lt;/code&gt; only binds to an &lt;code&gt;Associative&lt;/code&gt; value. SF solved it by putting &lt;code&gt;Hash&lt;/code&gt; (an undefined &lt;code&gt;Hash&lt;/code&gt; type object) in the child nodes, and changed it to &lt;code&gt;Hash.new&lt;/code&gt; in the later version. I used &lt;code&gt;{}&lt;/code&gt;, which should be equivalent to &lt;code&gt;Hash.new&lt;/code&gt;, but IMHO more idiomatic.&lt;/li&gt;&lt;li&gt;The whole traits business hadn't solidified in 2002, but I believe that the end result is both more realiable, more useful, and prettier. You'll have to judge for yourself.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I believe rewriting the exigeses in modern form is a very worthy activity. I hope we'll see more of that. Perl 6 suffers a bit from stale, outdated documentation, and having these in new versions would be valuable.&lt;/p&gt;&lt;p&gt;It's also a very interesting &lt;em&gt;historical&lt;/em&gt; activity to read the old apocalypses and exigeses, as I increasingly find. Perl 6 has come a long, long way since 2001.&lt;/p&gt;</description>
	<pubDate>Thu, 04 Feb 2010 14:47:06 +0000</pubDate>
</item>
<item>
	<title>Herbert Breunung: [Help] Diploma, Pills and enlarge your Perl</title>
	<guid>http://use.perl.org/~perl6doc/journal/40149?from=rss</guid>
	<link>http://use.perl.org/~perl6doc/journal/40149?from=rss</link>
	<description>Yes my November edits are on halt so I gave the &lt;a href=&quot;http://www.perlfoundation.org/perl6/index.cgi?perl_6&quot;&gt;TPF Perl 6&lt;/a&gt; wiki some love. Repeatedly that Wiki gets spammed. Unfornunately i didn't found the admin, so had to deleted all spam by hand. If anybody reading that, please help to tighten this socialtext instalation.</description>
	<pubDate>Mon, 01 Feb 2010 23:54:29 +0000</pubDate>
</item>
<item>
	<title>perl6.announce: Announce: Rakudo Perl 6 Development Release #25 (&quot;Minneapolis&quot;) by Patrick R. Michaud</title>
	<guid>http://www.nntp.perl.org/group/perl.perl6.announce/2010/02/msg615.html</guid>
	<link>http://www.nntp.perl.org/group/perl.perl6.announce/2010/02/msg615.html</link>
	<description>[This notice is going out a bit late; the release was indeed&lt;br /&gt;produced on time, but I was delayed in sending out this notice.&lt;br /&gt;With apologies for the delay...  --Pm]&lt;br /&gt;&lt;br /&gt;On behalf of the Rakudo development team, I'm pleased to announce the&lt;br /&gt;January 2010 development release of Rakudo Perl #25 &amp;quot;Minneapolis&amp;quot;.&lt;br /&gt;Rakudo is an implementation of Perl 6 on the Parrot Virtual Machine&lt;br /&gt;(see http://www.parrot.org).  The tarball for the January 2010 release&lt;br /&gt;is available from http://github.com/rakudo/rakudo/downloads .&lt;br /&gt;&lt;br /&gt;Rakudo Perl follows a monthly release cycle, with each release &lt;br /&gt;code named after a Perl Mongers group.  The January 2010 release &lt;br /&gt;is code named &amp;quot;Minneapolis&amp;quot; for Minneapolis.pm, hosts of the annual &lt;br /&gt;Frozen Perl Workshop [1].  In 2009 the Frozen Perl Workshop featured a &lt;br /&gt;one-day hackathon for Perl 6 and Rakudo development, which ultimately &lt;br /&gt;informed the design and implementation of the current build system.&lt;br /&gt;(The 2010 Frozen Perl Workshop will be on February 6, 2010, for those&lt;br /&gt;interested in attending.)&lt;br /&gt;&lt;br /&gt;Shortly after the October 2009 (#22) release, the Rakudo team began a new&lt;br /&gt;branch of Rakudo development (&amp;quot;ng&amp;quot;) that refactors the grammar to much more&lt;br /&gt;closely align with STD.pm as well as update some core features that have been&lt;br /&gt;difficult to achieve in the master branch [2, 3].  We had planned for&lt;br /&gt;this release to be created from the new branch, but holiday vacations&lt;br /&gt;and other factors conspired against us.  This is absolutely the final &lt;br /&gt;release from the old development branch; we expect to make the new branch &lt;br /&gt;the official &amp;quot;master&amp;quot; branch shortly after this release.&lt;br /&gt;&lt;br /&gt;This release of Rakudo requires Parrot 2.0.0.  One must still&lt;br /&gt;perform &amp;quot;make install&amp;quot; in the Rakudo directory before the &amp;quot;perl6&amp;quot;&lt;br /&gt;executable will run anywhere other than the Rakudo build directory.&lt;br /&gt;For the latest information on building and using Rakudo Perl, see the&lt;br /&gt;README file section titled &amp;quot;Building and invoking Rakudo&amp;quot;.&lt;br /&gt;&lt;br /&gt;Some of the specific changes and improvements occuring with this&lt;br /&gt;release include:&lt;br /&gt;&lt;br /&gt;* Rakudo is now passing 31,957 spectests, or 85.7% of the available&lt;br /&gt;  test suite.  This is roughly the same level as the December 2009&lt;br /&gt;  release (because most effort has taken place in the &amp;quot;ng&amp;quot; branch&lt;br /&gt;  as described above).&lt;br /&gt;&lt;br /&gt;* Rakudo's calling conventions have been updated to match changes&lt;br /&gt;  in Parrot 2.0.0's calling and context structures.&lt;br /&gt;&lt;br /&gt;The Perl 6 language specification is still in flux. Please take note of the&lt;br /&gt;following changes, which might affect your existing programs. In the next&lt;br /&gt;release of Rakudo, the deprecated features will likely be gone.&lt;br /&gt;&lt;br /&gt;* The root of the object hierarchy has been changed from 'Object' to 'Mu'.&lt;br /&gt;  The type 'Object' goes away.&lt;br /&gt;&lt;br /&gt;* The term 'undef' is gone. You can replace it with other constructs,&lt;br /&gt;  depending on context:&lt;br /&gt;    - 'Nil' is undefined in item context, and the empty list in list context&lt;br /&gt;    - 'Mu' is the most general undefined value which does not flatten in list&lt;br /&gt;      context&lt;br /&gt;    - as a smart matching target, you can replace '$obj ~~ undef'&lt;br /&gt;      by '$obj ~~ *.notdef'&lt;br /&gt;&lt;br /&gt;* Builtin classes will derive from 'Cool' (which itself derives from 'Any').&lt;br /&gt;  Most of the builtin methods on these classes will be defined in the&lt;br /&gt;  'Cool' class instead of 'Any'.  See Synopsis 2 for more details.&lt;br /&gt;&lt;br /&gt;* Starting with the next release, we will likely switch to using&lt;br /&gt;  &amp;quot;YYYY.MM&amp;quot; instead of &amp;quot;YYYY-MM&amp;quot; (dot instead of hyphen) as release &lt;br /&gt;  identifiers.  This is intended to simplify building and packaging&lt;br /&gt;  for other distribution systems.&lt;br /&gt;&lt;br /&gt;The development team thanks all of our contributors and sponsors for&lt;br /&gt;making Rakudo Perl possible.  If you would like to contribute,&lt;br /&gt;see http://rakudo.org/how-to-help , ask on the perl6-compiler@perl.org&lt;br /&gt;mailing list, or ask on IRC #perl6 on freenode.&lt;br /&gt;&lt;br /&gt;The next release of Rakudo (#26) is scheduled for February 18, 2010.&lt;br /&gt;A list of the other planned release dates and codenames for 2010 is&lt;br /&gt;available in the &amp;quot;docs/release_guide.pod&amp;quot; file.  In general, Rakudo&lt;br /&gt;development releases are scheduled to occur two days after each&lt;br /&gt;Parrot monthly release.  Parrot releases the third Tuesday of each month.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;br /&gt;&lt;br /&gt;[1] http://www.frozen-perl.org/&lt;br /&gt;[2] http://use.perl.org/~pmichaud/journal/39779&lt;br /&gt;[3] http://use.perl.org/~pmichaud/journal/39874&lt;br /&gt;</description>
	<pubDate>Mon, 01 Feb 2010 09:41:19 +0000</pubDate>
</item>
<item>
	<title>chromatic: Perl 6 Design Minutes for 27 January 2010</title>
	<guid>http://use.perl.org/~chromatic/journal/40144?from=rss</guid>
	<link>http://use.perl.org/~chromatic/journal/40144?from=rss</link>
	<description>&lt;p&gt;The Perl 6 design team met by phone on 27 January 2010.  Larry, Allison, Patrick, and chromatic attended.&lt;/p&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;tweaked definition of when a series operator is considered infinite&lt;/li&gt;&lt;li&gt;nailed down more list assignment semantics with respect to interators&lt;/li&gt;&lt;li&gt;clarified how &lt;code&gt;($a, $b, @a) = 1..*&lt;/code&gt; works&lt;/li&gt;&lt;li&gt; &lt;code&gt;KeyWeight&lt;/code&gt; deletion criterion kept consistent with other &lt;code&gt;KeyHash&lt;/code&gt; types&lt;/li&gt;&lt;li&gt;negative keyweights are allowed to fail at pick time&lt;/li&gt;&lt;li&gt;&quot;mostly eager&quot; now assumes unknown closure generators are probably infinite&lt;/li&gt;&lt;li&gt;random whackage on &lt;code&gt;List&lt;/code&gt;, &lt;code&gt;Seq&lt;/code&gt;, &lt;code&gt;Parcel&lt;/code&gt;, &lt;code&gt;Capture&lt;/code&gt;, &lt;code&gt;Iterator&lt;/code&gt;, &lt;code&gt;Nil&lt;/code&gt; etc.&lt;/li&gt;&lt;li&gt; &lt;code&gt;List&lt;/code&gt; is now simply the iterator role, and doesn't do &lt;code&gt;Positional&lt;/code&gt; &lt;/li&gt;&lt;li&gt; &lt;code&gt;Seq&lt;/code&gt; takes over &lt;code&gt;Positional&lt;/code&gt; duties for reified (or reifiable) value lists&lt;/li&gt;&lt;li&gt;think of &lt;code&gt;Seq&lt;/code&gt; now as a constant &lt;code&gt;Array&lt;/code&gt; (but also lazy like &lt;code&gt;Array&lt;/code&gt;)&lt;/li&gt;&lt;li&gt; &lt;code&gt;Iterable&lt;/code&gt; now means you can ask for an iterator, but doesn't do &lt;code&gt;List&lt;/code&gt; &lt;/li&gt;&lt;li&gt; &lt;code&gt;Array&lt;/code&gt;, &lt;code&gt;Seq&lt;/code&gt;, etc do &lt;code&gt;Iterable&lt;/code&gt;, but not &lt;code&gt;List&lt;/code&gt; &lt;/li&gt;&lt;li&gt;only actual iterators do &lt;code&gt;List&lt;/code&gt; &lt;/li&gt;&lt;li&gt; &lt;code&gt;Nil&lt;/code&gt; is defined as a suitable sentinel for both list and slice iterators&lt;/li&gt;&lt;li&gt;continued to rethink that with pmichaud++ et al&lt;/li&gt;&lt;li&gt;we'll probably end up with an &lt;code&gt;EMPTY&lt;/code&gt; special exception object to be the iterator sentinal&lt;/li&gt;&lt;li&gt;proposed an &lt;code&gt;E&lt;/code&gt; operator to go with it to make testing for &lt;code&gt;EMPTY&lt;/code&gt; across multiple iterators very fast&lt;/li&gt;&lt;li&gt;other than that, mostly just bug whacking, no major refactors&lt;/li&gt;&lt;li&gt;still thinking about doing real LTM for STD&lt;/li&gt;&lt;li&gt;did lazify &lt;code&gt;Cursor&lt;/code&gt;'s fnum-&amp;gt;fate translations for shorter LTM candidates in preparation for smarter LTM&lt;/li&gt;&lt;li&gt;we don't need special objects for the items that get matches&lt;/li&gt;&lt;li&gt;we do need to think more about the hyper cases&lt;/li&gt;&lt;li&gt;how to do list processing using balanced trees of delegated sub refs&lt;/li&gt;&lt;li&gt;don't want to build in serial assumptions where we don't need them&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;made the Rakudo #25 release last week&lt;/li&gt;&lt;li&gt;it was much easier to make the release than explain what we were planning to do instead&lt;/li&gt;&lt;li&gt;also working on iterators and lists&lt;/li&gt;&lt;li&gt;NG branch is blocking on that&lt;/li&gt;&lt;li&gt;worked on the design in my head for three weeks&lt;/li&gt;&lt;li&gt;realized that we were doing iterators completely wrong the other night&lt;/li&gt;&lt;li&gt;Larry's making some useful changes to the spec in response&lt;/li&gt;&lt;li&gt;there are still some unclear spots in the spec&lt;/li&gt;&lt;li&gt;we need an implementation to figure those out&lt;/li&gt;&lt;li&gt;my biggest question is the relationship between &lt;code&gt;List&lt;/code&gt;, &lt;code&gt;Parcel&lt;/code&gt;, &lt;code&gt;Itertor&lt;/code&gt;, and array&lt;/li&gt;&lt;li&gt;as of this morning, I think I have it&lt;/li&gt;&lt;li&gt;that code seems to be working &lt;em&gt;and&lt;/em&gt; efficient&lt;/li&gt;&lt;li&gt;so far it's working well&lt;/li&gt;&lt;li&gt;continuing with that&lt;/li&gt;&lt;li&gt;wrote a very short range iterator prototype that colomon has used&lt;/li&gt;&lt;li&gt;also write a &lt;code&gt;map&lt;/code&gt; iterator that works&lt;/li&gt;&lt;li&gt;coming up with examples for the &lt;code&gt;zip&lt;/code&gt; operator was nice&lt;/li&gt;&lt;li&gt;good ideas for what we need to be able to do&lt;/li&gt;&lt;li&gt;objects that can iterate have a &lt;code&gt;.iterator()&lt;/code&gt; method&lt;/li&gt;&lt;li&gt;to interpolate that into a list, &lt;code&gt;.list()&lt;/code&gt; returns a flat &lt;code&gt;Parcel&lt;/code&gt; for that iterator&lt;/li&gt;&lt;li&gt; &lt;code&gt;Parcel&lt;/code&gt;s know how to generate &lt;code&gt;Iterator&lt;/code&gt;s&lt;/li&gt;&lt;li&gt;those know how to handle &lt;code&gt;Iterator&lt;/code&gt;s of &lt;code&gt;Iterator&lt;/code&gt;s&lt;/li&gt;&lt;li&gt;I suspect that's how we do hyper iteration&lt;/li&gt;&lt;li&gt;change &lt;code&gt;Parcel&lt;/code&gt;s to understand that&lt;/li&gt;&lt;li&gt;adding pieces back into the ng branch&lt;/li&gt;&lt;li&gt;next I have to fix slurpy parameters&lt;/li&gt;&lt;li&gt;many of our builtins need that&lt;/li&gt;&lt;li&gt;need to figure out Jonathan's code to do that&lt;/li&gt;&lt;li&gt;after that, I'll do arrays&lt;/li&gt;&lt;li&gt;that should remove the blockers on the ng branch&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on Pynie&lt;/li&gt;&lt;li&gt;Francois has helped greatly to update it for Plumage&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;still working on the TT #389 fix&lt;/li&gt;&lt;li&gt;think I have the right design, just need time to implement it&lt;/li&gt;&lt;li&gt;working on a potential new time for #parrotsketch&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;thinking about hackathons&lt;/li&gt;&lt;li&gt;would be nice to have a Rakudo hackathon at YAPC::NA&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Parrot will come up; didn't it come up about half the time last year?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;it was all Parrot&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;you'll have an influx of Rakudo interest two months after Rakudo Star&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;probably will have one before then&lt;/li&gt;&lt;li&gt;but can tell people &quot;Go to YAPC; we'll show you how to help in person there&quot;&lt;/li&gt;&lt;/ul&gt;</description>
	<pubDate>Fri, 29 Jan 2010 21:00:38 +0000</pubDate>
</item>
<item>
	<title>Herbert Breunung: first new november articles, please review it</title>
	<guid>http://use.perl.org/~perl6doc/journal/40143?from=rss</guid>
	<link>http://use.perl.org/~perl6doc/journal/40143?from=rss</link>
	<description>According to my &lt;a href=&quot;http://november-wiki.org/view/About&quot;&gt;modus operandi&lt;/a&gt; I wrote the first 2 articles in the november wiki about &lt;a href=&quot;http://november-wiki.org/view/Pugs&quot;&gt;Pugs&lt;/a&gt; and &lt;a href=&quot;http://november-wiki.org/view/Parrot&quot;&gt;Parrot&lt;/a&gt;. Next will follow but please participate, get an account from masak (we have a channel at irc://irc.freenode.org/november-wiki) or write me your suggestion to lichtkind@cpan.org and i wrap text around it.</description>
	<pubDate>Fri, 29 Jan 2010 19:44:05 +0000</pubDate>
</item>
<item>
	<title>Carl Masak: Mildew, Sprixel, Vill: In praise of the alternatives</title>
	<guid>http://use.perl.org/~masak/journal/40141?from=rss</guid>
	<link>http://use.perl.org/~masak/journal/40141?from=rss</link>
	<description>&lt;p&gt;Not all of Perl 6 is Rakudo. Well, when I use Perl 6, it is. But I'm hoping 2010 will change that. We have a few other implementations out there, which fall in the &quot;small but promising&quot; category.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Mildew&lt;/b&gt; &lt;/p&gt;&lt;p&gt;From the &lt;a href=&quot;http://svn.pugscode.org/pugs/v6/mildew/README&quot;&gt;README&lt;/a&gt;:&lt;/p&gt;&lt;dl&gt; &lt;dd&gt;Mildew is an experimental implemention of Perl 6, written mainly in Perl
5.  It is named in the tradition of 'yeast', 'slime' and 'mold', which
were/are related projects.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;I can't say I've ever understood the idea behind naming projects after icky things, but I like the projects as such. They seem to generate a kind of &quot;basic research&quot; which strengthens the foundations of Perl 6. The decade-old project has always been about attacking the enormously big task of implementing Perl 6 from different angles &amp;#8212; and I like the angle pmurias++ and ruoso++ are taking.&lt;/p&gt;&lt;dl&gt; &lt;dd&gt;Mildew uses the 'viv' parser and the STD.pm grammar to convert Perl 6
source code into an Abstract Syntax Tree.  An AST is a data structure
that describes what the Perl 6 program is meant to do.  Mildew contains
various experimental backends selected by the -B and -C switches to
export or to execute the code in the AST.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;Mildew targets both SMOP (written mostly in C) and the Google V8 JavaScript compiler.&lt;/p&gt;&lt;p&gt;

&lt;b&gt;Sprixel&lt;/b&gt;

&lt;/p&gt;&lt;p&gt;From the &lt;a href=&quot;http://svn.pugscode.org/pugs/src/perl6/sprixel/README&quot;&gt;README&lt;/a&gt;:&lt;/p&gt;&lt;dl&gt; &lt;dd&gt;sprixel (anagram of perlsix): viv and STD.pm parse Perl 6 source,
emitting an Abstract Syntax Tree in YAML, then sprixel walks the
AST using its trampolined, stackless, continuation passing style
interpreter written in JavaScript and executed by Google's V8
JavaScript compiler and runtime engine.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;I know diakopter++ is playing around with both JavaScript and C&amp;#9839; implementations of Perl 6 rule engines. That is also an area which excites me, and where I'm glad people are making headway.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Vill&lt;/b&gt; &lt;/p&gt;&lt;p&gt;From the &lt;a href=&quot;http://svn.pugscode.org/pugs/src/perl6/vill/README&quot;&gt;README&lt;/a&gt;:&lt;/p&gt;&lt;dl&gt; &lt;dd&gt;'vill' is the ugly temporary name of this project that connects 'viv' as
Perl 6 front end to LLVM as code generating back end.  It sounds too
much like 'vile', or mock German 'will', but it fits.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;Heh.&lt;/p&gt;&lt;dl&gt; &lt;dd&gt;Unlike other Perl
implementations such as Pugs, Rakudo, Sprixel and Mildew-js, 'vill'
produces native executable files. [...]&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;Whoa! That's potentially &lt;em&gt;very&lt;/em&gt; attractive.&lt;/p&gt;&lt;dl&gt; &lt;dd&gt;The slowest part of 'vill' is 'viv', because that runs as a separate
Perl 5 child process.  The medium term plan will be to use the STD.pm
grammar, but replace the 'viv' parser with a new one to be written in C.
[...] If the dependency on 'viv' can be removed, the ugly 'vill' name will no
longer be appropriate, and it will be time to think of a better one
[...]&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;I'm actually hoping I might be able to help with the C-based parser.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Conclusion&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Rakudo is the implementation that shows up on the radar of most outsiders right now. (And with good reason.) But much exciting work is going on in the background, with implementations like mildew, sprixel and vill.&lt;/p&gt;&lt;p&gt;I'm sure this will come off as almost self-evident, but I'll say it anyway: the moment an alternative implementation will cross a threshold into the area of the &lt;em&gt;really&lt;/em&gt; interesting, is when it provides a significant chunk of Rakudo's functionality (which is saying quite a lot), together with some feature that Rakudo doesn't have. Given Rakudo/Parrot's current performance, the most obvious feature would be speed. But it might also be something else, such as a bridge to Perl 5, or a very solid metamodel. The more ground-shaking the new feature, the less important will be the delta between the alternative implementation and Rakudo.&lt;/p&gt;&lt;p&gt;At the very least, I think one of the above implementations will pass through the Mach 1 barrier in 2010, and attract a serious user base, and more developers. I'd love for Rakudo (and Pugs) to have some company up there among the &quot;big&quot; implementations.&lt;/p&gt;&lt;p&gt;Exciting times!&lt;/p&gt;</description>
	<pubDate>Fri, 29 Jan 2010 13:54:30 +0000</pubDate>
</item>
<item>
	<title>chromatic: Perl 6 Design Minutes for 20 January 2010</title>
	<guid>http://use.perl.org/~chromatic/journal/40137?from=rss</guid>
	<link>http://use.perl.org/~chromatic/journal/40137?from=rss</link>
	<description>&lt;p&gt;The Perl 6 design team meet by phone on 20 January 2010.  Allison, Patrick, Will, and chromatic attended.&lt;/p&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;did distro testing on Ubuntu and the Mac&lt;/li&gt;&lt;li&gt;set up a Hardy chroot; Parrot works just fine there&lt;/li&gt;&lt;li&gt;have a feeling we missed some deprecations, but we have a lot in there&lt;/li&gt;&lt;li&gt;enough to work on for three months&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I added the STRING idea, to give us the possibility of the value semantics change&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;less stressful to have three months at a time&lt;/li&gt;&lt;li&gt;otherwise working on class assignments&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;family illness knocked me out for a few days&lt;/li&gt;&lt;li&gt;we'll postspone the January release for up to a week&lt;/li&gt;&lt;li&gt;going to make the Rakudo-ng branch the master branch&lt;/li&gt;&lt;li&gt;that won't take more than a week&lt;/li&gt;&lt;li&gt;we'll release by Thursday of next week&lt;/li&gt;&lt;li&gt;also need to make the -ng branch build with Parrot 2.0.0&lt;/li&gt;&lt;li&gt;need to merge some outstanding patches to make that work&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;are you going to stick with 2.0.0?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;unless we need a change in Parrot that we can't live without, yes&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Will:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;we could do a point release if you need one&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;that's up to Parrot&lt;/li&gt;&lt;li&gt;from Rakudo's perspective, that's not terribly important&lt;/li&gt;&lt;li&gt;we're shifting everything around for the -ng branch&lt;/li&gt;&lt;li&gt;we'll definitely stick the February release to Parrot 2.1&lt;/li&gt;&lt;li&gt;I'll post messages to the list about the new release plan shortly&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Will:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on the one_make branch in Parrot&lt;/li&gt;&lt;li&gt;trying to mark dependencies properly in a single &lt;em&gt;Makefile&lt;/em&gt; &lt;/li&gt;&lt;li&gt;get some of that out of the configure system&lt;/li&gt;&lt;li&gt;we should be able to merge to trunk in a day or two&lt;/li&gt;&lt;li&gt;there's still more work to do, but we're at a merge point soon&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;released Parrot 2.0.0 yesterday&lt;/li&gt;&lt;li&gt;sending out release announcements soon, but the code is out&lt;/li&gt;&lt;li&gt;Stephen Weeks helped me fix up PGE not to fetch methods from namespaces&lt;/li&gt;&lt;li&gt;should be able to merge the TT #389 fix branch to trunk very soon&lt;/li&gt;&lt;li&gt;will take a look at other Rakudo blockers after that&lt;/li&gt;&lt;/ul&gt;</description>
	<pubDate>Thu, 28 Jan 2010 00:10:27 +0000</pubDate>
</item>
<item>
	<title>chromatic: Perl 6 Design Minutes for 13 January 2010</title>
	<guid>http://use.perl.org/~chromatic/journal/40132?from=rss</guid>
	<link>http://use.perl.org/~chromatic/journal/40132?from=rss</link>
	<description>&lt;p&gt;The Perl 6 design team met by phone on 13 January 2010.  Larry, Patrick, and chromatic attended.&lt;/p&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;made constant declarations more consistent with type declaration syntax&lt;/li&gt;&lt;li&gt;removed various spec fossils regarding the old &lt;code&gt;:by&lt;/code&gt; modifier&lt;/li&gt;&lt;li&gt;reworked &lt;code&gt;KeyHash&lt;/code&gt; docs to make the semantics clearer&lt;/li&gt;&lt;li&gt;refactored regex AST methods out of Cursor&lt;/li&gt;&lt;li&gt;symbol table files are now compiled into their own subdirectory&lt;/li&gt;&lt;li&gt;STD can now use modules defined in the test suite&lt;/li&gt;&lt;li&gt;testing STD against the test suite now produces many fewer warnings about missing modules&lt;/li&gt;&lt;li&gt;STD now specifically disallows forms like &lt;code&gt;:!foo(0)&lt;/code&gt; and &lt;code&gt;:5bar[42]&lt;/code&gt; that supply unexpected args&lt;/li&gt;&lt;li&gt;STD now tracks 'of' types in declarations and prevents spurious 'of' types&lt;/li&gt;&lt;li&gt;STD treats anon enums, subsets, and constants etc more consistently&lt;/li&gt;&lt;li&gt;removed old type slot from constant declarator, now uses more standard type slots&lt;/li&gt;&lt;li&gt;random bug fixing&lt;/li&gt;&lt;li&gt;errors with expectation lists are less noisy, no longer reporting lookaheads and whitespace&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;lots of thinking&lt;/li&gt;&lt;li&gt;looking at Rakudo-ng today&lt;/li&gt;&lt;li&gt;plan to do lists tomorrow&lt;/li&gt;&lt;li&gt;want to get those out of the way&lt;/li&gt;&lt;li&gt;Jonathan and I think we can merge it for the January release&lt;/li&gt;&lt;li&gt;should know more after the weekend&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on TT #389&lt;/li&gt;&lt;li&gt; &lt;code&gt;:method&lt;/code&gt; should not add entries to NameSpace&lt;/li&gt;&lt;li&gt;PGE/TGE have problems&lt;/li&gt;&lt;li&gt;will not land for 2.0&lt;/li&gt;&lt;li&gt;may add (and immediately deprecate) an experimental op to help migration&lt;/li&gt;&lt;/ul&gt;</description>
	<pubDate>Tue, 26 Jan 2010 22:54:19 +0000</pubDate>
</item>
<item>
	<title>Herbert Breunung: November is over, i don't care</title>
	<guid>http://use.perl.org/~perl6doc/journal/40124?from=rss</guid>
	<link>http://use.perl.org/~perl6doc/journal/40124?from=rss</link>
	<description>I'm back, english-hackin on &lt;a href=&quot;http://november-wiki.org/&quot;&gt;November&lt;/a&gt;. it was planned to make november the month to push november foreward, but maybe this will happen now in february. currently just pushing some content around, to make smaller, better readable pages. The content will become also better linkable.
&lt;br /&gt; &lt;br /&gt;
I'm delighted that viklung and masak solved the more pressing half of the issues i filled in the november tracker, but 5 min ago I filed a new one.
&lt;br /&gt; &lt;br /&gt;
as i currently preparing an article about the upcoming rakudo star, its easier for me to fill more conent in the p6 related wikis.</description>
	<pubDate>Sun, 24 Jan 2010 00:24:49 +0000</pubDate>
</item>
<item>
	<title>chromatic: Perl 6 Design Minutes for 06 January 2010</title>
	<guid>http://use.perl.org/~chromatic/journal/40123?from=rss</guid>
	<link>http://use.perl.org/~chromatic/journal/40123?from=rss</link>
	<description>&lt;p&gt;The Perl 6 design team met by phone on 06 January 2010.  Larry, Allison, Patrick, Will, and chromatic attended.&lt;/p&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;in Spec Land, renamed &lt;code&gt;p{}&lt;/code&gt; to &lt;code&gt;qp{}&lt;/code&gt; to avoid using up another common single letter&lt;/li&gt;&lt;li&gt;bare &lt;code&gt;say&lt;/code&gt;/&lt;code&gt;print&lt;/code&gt; is now just a warning&lt;/li&gt;&lt;li&gt;Carl M&amp;#228;sak dug up fossilized restriction on hash literals, which I removed&lt;/li&gt;&lt;li&gt;since the insides of blocks are now parsed as statements, there is no longer an inconsistency in line-ending curlies&lt;/li&gt;&lt;li&gt;refined the picking vs grabbing semantics with respect to immutable vs mutable bags and such&lt;/li&gt;&lt;li&gt;to avoid legacy confusion, renamed &lt;code&gt;break&lt;/code&gt;/&lt;code&gt;continue&lt;/code&gt; to &lt;code&gt;succeed&lt;/code&gt;/&lt;code&gt;proceed&lt;/code&gt; &lt;/li&gt;&lt;li&gt;clarified that an implicit &lt;code&gt;succeed&lt;/code&gt; returns the value of the whole &lt;code&gt;when&lt;/code&gt; block&lt;/li&gt;&lt;li&gt;it is not somehow magically inserted around the last statement&lt;/li&gt;&lt;li&gt;renamed &lt;code&gt;true&lt;/code&gt; to &lt;code&gt;so&lt;/code&gt; to avoid confusion of the predicate with the &lt;code&gt;True&lt;/code&gt; enum value&lt;/li&gt;&lt;li&gt;at the suggestion of moritz++, split &lt;code&gt;Any&lt;/code&gt; up into &lt;code&gt;Any&lt;/code&gt; and &lt;code&gt;Cool&lt;/code&gt; types&lt;/li&gt;&lt;li&gt; &lt;code&gt;Cool&lt;/code&gt; stands for Convenient OO Loopbacks, or any other acronym you'd like&lt;/li&gt;&lt;li&gt;the built-in types derived from &lt;code&gt;Cool&lt;/code&gt; are the ones that do Perlish dwimmy coercions&lt;/li&gt;&lt;li&gt;user types still derive from &lt;code&gt;Any&lt;/code&gt; by default, so aren't born with gazillions of methods&lt;/li&gt;&lt;li&gt;conjecturally, also keep &quot;last-resort&quot; multis in &lt;code&gt;Cool&lt;/code&gt; package&lt;/li&gt;&lt;li&gt;responded non-explosively to a potentially explosive rant/twitter&lt;/li&gt;&lt;li&gt;clarified various things in response&lt;/li&gt;&lt;li&gt;it is not necessary that all implementations be equally good at everything&lt;/li&gt;&lt;li&gt;there will be a minimal Perl 5ish grammar alongside STD that any VM can support as a well-behaved subset&lt;/li&gt;&lt;li&gt;it is also acceptable to support bug-for-bug compatibility with Perl 5&lt;/li&gt;&lt;li&gt;the language designer is neither omniscient nor omnipotent&lt;/li&gt;&lt;li&gt;the design process is therefore convergent on the part of all parties involved&lt;/li&gt;&lt;li&gt;the rate of convergence is an emergent property, and is to be forced&lt;/li&gt;&lt;li&gt;convergence is deemed to be positive as long as anyone is still working on Perl 6&lt;/li&gt;&lt;li&gt;the solidification of the spec is also part of the convergence, and depends on proven implementation&lt;/li&gt;&lt;li&gt;unproven parts of the spec are to be considered implicitly conjectural&lt;/li&gt;&lt;li&gt;as implementations converge on specs, we can throw out or delay parts of the spec that as yet unproven&lt;/li&gt;&lt;li&gt;everyone is allowed to panic &lt;em&gt;once&lt;/em&gt;.&lt;/li&gt;&lt;li&gt;on to implementation, found fencepost precedence error inside list prefix&lt;/li&gt;&lt;li&gt;moved the default initparse method from STD into Curso so other grammars don't have to define it&lt;/li&gt;&lt;li&gt;added quote modifier &lt;code&gt;:p&lt;/code&gt; (aka &lt;code&gt;:path&lt;/code&gt;) so we can form the &lt;code&gt;qp{}&lt;/code&gt; path literal&lt;/li&gt;&lt;li&gt;installed better warnings about bare &lt;code&gt;say&lt;/code&gt;/&lt;code&gt;print&lt;/code&gt; &lt;/li&gt;&lt;li&gt;generalized the &lt;code&gt;say&lt;/code&gt;/&lt;code&gt;print&lt;/code&gt; warning to anything a p5er might try that might be in p6 without the defaulting&lt;/li&gt;&lt;li&gt;STD and CORE now support recent renamings to &lt;code&gt;so&lt;/code&gt;, &lt;code&gt;succeed&lt;/code&gt;, and &lt;code&gt;proceed&lt;/code&gt; &lt;/li&gt;&lt;li&gt;no longer reports &quot;Bogus statement&quot; when &quot;Missing term&quot; is more accurate&lt;/li&gt;&lt;li&gt;now catches &lt;code&gt;/\b/&lt;/code&gt; and advises to use an appropriate p6 word boundary assertion instead&lt;/li&gt;&lt;li&gt;emits better message when an intended reduce is interpreted as composer&lt;/li&gt;&lt;li&gt;detects most attempts to use postfix after whitespace, and suggests omitting whitespace&lt;/li&gt;&lt;li&gt;now parses tick-less embedded comment syntax as line-end comment (but still warns for now)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;took the last couple of weeks off&lt;/li&gt;&lt;li&gt;keeping up with things, but not much writing code&lt;/li&gt;&lt;li&gt;read the S01 changes with great interest&lt;/li&gt;&lt;li&gt;glad to see them&lt;/li&gt;&lt;li&gt;answered some PGE questions for Carl&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;we've talked about them all along&lt;/li&gt;&lt;li&gt;they weren't written down in an obvious place&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Will:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on Parrot&lt;/li&gt;&lt;li&gt;trying to move as much out of the configure process into a &lt;em&gt;Makefile&lt;/em&gt; as possible&lt;/li&gt;&lt;li&gt;intended to improve the build&lt;/li&gt;&lt;li&gt;attempting to remove recursive makes&lt;/li&gt;&lt;li&gt;avoid unnecessary rebuilds&lt;/li&gt;&lt;li&gt;improve dependency tracking in the build&lt;/li&gt;&lt;li&gt;probably ready after 2.0&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I'm impressed&lt;/li&gt;&lt;li&gt;thanks for taking that on; we needed it&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on deprecation notices&lt;/li&gt;&lt;li&gt;we've talked about a lot of things over the past six months&lt;/li&gt;&lt;li&gt;not sure they're all in the file appropriately&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on bugfixes&lt;/li&gt;&lt;li&gt;also working on deprecations&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I intend to merge the ng branch before the January release&lt;/li&gt;&lt;li&gt;some people are antsy, but I have a lot of confidence&lt;/li&gt;&lt;li&gt;we'll probably pass about 70% of the test suite&lt;/li&gt;&lt;li&gt;it looks like a regression, but we have different features added now&lt;/li&gt;&lt;li&gt;lazy lists work, for example&lt;/li&gt;&lt;li&gt;lots of things fudged in the previous version work now&lt;/li&gt;&lt;/ul&gt;</description>
	<pubDate>Sat, 23 Jan 2010 00:12:46 +0000</pubDate>
</item>
<item>
	<title>Carl Masak: Code generation and stone soup</title>
	<guid>http://use.perl.org/~masak/journal/40122?from=rss</guid>
	<link>http://use.perl.org/~masak/journal/40122?from=rss</link>
	<description>&lt;p&gt;I don't know what kept me away from generating code for so long. Fear and prejudice, perhaps.&lt;/p&gt;&lt;p&gt;I've been trying it the last few days, and I have two things to say. First, it's like learning to program all over again. Remember that sense of power from the early days, when just picking up coding? &quot;Hey, I can program this piece of code to do whatever I want.&quot; Well, guess what? That feeling comes back when one starts down on the path to madn... erm, to code generation. Only it's stronger. &quot;Hey, I can program this piece of code to program &lt;em&gt;that&lt;/em&gt; piece of code to do whatever it wants!&quot; I think I've just discovered meta-hubris. Most likely, I'm not the first to do so.&lt;/p&gt;&lt;p&gt;Second, there's a flip-side to the feeling of power. That other feeling is how you feel when you knit your brows and wish that your neurons would line up a bit better so you could think more clearly about the problem at hand. Who would have thought, that feeling is also stronger when you're suddenly writing two different, entwined and related programs at the same time, in the same file. In my case, the knitted brows turn into an empty stare and a jaw left slackly agape, as I sit there wishing that I was better at context-switching between runloops.&lt;/p&gt;&lt;p&gt;Honestly, I think I expected &lt;code&gt;eval&lt;/code&gt; to be the source of much programmer confusion, but I have to confess that it seems I underestimated the vistas it opens up when you buy into the idea of generating exactly the piece of code you need for the task (from an AST, say), and then &lt;code&gt;eval&lt;/code&gt; it into a closure. That's what &lt;a href=&quot;http://en.wikipedia.org/wiki/Compiler#Back_end&quot;&gt;the back end of a compiler&lt;/a&gt; ends up doing, so maybe I shouldn't be so surprised that it's a versatile technique.&lt;/p&gt;&lt;p&gt;Lately, I've been in the business of squeezing every drop of juice out of the already implemented control flow constructs already implemented in Rakudo. I'm writing a p6regex&amp;#8594;p6 compiler, you see. (Yes, that's &lt;a href=&quot;http://masak.org/carl/bpw-2009-gge/talk.pdf&quot;&gt;a rather crazy notion&lt;/a&gt;; thanks for asking.) Along the way, I've often felt the need for not-yet-implemented control flow. This has led me to this hope-inducing maxim:&lt;/p&gt;&lt;p&gt; &lt;em&gt;Every type of control flow in programming languages is just convenient sugar for &lt;code&gt;if&lt;/code&gt; statements and &lt;code&gt;while&lt;/code&gt; loops.&lt;/em&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;if&lt;/code&gt;s and &lt;code&gt;while&lt;/code&gt;s are the stone soup to which all the rest of our control flow can be added as seasoning. &lt;code&gt;if&lt;/code&gt;s let you conditionally skip ahead in code, and &lt;code&gt;while&lt;/code&gt;s allow you to conditionally skip back. That's all you need.&lt;/p&gt;&lt;p&gt;Here are some examples.&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Switch statements are just sugar for chained &lt;code&gt;if&lt;/code&gt;/&lt;code&gt;elsif&lt;/code&gt;/&lt;code&gt;else&lt;/code&gt; statements. Even Perl 6's &lt;code&gt;given&lt;/code&gt;/&lt;code&gt;when&lt;/code&gt; constructs.&lt;/li&gt;&lt;li&gt;The variants &lt;code&gt;next&lt;/code&gt;, &lt;code&gt;last&lt;/code&gt; and &lt;code&gt;redo&lt;/code&gt;, either with or without a label to affect a less-than-innermost loop, can be desugared to sad boolean-ish variables, plus some &lt;code&gt;if&lt;/code&gt; statements to appropriately regulate the expression of the code inside the loop. (Yes, go ahead and twitch just thinking of it. That sugar is there for a reason.)&lt;/li&gt;&lt;li&gt;Subroutines and subroutine calls can be simulated with the appropriate use of a switch statement and an explicit &lt;a href=&quot;http://en.wikipedia.org/wiki/Call_stack&quot;&gt;call stack&lt;/a&gt; stored in an array variable.&lt;/li&gt;&lt;li&gt;Even exceptions, or more generally continuations, can be desugared in this way. As soon as you have total control of the call stack, you're free to save and rewind to some previous state to your heart's content.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Aside from the switch statements and unlabeled &lt;code&gt;next&lt;/code&gt; etc, which already work very well in Rakudo, I've been doing the whole list of desugarings in &lt;a href=&quot;http://github.com/masak/gge&quot;&gt;GGE&lt;/a&gt; (the regex compiler). The part with the continuations was especially fun. I needed them for backtracking, at least as long as the compiler was only an interpreter.&lt;/p&gt;&lt;p&gt;But then, during a fruitful discussion with diakopter++, I was told how to emulate (delimited) &lt;code&gt;goto&lt;/code&gt;s with a switch and a loop. The idea is quite obvious in retrospect: just keep the current 'label' in a variable, and switch on it in each iteration. Presto! I should have thought of that. I don't even need to &lt;a href=&quot;http://use.perl.org/~masak/journal/40087&quot;&gt;flee to PIR&lt;/a&gt; any more.&lt;/p&gt;&lt;p&gt;I took the idea and generalized it to delimited &lt;code&gt;gosub&lt;/code&gt;s: instead of keeping the current label in a scalar, keep it at the top of a stack. Define macro-like constructs to push to (&lt;code&gt;local-branch&lt;/code&gt;) and pop from (&lt;code&gt;local-return&lt;/code&gt;) the stack. Suddenly I don't need continuations as much.&lt;/p&gt;&lt;p&gt;Result: &lt;a href=&quot;http://gist.github.com/283799&quot;&gt;this&lt;/a&gt;. We send in the regex &lt;code&gt;/&amp;lt;[a..b]&amp;gt; | &amp;lt;[b..e]&amp;gt;/&lt;/code&gt; on the top line, along with the target string &lt;code&gt;c&lt;/code&gt; to match on. The program generates an AST, an anonymous subroutine which executes the regex in atomic Perl 6 operations, and finally a match object which indeed finds &lt;code&gt;c&lt;/code&gt; to be a match.&lt;/p&gt;&lt;p&gt; &lt;a href=&quot;http://gist.github.com/283928&quot;&gt;Here's&lt;/a&gt; a similar but slightly more involved example. And &lt;a href=&quot;http://gist.github.com/284959&quot;&gt;here's&lt;/a&gt; one doing captures and backreferences inside a quantified non-capturing group. Isn't that exquisite? (Ok, bad choice of word. Sorry.)&lt;/p&gt;&lt;p&gt;As I said, I wrote most of with a feeling of being not just in over my head, but of being in over my head &lt;em&gt;twice&lt;/em&gt;. I'm still a bit surprised it works. The runtime compilation seems to introduce a bit of a speed penalty, but (1) it's a one-time cost, since you can re-use the regex object, and (2) I told you it would be slow.&lt;/p&gt;&lt;p&gt;The code-generating work still resides only in a local branch on my computer. I'll push it to &lt;code&gt;master&lt;/code&gt; as soon as I'm done bringing GGE back to its former capabilities. (&lt;b&gt;Update 2010-01-24:&lt;/b&gt; Done, and &lt;a href=&quot;http://github.com/masak/gge/commit/f9e2d4a3d33533270a54a523277d0b9bebd995cc&quot;&gt;done&lt;/a&gt;.)&lt;/p&gt;&lt;p&gt;Code writing code. What a concept!&lt;/p&gt;</description>
	<pubDate>Fri, 22 Jan 2010 16:41:30 +0000</pubDate>
</item>
<item>
	<title>chromatic: Perl 6 Design Minutes for 16 December 2009</title>
	<guid>http://use.perl.org/~chromatic/journal/40121?from=rss</guid>
	<link>http://use.perl.org/~chromatic/journal/40121?from=rss</link>
	<description>&lt;p&gt;The Perl 6 design team met by phone on 16 December 2009.  Allison, Patrick, Jerry, and chromatic attended.&lt;/p&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;finished my Hague Grant&lt;/li&gt;&lt;li&gt;sent the final report to Jesse to wild approval&lt;/li&gt;&lt;li&gt;drafted a new version of PDD 31 on HLL interop&lt;/li&gt;&lt;li&gt;write some code to implement part of that in NQP's HLLCompiler&lt;/li&gt;&lt;li&gt;added various tests&lt;/li&gt;&lt;li&gt;need to get languages using that now&lt;/li&gt;&lt;li&gt;Rakudo will use that&lt;/li&gt;&lt;li&gt;it's the basis for Rakudo's &lt;code&gt;use&lt;/code&gt; and &lt;code&gt;import&lt;/code&gt; &lt;/li&gt;&lt;li&gt;if it works for Rakudo, it should follow for other languages which use HLLCmpiler&lt;/li&gt;&lt;li&gt;had a few comments about missing pieces and corrections&lt;/li&gt;&lt;li&gt;it's still a draft spec, but we need iteration to finish the spec&lt;/li&gt;&lt;li&gt;working on little bits of code here and there&lt;/li&gt;&lt;li&gt;adding features for projects which use NQP&lt;/li&gt;&lt;li&gt;trying to return to using Rakudo and updating the -ng branch&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on the Pynie refresh this week&lt;/li&gt;&lt;li&gt;started over with the Python 3 grammar&lt;/li&gt;&lt;li&gt;have that translated into NQP-rx&lt;/li&gt;&lt;li&gt;it compiles and can parse a few things&lt;/li&gt;&lt;li&gt;working my way through the grammar&lt;/li&gt;&lt;li&gt;no actions set up yet&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;there is a &lt;code&gt;.DEBUG&lt;/code&gt; rule&lt;/li&gt;&lt;li&gt;call it on a subrule to turn on tracing from that rule down&lt;/li&gt;&lt;li&gt;that saves you from having to put in &lt;code&gt;panic&lt;/code&gt; statements&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;is there a good NQP-rx tutorial for actions?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on it&lt;/li&gt;&lt;li&gt;is your work in the Pynie repo?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;it's in Mercurial on bitbucket.org under project &lt;em&gt;pynie&lt;/em&gt; &lt;/li&gt;&lt;li&gt;that's what Python 3 uses&lt;/li&gt;&lt;li&gt;also the Parrot roadmap session went very well&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Jerry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;we still have some actions to take based on that work&lt;/li&gt;&lt;li&gt;need to convert our priority list into Trac tickets and wiki items&lt;/li&gt;&lt;li&gt;Parrot's goal for every month until Rakudo * is to support Rakudo * and HLLs in general&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;that's valuable&lt;/li&gt;&lt;li&gt;it changes our priorities in the next year&lt;/li&gt;&lt;li&gt;it moves things between &quot;would be nice&quot; and &quot;necessary&quot;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;worked on the roadmap session&lt;/li&gt;&lt;li&gt;helping with the Context/CallSignature merge&lt;/li&gt;&lt;li&gt;will do a dry run of the Rakudo release today&lt;/li&gt;&lt;/ul&gt;</description>
	<pubDate>Fri, 22 Jan 2010 01:52:43 +0000</pubDate>
</item>
<item>
	<title>perl6.announce: MiniPerl6 3.0 &quot;Perlito&quot; - Go lang, JVM backends by Flavio S. Glock</title>
	<guid>http://www.nntp.perl.org/group/perl.perl6.announce/2010/01/msg614.html</guid>
	<link>http://www.nntp.perl.org/group/perl.perl6.announce/2010/01/msg614.html</link>
	<description>MiniPerl6 (mp6) is a subset of Perl 6, which was designed as a light&lt;br /&gt;bootstrapping language.&lt;br /&gt;&lt;br /&gt;Changelog for version 3.0:&lt;br /&gt;&lt;br /&gt;- Go language backend; using Go: http://golang.org/&lt;br /&gt;&lt;br /&gt;- Java-class backend; using Rhino: http://www.mozilla.org/rhino&lt;br /&gt;&lt;br /&gt;- util/mp6.pl - compiler command line script written in MiniPerl6&lt;br /&gt;&lt;br /&gt;- new repository at http://github.com/fglock/Perlito&lt;br /&gt;&lt;br /&gt;- new web page at http://www.perlito.org/ created by nferraz (Nelson Ferraz)&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;- Fl&amp;aacute;vio S. Glock (fglock)&lt;br /&gt;</description>
	<pubDate>Thu, 21 Jan 2010 09:01:29 +0000</pubDate>
</item>
<item>
	<title>chromatic: Perl 6 Design Minutes for 09 December 2009</title>
	<guid>http://use.perl.org/~chromatic/journal/40115?from=rss</guid>
	<link>http://use.perl.org/~chromatic/journal/40115?from=rss</link>
	<description>&lt;p&gt;The Perl 6 design team met by phone on 09 December 2009.  Larry, Allison, Patrick, Will, and chromatic attended.&lt;/p&gt;&lt;p&gt; &lt;strong&gt;Will:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;some work on NQP port of Partcl&lt;/li&gt;&lt;li&gt;Patrick has been very helpful&lt;/li&gt;&lt;li&gt;sent a message to the Parrot list about the planning meeting this Sunday&lt;/li&gt;&lt;li&gt;initiated a community document to discuss those plans&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;implemented large chunks of obscure C code to perform fast string matching using the FFT&lt;/li&gt;&lt;li&gt;wondering if that'd be useful in Parrot&lt;/li&gt;&lt;li&gt;maybe we do our indexing operations by character set in the NFG form&lt;/li&gt;&lt;li&gt;also does very basic pattern matching by leaving out optional characters&lt;/li&gt;&lt;li&gt;could be useable in the core tests, where it's tricky to depend on PGE&lt;/li&gt;&lt;li&gt;this was my final assignment before the Christmas break&lt;/li&gt;&lt;li&gt;have a month off to work on Parrot stuff then&lt;/li&gt;&lt;li&gt;I'll show off my assignment when I submit it&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;finished my final report for my Hague grant&lt;/li&gt;&lt;li&gt;haven't quite finished the grant, but left TODO items&lt;/li&gt;&lt;li&gt;rather than trying to finish everything and then write the report, I'd draft the report and keep notes on what I needed to finish&lt;/li&gt;&lt;li&gt;need to work on HLL interop&lt;/li&gt;&lt;li&gt;enable Perl 6 and other Parrot languages to load libraries from other HLLs&lt;/li&gt;&lt;li&gt;will work on that over the next few days&lt;/li&gt;&lt;li&gt;had several coversations about optimizations, constants, and inferior runloops&lt;/li&gt;&lt;li&gt;made minor PAST improvements&lt;/li&gt;&lt;li&gt;integer constants can automatically promote to num constants without going through a PMC&lt;/li&gt;&lt;li&gt;updated NQP to make it easier to write custom operator subs, if you're using the operator precedence parser&lt;/li&gt;&lt;li&gt;implemented the beginnings of smart matching&lt;/li&gt;&lt;li&gt;not full Perl 6 smart match&lt;/li&gt;&lt;li&gt;makes sense in the Parrot context&lt;/li&gt;&lt;li&gt;can match against regexes, tokens, rules, and any types with protoobjects&lt;/li&gt;&lt;li&gt;code looks more like Perl 6&lt;/li&gt;&lt;li&gt;not much on Rakudo besides answering questions&lt;/li&gt;&lt;li&gt;will get back to the Rakudo-ng merge after finishing my grant work&lt;/li&gt;&lt;li&gt;also worked on Partcl&lt;/li&gt;&lt;li&gt;updated its regex syntax, particularly for enumerated character classes&lt;/li&gt;&lt;li&gt;fixed it to handle unquoted, non-word characters in regexes&lt;/li&gt;&lt;li&gt;previously it only handled barewords as literal matches&lt;/li&gt;&lt;li&gt;it's closer to the Perl 5 syntax now&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;didn't like the name &lt;code&gt;PairValSet&lt;/code&gt;, renamed it &lt;code&gt;EnumMap&lt;/code&gt; &lt;/li&gt;&lt;li&gt;likewise &lt;code&gt;PairSet&lt;/code&gt; is now &lt;code&gt;PairMap&lt;/code&gt;, and &lt;code&gt;PairVal&lt;/code&gt; is just &lt;code&gt;Enum&lt;/code&gt; &lt;/li&gt;&lt;li&gt;so individual constant pairs now called &quot;enums&quot;&lt;/li&gt;&lt;li&gt;we distinguish pairs, which have read-write values, from enums, which are constant in the value&lt;/li&gt;&lt;li&gt;you can now do &lt;code&gt;.enums&lt;/code&gt; on hashes and arrays as well as enumerations&lt;/li&gt;&lt;li&gt;differs from &lt;code&gt;.pairs&lt;/code&gt;, which give reference semantics into the values of the original data structure&lt;/li&gt;&lt;li&gt; &lt;code&gt;.enums&lt;/code&gt; gives you a constant snapshot&lt;/li&gt;&lt;li&gt;David Green suggested renaming &lt;code&gt;Enum.name&lt;/code&gt; to &lt;code&gt;Enum.key&lt;/code&gt;, and he was right, since they're constant pairs&lt;/li&gt;&lt;li&gt;trying to be consistent about calling the whole type an &quot;enumeration&quot; and referring to the bits as &quot;enums&quot;, even though the keyword is &lt;code&gt;enum&lt;/code&gt; &lt;/li&gt;&lt;li&gt;thought people would rebel at typing the long name&lt;/li&gt;&lt;li&gt;clarified that the anonymous &lt;code&gt;enum&lt;/code&gt; is compile-time evaluated as an anonymous list of constants&lt;/li&gt;&lt;li&gt;you can always cast to an &lt;code&gt;EnumMap&lt;/code&gt; at run time for the other behavior&lt;/li&gt;&lt;li&gt;simplifying conditional semantics&lt;/li&gt;&lt;li&gt;STD parser now parses a &lt;code&gt;WHENCE&lt;/code&gt; closure as part of the typename, rather than relying on subscript parse&lt;/li&gt;&lt;li&gt;block escape within a closure within a string used to parse as a normal block by responding to comments outside of the block&lt;/li&gt;&lt;li&gt;already fixed the embedded block in the regex syntax&lt;/li&gt;&lt;li&gt;made that usable by strings and regexes now&lt;/li&gt;&lt;li&gt;blocks in regular code try to figure out if they're at the end of a statement&lt;/li&gt;&lt;li&gt;look for the trailing curly&lt;/li&gt;&lt;li&gt;inside a string or regex, there are no statements&lt;/li&gt;&lt;li&gt;it makes no sense to look for the end of the statement there&lt;/li&gt;&lt;li&gt;the obsolescence messages were still in the old framework that upsets some Perl 5 people&lt;/li&gt;&lt;li&gt;changed the wording to &quot;Unsupported use of ...&quot;&lt;/li&gt;&lt;li&gt;#perl6 found a precedence inconsistency in parsing of list prefixes vs list infixes in NG&lt;/li&gt;&lt;li&gt;turned out to be wrong in STD first, and NG copied it&lt;/li&gt;&lt;li&gt;I fixed it in STD, Patrick fixed it in NG&lt;/li&gt;&lt;li&gt;otherwise last week was rather too ADD-ish, so mostly did Q&amp;amp;A on IRC&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;fixed some bugs&lt;/li&gt;&lt;li&gt;made some optimizations&lt;/li&gt;&lt;li&gt;think I've fixed most constant PMCs in PBC now, which should help NQP and Rakudo&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;it'll take a while before Jonathan and I can take advantage of that&lt;/li&gt;&lt;li&gt;Allison, when you &lt;code&gt;push_eh&lt;/code&gt; an ExceptionHandler onto an array in a context, it creates an RPA&lt;/li&gt;&lt;li&gt;does that hold other things besides an EH?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;potentially&lt;/li&gt;&lt;li&gt;events get stored in the scheduler&lt;/li&gt;&lt;li&gt;only EHs are scoped to a context&lt;/li&gt;&lt;li&gt;the old &lt;code&gt;pushmark&lt;/code&gt;/&lt;code&gt;popmark&lt;/code&gt; stuff to do actions used that same global array&lt;/li&gt;&lt;li&gt;it may have changed to use the same array&lt;/li&gt;&lt;li&gt;that's deprecated though&lt;/li&gt;&lt;li&gt;they won't use that array for long&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I need something to replace &lt;code&gt;pushaction&lt;/code&gt; and &lt;code&gt;popaction&lt;/code&gt; before they go away&lt;/li&gt;&lt;li&gt;when we handle &lt;code&gt;LEAVE&lt;/code&gt; semantics, we want to avoid generating an exception to leave that scope for caching&lt;/li&gt;&lt;li&gt;I don't want to generate and rethrow actions to go up the stack&lt;/li&gt;&lt;li&gt;those ops let me do that without generating exceptions&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;we do need singleton exception objects for &lt;code&gt;FAIL&lt;/code&gt; and &lt;code&gt;RETURN&lt;/code&gt; &lt;/li&gt;&lt;li&gt;no extra information needed&lt;/li&gt;&lt;li&gt;right now, you can insert anything you want in that array&lt;/li&gt;&lt;li&gt;the &lt;code&gt;local_branch&lt;/code&gt; and &lt;code&gt;local_return&lt;/code&gt; uses that array&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;it shouldn't&lt;/li&gt;&lt;li&gt; &lt;code&gt;bsr&lt;/code&gt; and &lt;code&gt;ret&lt;/code&gt; may have&lt;/li&gt;&lt;li&gt;I provide my own there&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;oh right&lt;/li&gt;&lt;li&gt;I might not have checked in that code&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;by the way, NQP doesn't use &lt;code&gt;local_branch&lt;/code&gt; or &lt;code&gt;local_return&lt;/code&gt; &lt;/li&gt;&lt;/ul&gt;</description>
	<pubDate>Thu, 21 Jan 2010 04:41:19 +0000</pubDate>
</item>
<item>
	<title>chromatic: Announce: Parrot 2.0.0 &quot;Inevitable&quot; Released!</title>
	<guid>http://use.perl.org/~chromatic/journal/40114?from=rss</guid>
	<link>http://use.perl.org/~chromatic/journal/40114?from=rss</link>
	<description>&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;The Beyond and below are like a deep of ocean, and we the creatures that swim in the abyss.  We're so far down that the beings on the surface  superior though they are  can't effectively reach us.  Oh, they fish, and they sometimes blight the upper levels with points we don't even understand.  But the abyss remains a relatively safe place.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt; Vernor Vinge, &lt;em&gt;A Fire Upon the Deep&lt;/em&gt; &lt;/p&gt;&lt;p&gt;On behalf of the Parrot team, I'm proud to announce Parrot 2.0.0 &amp;quot;Inevitable.&amp;quot; &lt;a href=&quot;http://parrot.org/&quot;&gt;Parrot&lt;/a&gt; is a virtual machine aimed at running all dynamic languages.&lt;/p&gt;&lt;p&gt;Parrot 2.0.0 is available on &lt;a href=&quot;ftp://ftp.parrot.org/pub/parrot/releases/stable/2.0.0/&quot;&gt;Parrot's FTP site&lt;/a&gt;, or &lt;a href=&quot;http://parrot.org/download&quot;&gt;follow the download instructions&lt;/a&gt;.  For those who would like to develop on Parrot, or help develop Parrot itself, we recommend using &lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt;  on &lt;a href=&quot;https://svn.parrot.org/parrot/trunk/&quot;&gt;our source code repository&lt;/a&gt; to get the latest and best Parrot code.&lt;/p&gt;&lt;p&gt;Parrot 2.0.0 News:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt; &lt;p&gt;Features&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Context PMCs now support attribute-based introspection&lt;/li&gt;&lt;li&gt;Context and CallSignature PMCs merged into CallContext&lt;/li&gt;&lt;li&gt;.lex directive throws exceptions when used with incorrect register types&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;Platforms&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Packaging improved for free OS distributions&lt;/li&gt;&lt;li&gt;PPC, PPC64, and ARM now tested when running Linux&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;Performance&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Minor improvements to the profiling runcore&lt;/li&gt;&lt;li&gt;Improvements from the CallContext PMC merge&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;New deprecations&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;In/out parameters in STRING modification functions&lt;/li&gt;&lt;li&gt;Void handling in NCI signatures&lt;/li&gt;&lt;li&gt;Parameter passing opcodes order in PBC&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;Tests&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Continued migration of core tests from Perl 5 to PIR&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;Tools&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;dependency checker improved&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;Miscellaneous&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;Deprecation cycle length changed to three months from six&lt;/li&gt;&lt;li&gt;GC accuracy improved&lt;/li&gt;&lt;li&gt;PMC freeze improvements; much more reliable&lt;/li&gt;&lt;li&gt;Makefile improvements for dependency handling&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Thanks to all our contributors for making this possible, and our sponsors
for supporting this project.  Our next release is 16 February 2010.&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;</description>
	<pubDate>Thu, 21 Jan 2010 04:37:49 +0000</pubDate>
</item>
<item>
	<title>perl6.announce: Parrot 2.0.0 &quot;Inevitable&quot; Released! by chromatic</title>
	<guid>http://www.nntp.perl.org/group/perl.perl6.announce/2010/01/msg613.html</guid>
	<link>http://www.nntp.perl.org/group/perl.perl6.announce/2010/01/msg613.html</link>
	<description>The Beyond and below are like a deep of ocean, and we the creatures&lt;br /&gt;    that swim in the abyss.  We're so far down that the beings on the&lt;br /&gt;    surface -- superior though they are -- can't effectively reach us.&lt;br /&gt;    Oh, they fish, and they sometimes blight the upper levels with&lt;br /&gt;    points we don't even understand.  But the abyss remains a relatively&lt;br /&gt;    safe place.&lt;br /&gt;&lt;br /&gt;    -- Vernor Vinge, A Fire Upon the Deep&lt;br /&gt;&lt;br /&gt;On behalf of the Parrot team, I'm proud to announce Parrot 2.0.0&lt;br /&gt;&amp;quot;Inevitable.&amp;quot; Parrot (http://parrot.org/) is a virtual machine aimed&lt;br /&gt;at running all dynamic languages.&lt;br /&gt;&lt;br /&gt;Parrot 2.0.0 is available on Parrot's FTP site, or follow the download&lt;br /&gt;instructions at http://parrot.org/download.  For those who would like to&lt;br /&gt;develop on Parrot, or help develop Parrot itself, we recommend using &lt;br /&gt;Subversion&lt;br /&gt;on the source code repository to get the latest and best Parrot code.&lt;br /&gt;&lt;br /&gt;Parrot 2.0.0 News:&lt;br /&gt;- Features&lt;br /&gt;  + Context PMCs now support attribute-based introspection&lt;br /&gt;  + Context and CallSignature PMCs merged into CallContext&lt;br /&gt;  + .lex directive throws exceptions when used with incorrect register types&lt;br /&gt;- Platforms&lt;br /&gt;  + Packaging improved for free OS distributions&lt;br /&gt;  + PPC, PPC64, and ARM now tested when running Linux&lt;br /&gt;- Performance&lt;br /&gt;  + Minor improvements to the profiling runcore&lt;br /&gt;  + Improvements from the CallContext PMC merge&lt;br /&gt;- New deprecations&lt;br /&gt;  + In/out parameters in STRING modification functions&lt;br /&gt;  + Void handling in NCI signatures&lt;br /&gt;  + Parameter passing opcodes order in PBC&lt;br /&gt;- Tests&lt;br /&gt;  + Continued migration of core tests from Perl 5 to PIR&lt;br /&gt;- Tools&lt;br /&gt;  + dependency checker improved&lt;br /&gt;- Miscellaneous&lt;br /&gt;  + Deprecation cycle length changed to three months from six&lt;br /&gt;  + GC accuracy improved&lt;br /&gt;  + PMC freeze improvements; much more reliable&lt;br /&gt;  + Makefile improvements for dependency handling&lt;br /&gt;&lt;br /&gt;Many thanks to all our contributors for making this possible, and our sponsors&lt;br /&gt;for supporting this project.  Our next scheduled release is 16 February 2010.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;</description>
	<pubDate>Wed, 20 Jan 2010 20:00:44 +0000</pubDate>
</item>
<item>
	<title>Carl Masak: The taming of the newbie - a comedy on IRC</title>
	<guid>http://use.perl.org/~masak/journal/40110?from=rss</guid>
	<link>http://use.perl.org/~masak/journal/40110?from=rss</link>
	<description>&lt;p&gt;The other day, I remembered this old piece of #perl6 &lt;a href=&quot;http://irclog.perlgeek.de/perl6/2005-09-07#i_-495908&quot;&gt;backlog&lt;/a&gt; from 2005:&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;masak&amp;gt; question: what are good ways in p5 and p6 respectively, to reverse a string?&lt;br /&gt;
&amp;lt;masak&amp;gt; the easiest way i found in p5 was join '', reverse split // $string&lt;br /&gt;
&amp;lt;masak&amp;gt; doesn't look very nice, now does it?&lt;br /&gt;
&amp;lt;integral&amp;gt; *blink*&lt;br /&gt;
&amp;lt;integral&amp;gt; $string = reverse $string&lt;/code&gt; &lt;/p&gt;&lt;p&gt;It feels odd to realize this five years later, but it seems that in 2005 I didn't have a firm grip on how &lt;code&gt;reverse&lt;/code&gt; worked in Perl 5. Chances are, dearest reader, that you do. But if not, the rest of the refreshingly frank discussion will explain it.&lt;/p&gt;&lt;p&gt;Meanwhile, five years earlier, I persist in my innocent ignorance:&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;masak&amp;gt; nope&lt;br /&gt;
&amp;lt;masak&amp;gt; doesn't work :(&lt;br /&gt;
&amp;lt;masak&amp;gt; reverse only reverses lists... i think&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Reading this from the perspective of five years' work with Perl 5 and 6 is... enlightening, in a slightly cathartic way. Sure, it &lt;em&gt;could&lt;/em&gt; have been that I'm the first to discover that &lt;code&gt;reverse&lt;/code&gt; in Perl 5 doesn't in fact reverse strings, despite &lt;em&gt;thousands&lt;/em&gt; of people using it daily for that purpose. But the chances of that are astronomically small. My peers on the channel tell me this.&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;PerlJam&amp;gt; masak: clearly you are insane.&lt;br /&gt;
&amp;lt;integral&amp;gt; perl -le '$string = &quot;abc&quot;; $string = reverse $string; print $string'&lt;br /&gt;
&amp;lt;integral&amp;gt; masak: &lt;a href=&quot;http://perldoc.perl.org/functions/reverse.html&quot;&gt;the manual *clearly* explains&lt;/a&gt; all the stuff about context&lt;br /&gt;
&amp;lt;integral&amp;gt; &lt;a href=&quot;http://perldoc.perl.org/perlfaq4.html#How-do-I-reverse-a-string%3F&quot;&gt;and the faq&lt;/a&gt; &lt;/code&gt; &lt;/p&gt;&lt;p&gt;They do, you know.&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;PerlJam&amp;gt; masak: in perl6 it would be $string.=reverse probably.&lt;/code&gt; &lt;/p&gt;&lt;p&gt;This was true in 2005, but nowadays we have &lt;code&gt;flip&lt;/code&gt; for strings, &lt;code&gt;reverse&lt;/code&gt; for lists, and &lt;code&gt;invert&lt;/code&gt; for hashes. The need for different functions falls out naturally from the fact that Perl 6 doesn't depend as heavily on context as Perl 5 does.&lt;/p&gt;&lt;p&gt;Back in the log, I'm still trying to reintegrate into reality.&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;masak&amp;gt; integral: your example worked, thx&lt;br /&gt;
&amp;lt;masak&amp;gt; but nothing worked for me&lt;br /&gt;
&amp;lt;masak&amp;gt; apparently i am insane :P&lt;/code&gt; &lt;/p&gt;&lt;p&gt;PerlJam and integral are one step ahead of me.&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;integral&amp;gt; no, you don't understand scalar context.  perl -le 'print scalar reverse shift' foobar&lt;br /&gt;
&amp;lt;PerlJam&amp;gt; masak: you were probably saying &quot;print reverse $string&quot;&lt;br /&gt;
&amp;lt;masak&amp;gt; no, but maybe something of the sort&lt;br /&gt;
&amp;lt;masak&amp;gt; and that doesn't work, because...?&lt;br /&gt;
&amp;lt;integral&amp;gt; masak: print's prototype is (@), ie list context.  It's a rightwards named list operator&lt;br /&gt;
&amp;lt;PerlJam&amp;gt; masak: context.&lt;br /&gt;
* masak	thinks he sees it now&lt;/code&gt; &lt;/p&gt;&lt;p&gt;These explanations are actually very good, but just in case, let me restate them in my own words: &lt;code&gt;reverse&lt;/code&gt; has two main behaviours. Either it reverses a list of things, or it reverses a string of characters. It switches between these two behaviours based on &lt;em&gt;something&lt;/em&gt;. You might think that this something is what type of thing you send in (a scalar or a list), but that isn't so. Instead, &lt;code&gt;reverse&lt;/code&gt; responds to its surroundings and figure out what they expect. &lt;code&gt;$string = reverse $string&lt;/code&gt; is a scalar assignment, and expects a scalar. &lt;code&gt;print reverse $string&lt;/code&gt;, as integral explains, puts &lt;code&gt;reverse&lt;/code&gt; in list context, so it reverses the list of one thing (&lt;code&gt;$string&lt;/code&gt;), i.e. doing nothing.&lt;/p&gt;&lt;p&gt;Steve Yegge has this to say, in a vitriolic &lt;a href=&quot;http://steve.yegge.googlepages.com/ancient-languages-perl&quot;&gt;critique of Perl&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;p&gt;Perl also has &quot;contexts&quot;, which means that you can't trust a single line of Perl code that you ever read.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;I would say that it's actually not that bad, and the idea of context can be unintuitive at times, in many cases it's actually very natural and useful. &lt;code&gt;reverse&lt;/code&gt;, in my humble opinion, is not one of those cases. I'm glad it's split up into different methods in Perl 6.&lt;/p&gt;&lt;p&gt;At the end, we learn that I had actually Read The Faithful Manual already, I just hadn't read it &lt;em&gt;carefully&lt;/em&gt;:&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;PerlJam&amp;gt; masak: perldoc -f reverse&lt;br /&gt;
&amp;lt;masak&amp;gt; thx, integral and PerlJam&lt;br /&gt;
&amp;lt;masak&amp;gt; PerlJam: I read the perldoc entry but apparently not carefully enough&lt;br /&gt;
* masak reads it again&lt;br /&gt;
&amp;lt;masak&amp;gt; ah&lt;br /&gt;
&amp;lt;masak&amp;gt; &quot;In scalar context, concatenates the elements of LIST and returns a string value with all characters in the opposite order.&quot;&lt;br /&gt;
&amp;lt;masak&amp;gt; this somehow went past me as something i didn't want :/&lt;/code&gt; &lt;/p&gt;&lt;p&gt;In summary, I mostly wrote this blog post because I like to make myself squirm. &amp;#21704;&amp;#21704;&lt;/p&gt;&lt;p&gt;But I guess there's also a moral to it all. We all start somewhere, and in a way it's reassuring to find five-year old proof of this fact. A newbie is just on a part of the learning curve you've already visited; they haven't had a chance to tweak their keyboard and developing environment to maximum efficiency yet, and they sometimes forget that the manual is there, or misread it in some way. So, don't hesitate to be be kind to them, and help them connect to the goodness that is &lt;a href=&quot;http://perldoc.perl.org/&quot;&gt;perldoc&lt;/a&gt;, &lt;a href=&quot;http://www.perlmonks.org/&quot;&gt;PerlMonks&lt;/a&gt; and &lt;a href=&quot;http://ironman.enlightenedperl.org/&quot;&gt;Planet Iron Man&lt;/a&gt; so that they can grow and bloom into experienced wielders of Perl.&lt;/p&gt;&lt;p&gt;But don't hesitate to call them insane, either, when the situation calls for it.&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 19 Jan 2010 09:26:20 +0000</pubDate>
</item>
<item>
	<title>Carl Masak: Ovid is right: roles are awesome</title>
	<guid>http://use.perl.org/~masak/journal/40107?from=rss</guid>
	<link>http://use.perl.org/~masak/journal/40107?from=rss</link>
	<description>&lt;p&gt;A class hierarchy of expression nodes: it's so much the prototypical use case for run-time method polymorphism that it's almost a clich&amp;#233;. One can close one's eyes and picture the way parts of the expression tree interact in rich, complex ways, shaped by the very types of the nodes themselves, in a dynamic dance of late bindings and virtual methods. Switch statmement, get thee behind me. Et cetera.&lt;/p&gt;&lt;p&gt;I'm &lt;a href=&quot;http://github.com/masak/gge&quot;&gt;building one&lt;/a&gt;. And I'm having almost too much fun doing it. In between trying to use the strengths of Perl 6 and keeping true to the &lt;a href=&quot;http://github.com/leto/parrot/tree/master/compilers/pge/&quot;&gt;original program&lt;/a&gt; I'm porting, I've discovered an important thing: Ovid is right about roles.&lt;/p&gt;&lt;p&gt;Specifically, I'm having trouble picturing how I would cram all the type information into my expression node class hierarchy, were I not using roles. The roles definitely help manage complexity in my case.&lt;/p&gt;&lt;p&gt; &lt;a href=&quot;http://masak.org/carl/exp-class-hierarchy.png&quot;&gt;Here's a pretty diagram&lt;/a&gt; of my class hierarchy.&lt;/p&gt;&lt;p&gt;It's a flat beast. Apart from everything deriving from &lt;code&gt;Exp&lt;/code&gt;, I have only one case of old-skool inheritance in the diagram. And even that one is more making a point than actually shortening the code.&lt;/p&gt;&lt;p&gt;Then there's all the colorful dots, representing the roles I'm mixing into my types. Some are for convenience (like the blue ones), others are vital for my program (like the green ones), and the rest are somewhere in between on the convenient/vital scale.&lt;/p&gt;&lt;p&gt;I even have a case of inheritance between two of the roles! Which means, in practice, that those classes with an orange dot also act as if they had a red dot. Very handy.&lt;/p&gt;&lt;p&gt;During the infancy of Rakudo, I've gotten used to learning to live without various features. Were I to do what I'm doing here without using roles, I could use two other mechanisms. The first is regular inheritance. The very thought gives me a bit of vertigo; I don't think I'd be able to turn the colored dots into base classes. Definitely not all of them at once; I'd have to choose. And that choice would affect the entire design of the program, probably resulting in loss of clarity.&lt;/p&gt;&lt;p&gt;The second way I could compensate for not having roles would be by using &lt;code&gt;.can&lt;/code&gt; a lot. The presence of a given role in a class is isomorphic to the presence of a given method in a class. So that would definitely work, but I don't think I would like it as much. There's something to be said for declaring &lt;code&gt;is&lt;/code&gt; and &lt;code&gt;does&lt;/code&gt; relationships at the very top of the class declaration.&lt;/p&gt;&lt;p&gt;All in all, I'm very happy about the way things work. I'm wondering whether, had I not read all of Ovid's posts &lt;a href=&quot;http://use.perl.org/~Ovid/journal/38373&quot;&gt;on&lt;/a&gt; &lt;a href=&quot;http://use.perl.org/~Ovid/journal/38586&quot;&gt;managing&lt;/a&gt; &lt;a href=&quot;http://use.perl.org/~Ovid/journal/38649&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://use.perl.org/~Ovid/journal/38662&quot;&gt;complexity&lt;/a&gt; &lt;a href=&quot;http://use.perl.org/~Ovid/journal/38761&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;http://use.perl.org/~Ovid/journal/38862&quot;&gt;class&lt;/a&gt; &lt;a href=&quot;http://use.perl.org/~Ovid/journal/38885&quot;&gt;hierarchies&lt;/a&gt; &lt;a href=&quot;http://use.perl.org/~Ovid/journal/39039&quot;&gt;with&lt;/a&gt; &lt;a href=&quot;http://use.perl.org/~Ovid/journal/39977&quot;&gt;roles&lt;/a&gt;, I would have come up with this design myself. Maybe, maybe not. But anyway: thanks, Ovid! This rocks!&lt;/p&gt;&lt;p&gt;A still-open question for me is whether the topmost type, &lt;code&gt;Exp&lt;/code&gt;, should be a class or a role. &lt;a href=&quot;http://feather.perl6.nl/syn/S12.html#Classes&quot;&gt;Synopsis 12&lt;/a&gt; has this to say about when to use roles:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;p&gt;Classes are primarily for instance management, not code reuse.
Consider using C when you simply want to factor out
common code.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;I &lt;em&gt;am&lt;/em&gt; using &lt;code&gt;Exp&lt;/code&gt; for code reuse, and for giving all of the other classes in the hierarchy a common base type. So I guess I could indeed turn it into a role. But it's just that... I don't see a &lt;em&gt;reason&lt;/em&gt; to do so, and I still feel instinctively reluctant about it. Maybe I'm a bit hung up about it being a &lt;em&gt;class&lt;/em&gt; hierarchy.&lt;/p&gt;&lt;p&gt;This point has &lt;a href=&quot;http://irclog.perlgeek.de/perl6book/2009-11-11#i_1717258&quot;&gt;come up before&lt;/a&gt; on IRC, and I've yet to hear a satisfactory way to resolve it: when faced with making a base type a class or a role, which way should one go?&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 16 Jan 2010 17:38:36 +0000</pubDate>
</item>

</channel>
</rss>
