<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planet Perl Six</title>
	<link rel="self" href="http://planetsix.perlfoundation.org/atom.xml"/>
	<link href="http://planetsix.perlfoundation.org"/>
	<id>http://planetsix.perlfoundation.org/atom.xml</id>
	<updated>2010-09-02T15:23:05+00:00</updated>
	<generator uri="http://www.planetplanet.org/">http://intertwingly.net/code/venus/</generator>

	<entry>
		<title type="html" xml:lang="en-us">Yapsi 2010.09 Released!</title>
		<link href="http://use.perl.org/~masak/journal/40519?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40519?from=rss</id>
		<updated>2010-09-01T22:31:48+00:00</updated>
		<content type="html">&lt;p&gt;It is with a peevish exultation of spirit that I announce on behalf of
the Yapsi development team the September 2010 release of Yapsi -- soon
to be a major motion picture -- a Perl 6 compiler written in Perl 6.&lt;/p&gt;&lt;p&gt;You can download it &lt;a href=&quot;http://github.com/downloads/masak/yapsi/yapsi-2010.09.tar.gz&quot;&gt;here&lt;/a&gt; (or, if you happen to be on an &lt;a href=&quot;http://en.wikipedia.org/wiki/IP_over_Avian_Carriers&quot;&gt;avian-carrier-based&lt;/a&gt;
network, you can &quot;pidgeon&quot; it &lt;a href=&quot;http://github.com/downloads/masak/yapsi/yapsi-2010.09.tar.gz&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Yapsi is implemented in Perl 6. It thus requires a Perl 6 implementation to
build and run. This release of Yapsi has been confirmed to work on both
Rakudo Star 2010.08 and Rakudo Star 2010.07.&lt;/p&gt;&lt;p&gt;Yapsi is an &quot;official and complete&quot; implementation of Perl 6. Yapsi's
official status has been publicly confirmed by Patrick Michaud, the Rakudo
pumking. The claim about Yapsi being complete... well, it might just be
what PR people sometimes refer to as &quot;a slight exaggeration&quot;. On the
bright side, it's becoming less so with each new release.&lt;/p&gt;&lt;p&gt;This month's release brings you &lt;code&gt;unless&lt;/code&gt; and &lt;code&gt;until&lt;/code&gt;, as well as &lt;code&gt;our&lt;/code&gt;-scoped
variables:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
$ yapsi -e 'my $a = 0; unless $a { say 42 }'&lt;br /&gt;
42
&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
$ yapsi -e 'my $a = 0; until $a { say ++$a }'
1
&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
$ yapsi -e 'our $a = 42; { my $a = 5; { say our $a } }'
42
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;For a complete list of changes, see &lt;a href=&quot;http://github.com/masak/yapsi/tree/master/doc/ChangeLog&quot;&gt;doc/ChangeLog&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Quite a lot of features are within reach of people who are interested in
hacking on Yapsi. See the &lt;a href=&quot;http://github.com/masak/yapsi/tree/master/doc/LOLHALP&quot;&gt;doc/LOLHALP&lt;/a&gt; file for a list of 'em. In fact,
that's how isBEKaml++ implemented 'unless' this month. (After which he
exclaimed &quot;that was easy!&quot; and tackled 'until'.) If you're wondering whether
you're qualified to help with the Yapsi project, that probably means you are.&lt;/p&gt;&lt;p&gt;Yapsi consists of a compiler and a runtime. The compiler generates instruction
code which the runtime then interprets. In Yapsi, that instruction code
(unfortunately) is called SIC[!]. Until further notice, SIC as a format changes
with each monthly release for various, mostly good reasons. However, if you
write a downstream tool that makes assumptions about the SIC format, someone
might change it just out of spite. SIC is explicitly not compatible with later,
earlier, or present versions of itself.&lt;/p&gt;&lt;p&gt;An overarching goal for making a Perl 6 compiler-and-runtime is to use it as
a server for various other projects, which will hook in at different steps:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt; A time-traveling debugger (tardis), which hooks into the runtime.&lt;/li&gt;&lt;li&gt; A coverage tool (lid), which will also hook into the runtime.&lt;/li&gt;&lt;li&gt; A syntax checker (sigmund), which will use output from the parser.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Another overarching goal is to optimize for fun while learning about parsers,
compilers, and runtimes.&lt;/p&gt;&lt;p&gt;Have the appropriate amount of fun!&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Rakudo Star 2010.08 released</title>
		<link href="http://use.perl.org/~pmichaud/journal/40518?from=rss"/>
		<id>http://use.perl.org/~pmichaud/journal/40518?from=rss</id>
		<updated>2010-09-01T12:36:56+00:00</updated>
		<content type="html">&lt;p&gt;[This announcement was made last week on rakudo.org -- I'm reposting to use.perl.org so it will show up in the various Perl aggregators. --Pm]&lt;/p&gt;&lt;p&gt;On behalf of the Rakudo and Perl 6 development teams, I'm happy to announce the August 2010 release of &quot;Rakudo Star&quot;, a useful and usable distribution of Perl 6. The tarball for the August 2010 release is available from &lt;a href=&quot;http://github.com/rakudo/star/downloads&quot;&gt;http://github.com/rakudo/star/downloads&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Rakudo Star is aimed at &quot;early adopters&quot; of Perl 6. We know that it still has some bugs, it is far slower than it ought to be, and there are some advanced pieces of the Perl 6 language specification that aren't implemented yet. But Rakudo Perl 6 in its current form is also proving to be viable (and fun) for developing applications and exploring a great new language. These &quot;Star&quot; releases are intended to make Perl 6 more widely available to programmers, grow the Perl 6 codebase, and gain additional end-user feedback about the Perl 6 language and Rakudo's implementation of it.&lt;/p&gt;&lt;p&gt;In the Perl 6 world, we make a distinction between the language (&quot;Perl 6&quot;) and specific implementations of the language such as &quot;Rakudo Perl&quot;. The August 2010 Star release includes release #32 of the Rakudo Perl 6 compiler [1], version 2.7.0 of the Parrot Virtual Machine [2], and various modules, documentation, and other resources collected from the Perl 6 community.&lt;/p&gt;&lt;p&gt;This release of Rakudo Star adds the following features over the previous Star release:&lt;br /&gt;* Nil is now undefined&lt;br /&gt;* Many regex modifiers are now recognized on the outside of regexes&lt;br /&gt;* Mathematic and range operations are now faster (they're still slow, but they're significantly faster than they were in the previous release)&lt;br /&gt;* Initial implementations of .pack and .unpack&lt;br /&gt;* MAIN can parse short arguments&lt;br /&gt;* Removed a significant memory leak for loops and other repeated blocks&lt;/p&gt;&lt;p&gt;This release (temporarily?) omits the Config::INI module that was included in the 2010.07 release, as it no longer builds with the shipped version of Rakudo. We hope to see Config::INI return soon.&lt;/p&gt;&lt;p&gt;There are some key features of Perl 6 that Rakudo Star does not yet handle appropriately, although they will appear in upcoming releases. Thus, we do not consider Rakudo Star to be a &quot;Perl 6.0.0&quot; or &quot;1.0&quot; release. Some of the not-quite-there features include:&lt;br /&gt;* nested package definitions&lt;br /&gt;* binary objects, native types, pack and unpack&lt;br /&gt;* typed arrays&lt;br /&gt;* macros&lt;br /&gt;* state variables&lt;br /&gt;* threads and concurrency&lt;br /&gt;* Unicode strings at levels other than codepoints&lt;br /&gt;* pre and post constraints, and some other phasers&lt;br /&gt;* interactive readline that understands Unicode&lt;br /&gt;* backslash escapes in regex  character classes&lt;br /&gt;* non-blocking I/O&lt;br /&gt;* most of Synopsis 9&lt;br /&gt;* perl6doc or pod manipulation tools&lt;/p&gt;&lt;p&gt;In many places we've tried to make Rakudo smart enough to inform the programmer that a given feature isn't implemented, but there are many that we've missed. Bug reports about missing and broken features are welcomed.&lt;/p&gt;&lt;p&gt;See &lt;a href=&quot;http://perl6.org/&quot;&gt;http://perl6.org/&lt;/a&gt; for links to much more information about Perl 6, including documentation, example code, tutorials, reference materials, specification documents, and other supporting resources. An updated draft of a Perl 6 book is available as  in the release tarball.&lt;/p&gt;&lt;p&gt;The development team thanks all of the contributors and sponsors for making Rakudo Star possible. If you would like to contribute, see &lt;a href=&quot;http://rakudo.org/how-to-help&quot;&gt;http://rakudo.org/how-to-help&lt;/a&gt;, ask on the perl6-compiler@perl.org mailing list, or join us on IRC channel #perl6 on freenode.&lt;/p&gt;&lt;p&gt;Rakudo Star releases are created on a monthly cycle or as needed in response to important bug fixes or improvements. The next planned release of Rakudo Star will be on September 28, 2010.&lt;/p&gt;&lt;p&gt;[1] &lt;a href=&quot;http://github.com/rakudo/rakudo&quot;&gt;http://github.com/rakudo/rakudo&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;http://parrot.org/&quot;&gt;http://parrot.org/&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>pmichaud</name>
			<uri>http://use.perl.org/~pmichaud/journal/</uri>
		</author>
		<source>
			<title type="html">pmichaud's Journal</title>
			<subtitle type="html">pmichaud's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~pmichaud/journal/rss"/>
			<id>http://use.perl.org/~pmichaud/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html">New: rakudo-star-201007-1, Updated: rakudo-201007_47-1 (aka perl6) by Reini Urban</title>
		<link href="http://www.nntp.perl.org/group/perl.perl6.announce/2010/08/msg636.html"/>
		<id>http://www.nntp.perl.org/group/perl.perl6.announce/2010/08/msg636.html</id>
		<updated>2010-08-28T20:52:35+00:00</updated>
		<content type="html">rakudo-star on cygwin is parrot plus rakudo (a perl6 implemention on &lt;br /&gt;parrot) plus some new perl6 libraries, docs and libraries and blizkost, &lt;br /&gt;a perl5 parrot language which embeds libperl5. Contrary to the upstream&lt;br /&gt;rakudo-star release for the masses, this does not include the external&lt;br /&gt;parrot or rakudo releases. The external rakudo releases in the future &lt;br /&gt;will match the rakudo star release. That's why this rakudo has the &lt;br /&gt;version 201007_47, not just 201007, because it's the one from rakudo-star&lt;br /&gt;&lt;br /&gt;* first package, using external parrot, and an updated rakudo 2010.07-47&lt;br /&gt;* some blizkost and make install patches (already applied upstream)&lt;br /&gt;* some testing hacks&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UPSTREAM ANNOUNCE&lt;br /&gt;&lt;br /&gt;On behalf of the Rakudo and Perl 6 development teams, I'm happy to&lt;br /&gt;announce the July 2010 release of &quot;Rakudo Star&quot;, a useful and usable&lt;br /&gt;distribution of Perl 6.  The tarball for the July 2010 release is&lt;br /&gt;available from &amp;lt;http://github.com/rakudo/star/downloads&amp;gt;.&lt;br /&gt;&lt;br /&gt;Rakudo Star is aimed at &quot;early adopters&quot; of Perl 6.  We know that&lt;br /&gt;it still has some bugs, it is far slower than it ought to be, and&lt;br /&gt;there are some advanced pieces of the Perl 6 language specification&lt;br /&gt;that aren't implemented yet.  But Rakudo Perl 6 in its current form&lt;br /&gt;is also proving to be viable (and fun) for developing applications&lt;br /&gt;and exploring a great new language.  These &quot;Star&quot; releases are&lt;br /&gt;intended to make Perl 6 more widely available to programmers, grow&lt;br /&gt;the Perl 6 codebase, and gain additional end-user feedback about the&lt;br /&gt;Perl 6 language and Rakudo's implementation of it.&lt;br /&gt;&lt;br /&gt;In the Perl 6 world, we make a distinction between the language&lt;br /&gt;(&quot;Perl 6&quot;) and specific implementations of the language such as&lt;br /&gt;&quot;Rakudo Perl&quot;.  &quot;Rakudo Star&quot; is a distribution that includes&lt;br /&gt;release #31 of the Rakudo Perl 6 compiler [1], version 2.6.0 of&lt;br /&gt;the Parrot Virtual Machine [2], and various modules, documentation,&lt;br /&gt;and other resources collected from the Perl 6 community.  We&lt;br /&gt;plan to make Rakudo Star releases on a monthly schedule, with&lt;br /&gt;occasional special releases in response to important bugfixes or&lt;br /&gt;changes.&lt;br /&gt;-- &lt;br /&gt;Reini Urban&lt;br /&gt;&lt;br /&gt;=====================================================================&lt;br /&gt;&lt;br /&gt;To update your installation, click on the &quot;Install Cygwin now&quot; link on&lt;br /&gt;the http://cygwin.com/ web page.  This downloads setup.exe to your&lt;br /&gt;system.  Once you've downloaded setup.exe, run it and select &quot;Editors&quot;&lt;br /&gt;or &quot;Text&quot; and then click on the appropriate fields until the above&lt;br /&gt;announced version numbers appear if they are not displayed already.&lt;br /&gt;&lt;br /&gt;If your mirror doesn't yet have the latest version of this package after&lt;br /&gt;24 hours, you can either continue to wait for that site to be updated or&lt;br /&gt;you can try to find another mirror.&lt;br /&gt;&lt;br /&gt;Please send questions or comments to the Cygwin mailing list at:&lt;br /&gt;cygwin@cygwin.com&lt;br /&gt;&lt;br /&gt;If you want to subscribe go to:&lt;br /&gt;http://cygwin.com/ml/cygwin/&lt;br /&gt;&lt;br /&gt;I would appreciate if you would use this mailing list rather than&lt;br /&gt;emailing me directly.  This includes ideas and comments about the setup&lt;br /&gt;utility or Cygwin in general.&lt;br /&gt;&lt;br /&gt;If you want to make a point or ask a question the Cygwin mailing&lt;br /&gt;list is the appropriate place.&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple&lt;br /&gt;Problem reports:       http://cygwin.com/problems.html&lt;br /&gt;Documentation:         http://cygwin.com/docs.html&lt;br /&gt;FAQ:                   http://cygwin.com/faq/&lt;br /&gt;&lt;br /&gt;</content>
		<author>
			<name>perl6.announce</name>
			<uri>http://www.nntp.perl.org/group/perl.perl6.announce/</uri>
		</author>
		<source>
			<title type="html">perl.perl6.announce</title>
			<subtitle type="html">...</subtitle>
			<link rel="self" href="http://www.nntp.perl.org/rss/perl.perl6.announce.rdf"/>
			<id>http://www.nntp.perl.org/group/perl.perl6.announce/</id>
			<rights type="html">Copyright 1998-2010 perl.org</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">The Series Operator and Memoization</title>
		<link href="http://justrakudoit.wordpress.com/2010/08/28/the-serial-operator-and-memoization/"/>
		<id>http://justrakudoit.wordpress.com/?p=165</id>
		<updated>2010-08-28T12:07:34+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Masak recently posted on the &lt;a href=&quot;http://use.perl.org/~masak/journal/40516&quot;&gt;series operator solution to Pascal’s Triangle&lt;/a&gt;.  I’d like to focus on an important property of his final solution that hasn’t been much discussed yet.&lt;/p&gt;
&lt;p&gt;But first, let me back up and consider another well-known problem with similar properties: the &lt;a href=&quot;http://en.wikipedia.org/wiki/Fibonacci_number&quot;&gt;Fibonacci series&lt;/a&gt;.  A straightforward recursive solution looks like this in Perl 6:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;sub Fibonacci($n) {
    return $n if $n == 0 | 1;
    Fibonacci($n - 1) + Fibonacci($n - 2);
}
&lt;/pre&gt;
&lt;p&gt;This nicely implements the &lt;a href=&quot;http://en.wikipedia.org/wiki/Fibonacci_number&quot;&gt;definition&lt;/a&gt;, but it has one critical problem — it is incredibly inefficient.  (And not just in Rakudo — in any language!)  The reason is that calculating Fibonacci(N) requires all the work of calculating Fibonacci(N-1) and Fibonacci(N-2).  The number of subroutine calls involved grows as fast as the series does.&lt;/p&gt;
&lt;p&gt;The standard recursive technique for dealing with this problem is called &lt;a href=&quot;http://en.wikipedia.org/wiki/Memoization&quot;&gt;memoization&lt;/a&gt;.  Basically, you cache the values which have already been computed somewhere, so you only need to compute them once.  That’s a bit awkward to implement by hand — it roughly doubles the complexity of the routine, I’d say.  Luckily, lots of languages have automatic ways to apply memoization.  Perl 6 is supposed to, with the “is cached” modifier to a subroutine definition, but Rakudo doesn’t have it implemented yet.&lt;/p&gt;
&lt;p&gt;That’s okay, because there is more than one way to do it, and there is a great way which is available already in Rakudo.&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;&amp;gt; my @Fibonacci := (0, 1, -&amp;gt; $a, $b { $a + $b } ... *); 1;
1
&amp;gt; say @Fibonacci[5]
5
&amp;gt; say @Fibonacci[10]
55
&amp;gt; say @Fibonacci[30]
832040
&lt;/pre&gt;
&lt;p&gt;(I’ve used parentheses instead of &lt;code&gt;do&lt;/code&gt; because that’s how I roll, but otherwise this is exactly the same idea as &lt;a href=&quot;http://use.perl.org/~masak/journal/40516&quot;&gt;Masak’s solution&lt;/a&gt;.  The additional &lt;code&gt;1;&lt;/code&gt; is needed only because I typed this into the REPL, and without it the REPL will try to evaluate the entire infinite series so it can print it out.)&lt;/p&gt;
&lt;p&gt;You can’t see it here, of course, but calculating these numbers was very quick.  That’s because this solution using the series operator is equivalent to writing a very smart memoization.  Infinite lists in Perl 6 are implemented (roughly speaking) with an array of values that have been already calculated, and an iterator which knows how to calculate further values as needed.  &lt;/p&gt;
&lt;p&gt;So when you say &lt;code&gt;@Fibonacci[5]&lt;/code&gt; the first time, the list calls the iterator generated by the series operator to get the first six values, storing them in &lt;code&gt;@Fibonacci[0]&lt;/code&gt; through &lt;code&gt;@Fibonacci[5]&lt;/code&gt;.  (Those values are generated in a straightforward iterative way, so it is very efficient.)  When you then say &lt;code&gt;@Fibonacci[10]&lt;/code&gt; those first six values are still there, and only the next five values must be calculated.  If at that point you said &lt;code&gt;@Fibonacci[8]&lt;/code&gt;, that is just a simple array lookup of the already calculated value!&lt;/p&gt;
&lt;p&gt;Think about it.  It would take a very smart automatic memoizer to somehow figure out that the function would only be called when &lt;code&gt;$n&lt;/code&gt; was a non-negative integer, so that an array could be used to efficiently cache the results.  Using a series operator this way gets you that kind of performance automatically already in Rakudo.&lt;/p&gt;
&lt;p&gt;So it’s a double win.  Using the series operator is not only the most succinct way to express this series in Perl 6.  It’s also an extremely efficient way of calculating the series.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/165/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/165/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/165/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/165/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/165/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/165/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/165/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/165/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/165/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/165/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/165/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/165/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/165/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/165/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=165&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Idiomatic Perl 6</title>
		<link href="http://use.perl.org/~masak/journal/40516?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40516?from=rss</id>
		<updated>2010-08-27T00:22:03+00:00</updated>
		<content type="html">&lt;p&gt;So, I wrote a program to generate &lt;a href=&quot;http://en.wikipedia.org/wiki/Pascal&quot;&gt;Pascal's triangle&lt;/a&gt;. The first ten rows of the triangle, at least. It only used simple features of Perl 6, such as scalars, nested arrays, and &lt;code&gt;for&lt;/code&gt; loops.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my $ELEMENTS = 10;&lt;br /&gt;
my @pascal = [1];&lt;br /&gt;
&lt;br /&gt;
for 1 .. $ELEMENTS - 1 {&lt;br /&gt;
    my @last = @pascal[ * - 1 ].list;&lt;br /&gt;
&lt;br /&gt;
    my @current;&lt;br /&gt;
    push @current, @last[0];&lt;br /&gt;
    for 0 .. @last - 2 {&lt;br /&gt;
        push @current, @last[$_] + @last[$_ + 1];&lt;br /&gt;
    }&lt;br /&gt;
    push @current, @last[ * - 1 ];&lt;br /&gt;
&lt;br /&gt;
    push @pascal, [@current];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say @pascal.perl;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;In fact, save for simple mechanically substitutable differences, it could have been a Perl 5 script. In fact, with a bit of manual array allocation, it could have been a C script. That's OK; there's a tolerance in the Perl community of writing code that looks like it was thunk in some other language.&lt;/p&gt;&lt;p&gt;But I've heard that Perl 6 is great at doing things with operators. For example, the &lt;code&gt;Z&lt;/code&gt; operator, which interleaves two lists, seems to be able to help me write my &lt;code&gt;push&lt;/code&gt; statements more succinctly:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my $ELEMENTS = 10;&lt;br /&gt;
my @pascal = [1];&lt;br /&gt;
&lt;br /&gt;
for 1 .. $ELEMENTS - 1 {&lt;br /&gt;
    my @last = @pascal[ * - 1 ].list;&lt;br /&gt;
&lt;br /&gt;
    my @current;&lt;br /&gt;
    &lt;b&gt;for (0, @last) Z (@last, 0) -&amp;gt; $left, $right {&lt;br /&gt;
        push @current, $left + $right;&lt;br /&gt;
    }&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
    push @pascal, [@current];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say @pascal.perl;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;The parentheses before and after the &lt;code&gt;infix:&amp;lt;Z&amp;gt;&lt;/code&gt; aren't necessary, because the &lt;code&gt;Z&lt;/code&gt; operator has looser precedence than comma. They're just shown here to make your eyes accustomed to reading this construct.&lt;/p&gt;&lt;p&gt;In fact, now that only the addition is performed in the inner loop, I might as well use the &lt;code&gt;Z+&lt;/code&gt; operator, which does this for me.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my $ELEMENTS = 10;&lt;br /&gt;
my @pascal = [1];&lt;br /&gt;
&lt;br /&gt;
for 1 .. $ELEMENTS - 1 {&lt;br /&gt;
    my @last = @pascal[ * - 1 ].list;&lt;br /&gt;
&lt;br /&gt;
    my @current &lt;b&gt;= 0, @last Z+ @last, 0;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
    push @pascal, [@current];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say @pascal.perl;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Now as the remaining loop shrinks to a size I can take in all at once, I see a bit more clearly what I'm doing: I'm building each new list from the previous one. I could feed the previous list into a named function to get the current one:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my $ELEMENTS = 10;&lt;br /&gt;
my @pascal = [1];&lt;br /&gt;
&lt;b&gt; &lt;br /&gt;
sub next-list(@p) {&lt;br /&gt;
    [0, @p Z+ @p, 0]&lt;br /&gt;
}&lt;br /&gt;
&lt;/b&gt; &lt;br /&gt;
for 1 .. $ELEMENTS - 1 {&lt;br /&gt;
    my @last = @pascal[ * - 1 ].list;&lt;br /&gt;
&lt;br /&gt;
    my @current = &lt;b&gt;next-list(@last)&lt;/b&gt;;&lt;br /&gt;
&lt;br /&gt;
    push @pascal, @current;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say @pascal.perl;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Or I could just feed it into a in-place anonymous sub.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my $ELEMENTS = 10;&lt;br /&gt;
my @pascal = [1];&lt;br /&gt;
&lt;br /&gt;
for 1 .. $ELEMENTS - 1 {&lt;br /&gt;
    my @last = @pascal[ * - 1 ].list;&lt;br /&gt;
&lt;br /&gt;
    push @pascal, &lt;b&gt;(sub (@p) { [0, @p Z+ @p, 0] }).(@last)&lt;/b&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say @pascal.perl;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;But why even a sub? Perl 6 has a lighter construct, namely a &quot;pointy block&quot; (also known as a &quot;closure&quot; or a &quot;lambda&quot;). It doesn't participate in the call stack, and it's slightly easier to write.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my $ELEMENTS = 10;&lt;br /&gt;
my @pascal = [1];&lt;br /&gt;
&lt;br /&gt;
for 1 .. $ELEMENTS - 1 {&lt;br /&gt;
    my @last = @pascal[ * - 1 ].list;&lt;br /&gt;
&lt;br /&gt;
    push @pascal, (&lt;b&gt;-&amp;gt; @p&lt;/b&gt; { [0, @p Z+ @p, 0] }).(@last);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say @pascal.perl;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Let's look at what the code does. Seed with one element. Calculate the next element based on the previous one. Stop at some point.&lt;/p&gt;&lt;p&gt;But that's exactly what the series operator does. The one that's written with three dots. We have a starting value, a way to get from one value to the next (our code block above), and a stopping value.&lt;/p&gt;&lt;p&gt;Well actually, we don't have the stopping value. But that's OK, since the series operator is &lt;em&gt;lazy&lt;/em&gt;. So if we only request the first 10 values, it won't loop forever giving us the rest of the list.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
&lt;b&gt;my @pascal := do [1], -&amp;gt; @p { [0, @p Z+ @p, 0] } ... *;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
say &lt;b&gt;@pascal[^10]&lt;/b&gt;.perl;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;(The extra &lt;code&gt;do&lt;/code&gt; required because of a &lt;a href=&quot;http://rt.perl.org/rt3/Ticket/Display.html?id=77462&quot;&gt;shortcoming in Rakudo&lt;/a&gt;.)&lt;/p&gt;&lt;p&gt;Now. Something very much like this code was posted first &lt;a href=&quot;http://rosettacode.org/wiki/Pascal's_triangle#Perl_6&quot;&gt;on Rosetta code&lt;/a&gt; and then &lt;a href=&quot;http://perlgeek.de/blog-en/perl-6/pascal-triangle.html&quot;&gt;on Moritz' blog&lt;/a&gt;. (TimToady used a sub, but said later that he'd have preferred binding.)&lt;/p&gt;&lt;p&gt;A couple of Perl 5 people's reactions were — somewhat uncharacteristically — of a negative flavour, similar to how people &lt;a href=&quot;http://use.perl.org/~masak/journal/40339&quot;&gt;seem to react&lt;/a&gt; to the periodic table of operators:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
&lt;a href=&quot;http://twitter.com/shadowcat_mst/status/22112066276&quot;&gt;@shadowcat_mst&lt;/a&gt;: an excellent example of why I consider camelia perl to be a language research project more than a production language
&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
&lt;a href=&quot;http://twitter.com/pedromelo/status/22110965152&quot;&gt;@pedromelo&lt;/a&gt;: I'm seriously considering this post as an example of what I don't want Perl6 to become...
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;I think these reactions are mainly feature shock. Higher-order operators, pointy blocks, and the series operator... they're all good, well-established features, which find daily use in Perl 6 programs. Maybe using them all together like that flung some people off the deep end. Never mind that the resulting script is all &lt;a href=&quot;http://en.wikipedia.org/wiki/Essential_complexity&quot;&gt;essential complexity&lt;/a&gt;, with virtually no boilerplate from the original script left.&lt;/p&gt;&lt;p&gt;This is the first time that's happened. I think it's important to listen to what Perl 5 people think and to try to respond to that. But I also think that this time, it's a case of them seeing some highly idiomatic Perl 6, and freaking out a bit.&lt;/p&gt;&lt;p&gt;And I think that that, in some odd sense, is a good thing. Well, not freaking people out, per se. But the fact that we did shows that there's something forming which might be tentatively called &quot;idiomatic Perl 6&quot;: people on the inside can read it quite easily, but those on the outside, even Perl 5 folks looking in, instinctively go &quot;eeeeew!&quot;.&lt;/p&gt;&lt;p&gt;That's OK. You're not meant to start with the idiomatic stuff. &lt;em&gt;Language acquisition takes place step by step&lt;/em&gt;, and that goes for learning Perl 6 as well. On the way there, just don't confuse distaste with lack of familiarity.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Fixing Rakudo Memory Leaks</title>
		<link href="http://perlgeek.de/blog-en/perl-6/rakudo-memory-leaks.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/rakudo-memory-leaks.html</id>
		<updated>2010-08-26T20:52:12+00:00</updated>
		<content type="html">&lt;p&gt;Rakudo has been leaking memory for a few month. The other day, after some
nagging, Will Coleda identified a memory leak, and Tyler Curtis &lt;a href=&quot;http://github.com/rakudo/rakudo/commit/3a339ee8ab3a72867fe914ec9c689e1f5a890645&quot;&gt;fixed
it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now we can again make long-running processes with Rakudo. For example for
my talk at YAPC::EU I plotted a &lt;a href=&quot;http://perlgeek.de/talks/2010/yapceu-p6-realworld/resonance.png&quot;&gt;resonance 
curve&lt;/a&gt;. For that I needed to start a new Rakudo process for every data
point because it would leak so badly that it died after processing a few data
points. Now I recalculated a whole curve in one process, with memory usage not
exceeding 200MB of virtual mem.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;resonance curve&quot; height=&quot;506&quot; src=&quot;http://perlgeek.de/images/blog/res2.png&quot; width=&quot;702&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I also had some fun recalculating a mandelbrot fractal in a size that would
previously make Rakudo segfault or consume too much memory.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;Mandelbrot fractal, rendered by Rakudo&quot; height=&quot;1001&quot; src=&quot;http://perlgeek.de/images/blog/mandel-color.png&quot; width=&quot;1001&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(Rendered with &lt;a href=&quot;http://github.com/colomon/mandelbrot/&quot;&gt;colomon's
mandelbrot code)&lt;/a&gt;).&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Quick ABC fixes</title>
		<link href="http://justrakudoit.wordpress.com/2010/08/26/quick-abc-fixes/"/>
		<id>http://justrakudoit.wordpress.com/?p=160</id>
		<updated>2010-08-26T02:21:05+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;SF’s &lt;a href=&quot;http://github.com/LastOfTheCarelessMen/ABC&quot;&gt;ABC project&lt;/a&gt; continues to be dead in the water, but that hasn’t stopped me from needing some quick ABC scripts.  I’m preparing a mini-book of tunes for an Irish Traditional Dance Music workshop, and needed a couple quick programming tricks to make my life easier.&lt;/p&gt;
&lt;p&gt;First, a file of ABC tunes should have a unique “X:” index field for each tune.  I’d gathered these tunes from around the Internet; correspondingly, about half had “X: 1″, and the rest had some random number.  This was easily fixed with a simple Perl 6 script:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;my $x = 1;
for $*IN.lines {
    when /^X\:/ { say &quot;X: { $x++ }&quot;; }
    say $_;
}
&lt;/pre&gt;
&lt;p&gt;The only thing at all odd here is that I’ve used &lt;code&gt;when&lt;/code&gt; in a &lt;code&gt;for&lt;/code&gt; loop.  It just smartmatches the topic (&lt;code&gt;$_&lt;/code&gt;) against the regex there, and if it’s a match, executes the code that follows and then skips to the next iteration of the loop.&lt;/p&gt;
&lt;p&gt;The trickier thing I needed to do was transpose a couple of tunes, because the versions I found on the Internet were in the wrong key.  Cutely, this is pretty easily done with the &lt;code&gt;.trans&lt;/code&gt; method in Perl 6.&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;for $*IN.lines -&amp;gt; $line {
    # say (~$line).trans(&quot;C..GABc..gab&quot; =&amp;gt; &quot;FGABc..gab&quot;);  # from D to G
    say (~$line).trans(&quot;C..GABc..gab&quot; =&amp;gt; &quot;D..GABc..gabh&quot;); # from G to A
}
&lt;/pre&gt;
&lt;p&gt;This needs to be applied only to the notes of the tune, and if you use the “G to A” transposition and you have an “h” as a note, you need to switch it to “c’”.  (You also need to change the declared key signature in the tune’s header.  And accidentals might need work.  This is definitely crude ABC-handling code, but it suited my purposes perfectly last night.)&lt;/p&gt;
&lt;p&gt;There is one big gotcha here.  Why is it &lt;code&gt;(~$line)&lt;/code&gt; instead of just &lt;code&gt;$line&lt;/code&gt;?  Well, internally &lt;code&gt;.lines&lt;/code&gt; is calling &lt;code&gt;.chomp&lt;/code&gt;.  And apparently &lt;code&gt;.chomp&lt;/code&gt; no longer returns a Rakudo &lt;code&gt;Str&lt;/code&gt;, which seems to mean some other &lt;code&gt;.trans&lt;/code&gt; is executed, causing no end of problems.&lt;/p&gt;
&lt;p&gt;Anyway, at some point I intend to try to get the real ABC module working in Rakudo (if no one else beats me to it).  In the meantime, I’ve got to survive a weekend’s worth of folk festival first.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/160/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/160/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/160/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/160/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/160/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/160/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/160/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/160/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/160/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/160/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/160/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/160/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/160/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/160/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=160&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Pascal's Triangle in Perl 6</title>
		<link href="http://perlgeek.de/blog-en/perl-6/pascal-triangle.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/pascal-triangle.html</id>
		<updated>2010-08-26T00:03:32+00:00</updated>
		<content type="html">&lt;p&gt;Today on IRC, Larry Wall showed this piece of Perl 6 code, which he wrote
for &lt;a href=&quot;http://rosettacode.org/wiki/Pascal%27s_triangle#Perl_6&quot;&gt;Rosetta
Code&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;synStatement&quot;&gt;sub&lt;/span&gt; pascal { [&lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt;]&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;synIdentifier&quot;&gt;@p&lt;/span&gt; { [&lt;span class=&quot;synConstant&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synIdentifier&quot;&gt;@p&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;Z+&lt;/span&gt; &lt;span class=&quot;synIdentifier&quot;&gt;@p&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;0&lt;/span&gt;] } &lt;span class=&quot;synStatement&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;*&lt;/span&gt; }&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;synIdentifier&quot;&gt;say&lt;/span&gt; pascal[&lt;span class=&quot;synStatement&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;10&lt;/span&gt;]&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;perl&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;# output (reformatted for easy readbility):&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;# ([1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 2, 1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 3, 3, 1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 4, 6, 4, 1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 5, 10, 10, 5, 1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 6, 15, 20, 15, 6, 1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 7, 21, 35, 35, 21, 7, 1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 8, 28, 56, 70, 56, 28, 8, 1],&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;#  [1, 9, 36, 84, 126, 126, 84, 36, 9, 1])&lt;/span&gt;
&lt;/pre&gt;

&lt;p&gt;That's &lt;a href=&quot;http://en.wikipedia.org/wiki/Pascal%27s_triangle&quot;&gt;Pascal's
triangle&lt;/a&gt;, generated in one line of Perl 6.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;...&lt;/code&gt; is the series operator, which generates lists by
feeding the previous value(s) (here always one array) to the generating
block on its left, until it reaches the goal on the right (in this case
&quot;whatever&quot;, which means it returns a lazy, infinite list).&lt;/p&gt;

&lt;p&gt;So for example if the previous item was the array &lt;code&gt;[1, 2, 1]&lt;/code&gt;,
the code block evaluates &lt;code&gt;0, 1, 2, 1 Z+ 1, 2, 1, 0&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Z&lt;/code&gt; is the zip operator, &lt;code&gt;Z+&lt;/code&gt; is pairwise addition
(ie adding the pairs that the zip operator produced). In our example that
leads to &lt;code&gt;0+1, 1+2, 2+1, 1+0&lt;/code&gt; or &lt;code&gt;1, 3, 3, 1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It takes a while to get used to the meta operators and the series operator,
but once you've understood them, you can do pretty neat things with them.&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">On the language wars</title>
		<link href="http://ttjjss.wordpress.com/2010/08/25/on-the-language-wars/"/>
		<id>http://ttjjss.wordpress.com/?p=23</id>
		<updated>2010-08-25T20:15:30+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;em&gt;Disclamer: I don’t want to provoke another instance of something I’d be writing about, so I’m going to refer to languages as to meals.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;We all like eating. Some of us prefer only one or two kinds of food, but most of us have experiences with many types, yet there are this few ones which we prefer. But more often than I’d like, we yell at each other that our types of food are better, instead of serving our favorite meals with happiness on our faces. Or we insult each other because of the type of food someone else prefers.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;Isn’t it sick?&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;I’m not a professional cook, but I tend to wander there and around in the cooking community. Let me tell you a few stories I experienced in the recent time.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;So there’s a cooking convention, and a two cooks are showing some stuff they cooked using Mushrooms. At the beginning, they start to exaplain, why Mushrooms? “Oh you know, we like Mushrooms, and would any of you like to cook these using Pasta? Are you willing to punch yourself in the face after cooking Pasta? And if you enjoy using the cookbooks about Pasta, you must be masochists!”. I’m glad I was watching it recorded rather than live, as I might have looked stupid standing up and leaving the room. But really, this were some serious cooks, why do they yell at other types of food instead of showing why their are nice? Seems not very professional, and shows Mushroom lovers in a bad light.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;But the sad thing is, many of them are like this. On the cooking reddit (sometimes written as “cookit”), in every article or news headling about a new meal with Pasta, dozens of Mushroom lovers appear yelling how madly they hate Pasta. Really, comments are filled with this cretinism. They shout at how Pasta is old-fashioned, difficult to eat and how it looks bad. Then why do they need to tell this to everyone, while they see how they keep being downvoted? I asked one of the redditors, why so much hate against Pasta? “It’s not hate, it’s disgust”, he replied. Hey, stupid! No need to spoil somebody else’s taste, why don’t you cook something good with your beloved Mushrooms instead of shouting at how madly you hate Pasta? Sadly, they seem to attack Tomato lovers too, everytime telling everyone how Mushrooms are better for everything and everyone should quit cooking Pasta and Tomatoes and move to Mushrooms instead. I once even saw something horrifying on the Mushrooms mailing list, although I don’t usually read those. There was a quote: “and what defines a Mushroom activist anyway? Blowing up Pasta meals worldwide?” What on earth is wrong with you people?&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;Luckily, not everyone is like this. I tend to see friendly Mushroom lovers, which sometimes cook Pasta too, although I usually see them on Pasta related IRC channels. Good to know there are good people in this community. Good to know they’re cooperating with us, there are so many wonderful things we can cook together. For example, do you even know the awesome things you can cook with exotic animals, like Parrots?&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;Now, you may have alredy guessed what kind of food is which language in this story. But there’s a reason I didn’t write a cheatsheet anywhere. It could be related to any of you, probably to me also. Just try to think about from a wider perspective. Hating other people’s food does not make you a better cook. It’s not nice either, when someone jugdes you basing on the type of food you cook, or eat? Shoving your opinions down peoples’ throats is &lt;/span&gt;always&lt;/em&gt; bad.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ttjjss.wordpress.com/23/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ttjjss.wordpress.com/23/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ttjjss.wordpress.com/23/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ttjjss.wordpress.com/23/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ttjjss.wordpress.com/23/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ttjjss.wordpress.com/23/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ttjjss.wordpress.com/23/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ttjjss.wordpress.com/23/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ttjjss.wordpress.com/23/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ttjjss.wordpress.com/23/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ttjjss.wordpress.com/23/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ttjjss.wordpress.com/23/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ttjjss.wordpress.com/23/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ttjjss.wordpress.com/23/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ttjjss.wordpress.com&amp;amp;blog=15099040&amp;amp;post=23&amp;amp;subd=ttjjss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>ttjjss</name>
			<uri>http://ttjjss.wordpress.com</uri>
		</author>
		<source>
			<title type="html">A Blag » Perl</title>
			<subtitle type="html">What is, IMHO, worth publishing</subtitle>
			<link rel="self" href="http://ttjjss.wordpress.com/category/perl/feed/"/>
			<id>http://ttjjss.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Programming Languages Are Not Zero Sum</title>
		<link href="http://perlgeek.de/blog-en/perl-6/not-zero-sum.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/not-zero-sum.html</id>
		<updated>2010-08-23T17:54:54+00:00</updated>
		<content type="html">&lt;p&gt;From &lt;a href=&quot;http://en.wikipedia.org/wiki/Zero-sum&quot;&gt;Wikipedia, the free
    encyclopedia&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;
    In game theory and economic theory, zero-sum describes a situation
    in which a participant's gain or loss is exactly balanced by the losses or
    gains of the other participant(s). If the total gains of the participants
    are added up, and the total losses are subtracted, they will sum to zero.
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Being advocate, implementor, tester and co-designer of a &lt;a href=&quot;http://perl6.org/&quot;&gt;new programming language&lt;/a&gt;, I often hear objections
along the lines of &lt;em&gt;you are killing &lt;a href=&quot;http://www.perl.org/&quot;&gt;$other_programming_language&lt;/a&gt;&lt;/em&gt;, combined
with a mixture of fear and resentment. People are afraid that having a new
player on the market will decrease
market share of their own, favorite programming language.&lt;/p&gt;

&lt;p&gt;While I can understand these thinking patterns, there is no reason for
concern. The market for programming languages is not a zero-sum situation.
While I don't have hard data, I have the impression that the programming job
sector is growing, and &lt;a href=&quot;http://www.bls.gov/oco/ocos303.htm#projections_data&quot;&gt;the US
government expects it to grow&lt;/a&gt; further, too.&lt;/p&gt;

&lt;p&gt;Certainly the &lt;a href=&quot;http://upload.wikimedia.org/wikipedia/commons/7/77/World-Population-1800-2100.png&quot;&gt;growth
of world population&lt;/a&gt; sets a rapidly increasing baseline, and even if we
assume a constant percentage of all people related to programming in some way,
the total number of programmers rises, and will continue for quite some
time.&lt;/p&gt;

&lt;p&gt;(I'm pointing to some resources about programming jobs, and I fully realize that
it's not the same as number of overall programmers; but it's easier to get
data for jobs, and I do think that the general trend statements are true for
both).&lt;/p&gt;

&lt;p&gt;So as long as the total number of programmers increases, a decrease in
relative market share doesn't automatically mean a loss. In fact &lt;a href=&quot;http://duartes.org/gustavo/blog/post/programming-language-jobs-and-trends&quot;&gt;the
job trends show an increase for &quot;scripting&quot; languages&lt;/a&gt;, and while Ruby is
certainly the winner in terms of growth, Python, Perl and PHP win too!&lt;/p&gt;

&lt;p&gt;Non-job data shows for example a &lt;a href=&quot;http://stats.cpantesters.org/graphs12.html&quot;&gt;noisy but steady growth
of uploads to the Comprehensive Perl Archive Network (CPAN)&lt;/a&gt; -- data from a
programming language that is often perceived as a loser of ruby's and python's
success.&lt;/p&gt;

&lt;p&gt;A recent &lt;a href=&quot;http://linuxtrends.com/linux-distribution-popularity-trends/&quot;&gt;Linux
distribution trend analysis&lt;/a&gt; fell into the same trap: it shows
&lt;strong&gt;relative&lt;/strong&gt; numbers of search terms, and talks about a decline
for all distributions except Ubuntu. Again I don't have hard numbers (the
mirror infrastructure of most Linux distributions makes it nearly impossible
to get accurate download counts), but I haven't seen any evidence that total
usage numbers of any of the Linux distributions actually decreased.&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Thank you/TPF</title>
		<link href="http://use.perl.org/~perl6doc/journal/40512?from=rss"/>
		<id>http://use.perl.org/~perl6doc/journal/40512?from=rss</id>
		<updated>2010-08-23T12:52:04+00:00</updated>
		<content type="html">&lt;a href=&quot;http://news.perlfoundation.org/2010/08/2010q3-grant-proposal-perl-6-t.html&quot;&gt;for getting the bucks&lt;/a&gt;.
&lt;br /&gt; &lt;br /&gt;
Now i will blog here more frequently about the progress of this grant work. Currently im preparing my perl 6 talk for mrmcd1001b which is &lt;a href=&quot;https://mrmcd1001b.metarheinmain.de/fahrplan/&quot;&gt;already scheduled&lt;/a&gt;. The preperation could count as forework but lets say I start in September and want to deliver &lt;a href=&quot;http://www.perlfoundation.org/perl6/index.cgi?perl_6_variables_tablet&quot;&gt;first milestone&lt;/a&gt; at the end of that month, splitting my &lt;a href=&quot;https://www.socialtext.net/perl5/index.cgi?tuit&quot;&gt;tuits&lt;/a&gt; between that and &lt;a href=&quot;http://kephra.sourceforge.net/&quot;&gt;Kephra&lt;/a&gt; which is steering now up to the stable release 0.5. Most propably I will have completed this earlier but there is still the Tablet 1 and the &lt;a href=&quot;http://wiki.perl-community.de/Wissensbasis/Perl6Tafel&quot;&gt;german version&lt;/a&gt;.</content>
		<author>
			<name>perl6doc</name>
			<uri>http://use.perl.org/~perl6doc/journal/</uri>
		</author>
		<source>
			<title type="html">perl6doc's Journal</title>
			<subtitle type="html">perl6doc's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~perl6doc/journal/rss"/>
			<id>http://use.perl.org/~perl6doc/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Where in the world is the package lexpad?</title>
		<link href="http://use.perl.org/~masak/journal/40511?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40511?from=rss</id>
		<updated>2010-08-22T21:39:58+00:00</updated>
		<content type="html">&lt;p&gt; &lt;i&gt;(This post isn't very punny. For those of you who need puns to survive, try to figure out why jnthn++ named the IRC logs &quot;the hottest footwear&quot; recently. The answer, as with all good puns, is highly unsatisfying.)&lt;/i&gt; &lt;/p&gt;&lt;p&gt;My quest for a Perl 6 implementation takes me ever deeper into the esoterics of lexpads, runtimes, and a far-more-than-everything-you-needed-to-know mindset. Today some random firings in my brain turned into the following conversation on #perl6.&lt;/p&gt;&lt;p&gt;During the conversation, I proposed two theories, both of which turned out to be wrong. (pmichaud++ shone the necessary light both times.) Being wrong felt less important than getting my mental model fixed.&lt;/p&gt;&lt;p&gt;I first thought of presenting the results of the below conversation as a simple tutorial (&quot;How &lt;code&gt;our&lt;/code&gt; declarations work. The complete guide.&quot;), but now I think that the conversation, minimally edited, manages to be such a tutorial on its own.&lt;/p&gt;&lt;p&gt;Besides, blogging things in their raw and undigested form is a sign of the times. Enjoy!&lt;/p&gt;&lt;p&gt; &lt;code&gt;
&amp;lt;masak&amp;gt; I have a question. is there a need for a special &quot;package lexpad&quot; containing 'our'-declared variables, or can the package lexpad simply be equated to the topmost lexpad in the package?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; my suspicion is the latter, but I might be missing something.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; the package lexpad can't be the same as the top most lexical&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; &lt;b&gt;module XYZ { my sub abc() { ... } };   # abc should not appear in the package&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; oh!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; right.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; so, separate one, then.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;jnthn&amp;gt; Additionally, lexpads are meant to be static by the time we hit runtime, and you're allowed to shove stuff into the package dynamically. Not quite sure how those two hold together.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; well,  &lt;b&gt;module XYZ { ... }&lt;/b&gt;   creates a lexical XYZ entry that holds the package entries&lt;br /&gt;
&lt;br /&gt;
&amp;lt;jnthn&amp;gt; Aha!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; and it's just a hash, really.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; does inserting the package lexpad below the outside lexpad (and above the topmost lexpad) make sense? that way, Yapsi wouldn't need any special opcodes for doing 'our'-variable lookups.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; the package lexpad is an entry in the outside lexpad, yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; I'm not sure it encapsulates the nested lexpad, though.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; hm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; if it doesn't, I don't really see how it's visible from inside the package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; I've more or less convinced myself that sandwiching it between outer and topmost is what I want to do for Yapsi.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; &lt;b&gt;our &amp;amp;xyz&lt;/b&gt;  can make an entry in both the package and in the lexical.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; this is what rakudo does now.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; we have to do similar things for methods already, too.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; sure. it makes entries in both.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; by having entries in both, that's how it's visible inside the package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; hm, indeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; no need to have the package lexpad visible from inside.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; anyway, sandwiching might work too.  haven't quite gotten to that point in Rakudo thinking yet.  And it can get a bit tricky with multis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; no need to sandwich it in, either. it can sit in limbo outside the tree of scopes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; oh, I know why it perhaps shouldn't (or should) be visible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; &lt;b&gt;my $x = 'lexical';   module XYZ { say $x;  { our $x = 'package'; } }&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; ...yes?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; I'm pretty sure &quot;say $x&quot; needs to grab the 'lexical' $x, not the one that might be &quot;sandwiched&quot; in a package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; that falls out from ordinary scope nesting and shadowing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; innermost block binds its lexical to the container in the package lexpad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; so, that speaks out against sandwiching.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;masak&amp;gt; pmichaud++
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;So there you go. There's a separate package scope, and it isn't sandwiched.&lt;/p&gt;&lt;p&gt; &lt;i&gt;(Answer: The missing link is the &quot;IR clogs&quot; meme from #parrot. I can hear you groaning... I did warn you.)&lt;/i&gt; &lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Rakudo’s meta-model: The Road Ahead</title>
		<link href="http://6guts.wordpress.com/2010/08/22/rakudos-meta-model-the-road-ahead/"/>
		<id>http://6guts.wordpress.com/?p=47</id>
		<updated>2010-08-21T23:37:09+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;A little while ago, I submitted a Hague Grant application to do a significant meta-model overhaul for Rakudo. I’m hopeful it’ll be approved soon, but lack of approval so far has, of course, not stopped me spending time considering the problem space, and even engaging in a little prototyping. I’ve got a lot of posts planned for the coming weeks and months about this work. In this one, I want to take some time to discuss some of the aims of this work and give you an idea of the roadmap.&lt;/p&gt;
&lt;p&gt;I’ve been hacking on Rakudo for the best part of two and a half years now. It goes without saying that I – and others – have learned an enormous amount about Perl 6′s needs in that time. Perl 6 is a very feature rich language, but it’s built upon a rather smaller set of primitives. As I set about re-designing and re-implementing a couple of those, I constantly have to ask myself, “OK, can this design handle everything we want to put on top of it?” Of course, experiences from Perl 6 implementations – Rakudo and others – haven’t been and won’t be my only sources of ideas. There’s plenty of other object model implementations to look at, including Moose, CLOS and Smalltalk. It’s also worth looking at what languages like Java and C# do in this area – let’s face it, they’re OO languages that are known to run pretty fast atop of their respective VMs, so it’s good to understand how they achieve that. And then there’s all of the various papers that academia has churned out, which can also provide a great deal of inspiration, or at least exploration of problem spaces.&lt;/p&gt;
&lt;p&gt;So, what do I actually want out of this process?&lt;/p&gt;
&lt;p&gt;A really big ticket item is that I want a meta-model that supports gradual typing. It may seem odd to put this at the top of the list, but it’s actually one of the things that I think will play out as being really important, and I’m not sure it’s received enough attention yet in Perl 6 – at least, not in the meta-model design space. We often talk about Perl 6 as being a dynamic language. Well, it is – but it makes more stuff statically knowable than you might first imagine. The possibility for a programmer to write type annotations means we may be given a lot of information to work with, but even knowing that everything descends from Mu gives us some optimization opportunities. Most parameters are actually of type Any, which gives us more information to work with.&lt;/p&gt;
&lt;p&gt;Today in Rakudo, writing type annotations may make your program slower rather than faster, even though you give more information. I want to fix that. Putting it another way, this work is about producing a meta-model that deeply supports both static and dynamic typing, with the ability to give us gradually greater amounts of optimization and safety as we move gradually towards the static end of the scale. (Some people at this point may ask about type inference and wonder if we can do some optimizations to dynamic programs using that; the answer is yes, we may well be able to do that and it’ll be some interesting future work, but having a way to put the calculated types to use is a prerequisite.)&lt;/p&gt;
&lt;p&gt;This directly ties into performance, which is one of Rakudo’s biggest issues at the moment. We need improvements in terms of compile time performance and runtime performance. Various things need to get faster, notably:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Method dispatch&lt;/li&gt;
&lt;li&gt;Attribute access&lt;/li&gt;
&lt;li&gt;Type checks&lt;/li&gt;
&lt;li&gt;Object allocation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Perl 6 is built out of method dispatches. While the programmer may not give us that much information to work with so far as types go, that need not be the case in the internals. In fact, if we want to write a lot of Perl 6 in Perl 6 and have it performant, we’re going to have to do things that give the compiler and runtime enough information to generate fast code. Of course, when we are in a dynamic situation, we need to be able to do runtime type checks much more quickly than we can today too.&lt;/p&gt;
&lt;p&gt;Then there’s memory consumption. Consider a Rat (rational number type) today. It contains two attributes holding Ints, which in term constitute two PMCs each (a Parrot Integer PMC that holds the value and the Perl 6 Int subclass of it). Worse, the Object PMC uses a ResizablePMCArray for attribute storage. I’ve probably lost many of you in Parrot guts terminology by now, but the bottom line is that one Rat today can carry around 8 garbage-collectable objects! Well, we made it work – but this clearly has gotta change if we want to make it fast. 3 objects is perhaps far more reasonable – a Rat object with two Int objects within them. (It goes without saying that the delegation we end up doing here as well as the extra GC overhead is also a source of speed woes.)&lt;/p&gt;
&lt;p&gt;This leads me nicely to native types, and thus representations. The SMOP project has done a lot of work looking into the area of representation polymorphism – something that Rakudo has largely ignored up until now. However, now we want to do native types it’s time to dig in and take this issue seriously. This especially comes into play in the area of boxing and unboxing – a task we’ve mostly punted on and let Parrot worry about. Today we often avoid boxing things into Rakudo-level objects when we don’t have to, because it’s so much slower than boxing to Parrot PMCs. This leads to other bits of cheating and – now and then – the cheating leaks through to user space and causes trouble. We should be able to box natives up fast enough that we feel no need to cheat and lie. These cheats and lies also carry a runtime cost.&lt;/p&gt;
&lt;p&gt;One other area that Rakudo does badly at today is startup time. We don’t need an incremental improvement here, we need an order of magnitude one. At startup today, we essentially build up the entire runtime library ecosystem from scratch (apart from some things we can lazily defer until later). Even if we can get faster at building that, it’d be faster still to be able to just build it once, freeze (aka serialize) it, and then just have to quickly thaw (aka deserialize) it at startup and be ready to run. Parrot today does have some freeze/thaw support, but it’s not enough. Notably, it doesn’t handle the issue of linkage – that is, having instances of a type defined in library A serialized in library B and matching them up. So I’ll be looking at how we can extend that.&lt;/p&gt;
&lt;p&gt;Going even further, I want us to actually build the meta-objects at *compile time*. Not just at compile time, but actually in action methods (so that by the time we’re done with the parse, we have them, and just have to fudge in the compiled Parrot Sub objects into the various slots. Why? Because that way we have the meta-objects around to provide us with the information we need to do gradual typing and a host of other optimizations and error checking. We could, of course, maintain a parallel set of compile-time and run-time versions of the information. We partially do that today, but carrying around two copies of the same information is just asking for them to get out of sync. Not to mention that we want to serialize them anyway, so we need to build them at some point during the compile. Put another way, I want to unify our compile time and runtime meta-models. I’ll write in a lot more detail on this later on – it represents something of a sea-change to our compilation model for packages.&lt;/p&gt;
&lt;p&gt;Portability is another concern. Today Rakudo only runs on Parrot, but for some time now the Rakudo team have been talking about running on other backends too. So far, getting something out that works – in the form of Rakudo * – has been more important than that, and it goes without saying that I’ll be delivering an implementation of the meta-model and all the bits around it that runs on Parrot. However, there’s quite a bit of interest in having Rakudo working on additional backends, and I’m very keen that whatever meta-model design Rakudo ends up with, it is cleanly implementable on Parrot, the JVM, the .Net CLR, LLVM and [your runtime here].&lt;/p&gt;
&lt;p&gt;There’s a lot of things to juggle here, and there’s going to be a lot of changes landing in the coming months. In these early days, I’ll be mostly prototyping. Once I’m happy with the overall design, I’ll dig in to implementing it on top of Parrot, and modifying nqp-rx. That will happen in a branch. Once that is done, I’ll branch Rakudo and do similar there. At some point, as we did when implementing the new grammar engine, those branches will become the mainline.&lt;/p&gt;
&lt;p&gt;I *do* expect this to be a lot less painful on the Rakudo side than what we went through with the infamous “ng” branch. On the nqp-rx side that’s going to be a bit harder to promise; I will of course not break anything for the sake of breaking things, and for people writing compilers using PCT I really hope this will be close to seamless. People writing NQP code in expectation that it’s going to produce a certain bit of PIR, on the other hand, may be in for more of a surprise. As an overview (subject to change):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The notion that “nqp-rx is a compiler that generates code for Parrot and has no runtime library” is simply not going to survive this work. In some senses, it’s already not completely true; nqp-rx depends on P6object if you start writing classes, for example. So it’s just going to become less true.&lt;/li&gt;
&lt;li&gt;I *may* abandon using various of the Parrot built-in types in favor of ones defined in an “NQP setting”, so that everything really can behave as a proper object. This depends if I can get the performance needed to do so, and if the other wins seem worth it.&lt;/li&gt;
&lt;li&gt;nqp-rx is likely to end up with its own multi-dispatcher at least for multi-methods, just because various aspects of the meta-model’s functioning depend on this (of note, we need to be able to dispatch based on whether something is a type object or not rather than just by type). nqp-rx *may* end up using this for dispatching its built-in operators rather than leaving Parrot opcodes to go through Parrot-level multi-dispatch. This goes hand in hand with what I said above with regard to the built-in types. (Also, from an NQP user perspective, having a single coherent multi-dispatcher at work may just be a winner. Then there’s factoring in the desire for NQP to be portable, which argues against tying it to one VM’s built-in semantics. We’ll see.)&lt;/li&gt;
&lt;li&gt;nqp-rx (and Rakudo) will get an nqp::foo pseudo-namespace for “portable operations” that can be mapped per-VM, a bit like the pir::foo one. Of course, NQP on Parrot will – possibly with the requirement of a pragma – keep pir::foo, Q:PIR { … } and I’m also pondering an “is vtable(‘…’)” trait for specifying how an object maps Parrot v-table operations to methods.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was just under a year ago when pmichaud++ dug into the nqp-rx effort, which was a prerequisite for bringing Rakudo up to the level where we could reach the Rakudo Star release series. We made it – Rakudo may not be fast today, and for sure there’s bugs, but we successfully put out a release that delivered on many of the feature promises of Perl 6. This batch of work is a prerequisite for taking us to the next level: towards one where we run faster, have a path to implement features and optimizations that we can’t today, where the meta-programmer can work productively, and where more stuff Just Works the way it should.&lt;/p&gt;
&lt;p&gt;Let’s have some -Ofun. :-)&lt;/p&gt;
&lt;br /&gt; Tagged: &lt;a href=&quot;http://6guts.wordpress.com/tag/metamodel/&quot;&gt;metamodel&lt;/a&gt;, &lt;a href=&quot;http://6guts.wordpress.com/tag/nqp/&quot;&gt;nqp&lt;/a&gt;, &lt;a href=&quot;http://6guts.wordpress.com/tag/objects/&quot;&gt;objects&lt;/a&gt;, &lt;a href=&quot;http://6guts.wordpress.com/tag/portability/&quot;&gt;portability&lt;/a&gt;, &lt;a href=&quot;http://6guts.wordpress.com/tag/rakudo/&quot;&gt;rakudo&lt;/a&gt;, &lt;a href=&quot;http://6guts.wordpress.com/tag/serialization/&quot;&gt;serialization&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/6guts.wordpress.com/47/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/6guts.wordpress.com/47/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/6guts.wordpress.com/47/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/6guts.wordpress.com/47/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/6guts.wordpress.com/47/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/6guts.wordpress.com/47/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/6guts.wordpress.com/47/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/6guts.wordpress.com/47/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/6guts.wordpress.com/47/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/6guts.wordpress.com/47/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/6guts.wordpress.com/47/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/6guts.wordpress.com/47/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/6guts.wordpress.com/47/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/6guts.wordpress.com/47/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=6guts.wordpress.com&amp;amp;blog=14597269&amp;amp;post=47&amp;amp;subd=6guts&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>jnthnwrthngtn</name>
			<uri>http://6guts.wordpress.com</uri>
		</author>
		<source>
			<title type="html">6guts</title>
			<subtitle type="html">Tales of Perl 6 guts hacking</subtitle>
			<link rel="self" href="http://6guts.wordpress.com/feed/"/>
			<id>http://6guts.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Timing Text File Reads, Part 3</title>
		<link href="http://justrakudoit.wordpress.com/2010/08/21/157/"/>
		<id>http://justrakudoit.wordpress.com/?p=157</id>
		<updated>2010-08-21T15:50:01+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;So, the last two posts suggest there is major overhead to using the lazy iterator approach with .lines.  I decided to explore this by rolling my own iterator to read a file.  First, I suspected the gather / take has a big overhead, so I just tried for a basic customer iterator first:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;class LinesIter is Iterator {
    has $!filehandle;
    has $!value;

    method infinite() { False } # or should this be True?

    method reify() {
        unless $!value.defined {
            $!value := pir::new('Parcel');
            my $line = $!filehandle.get;
            if $line.defined {
                pir::push($!value, $line);
                pir::push($!value, LinesIter.new(:filehandle($!filehandle)));
            }
        }
        $!value;
    }
}
&lt;/pre&gt;
&lt;p&gt;That takes 21.7, very slightly more than the standard gather / take version.  So much for the theory gather / take is inefficient here!&lt;/p&gt;
&lt;p&gt;I’m told that the spec requires that .lines be strictly lazy so you can mix in calls to .get.  I don’t know where, and it seems a bit crazy to me.  But anyway, by those lights the following potential optimizations are actually illegal, because they break the strict connection between .lines and .get.&lt;/p&gt;
&lt;p&gt;Here’s one that does three .gets at a time, cutting the number of iterator objects created by two-thirds.&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;class LinesIter is Iterator {
    has $!filehandle;
    has $!value;

    method infinite() { False }

    method reify() {
        unless $!value.defined {
            $!value := pir::new('Parcel');
            my $line = $!filehandle.get;
            if $line.defined {
                pir::push($!value, $line);
                $line = $!filehandle.get;
                if $line.defined {
                    pir::push($!value, $line);
                    $line = $!filehandle.get;
                    if $line.defined {
                        pir::push($!value, $line);
                        pir::push($!value, LinesIter.new(:filehandle($!filehandle)));
                    }
                }
            }
        }
        $!value;
    }
}
&lt;/pre&gt;
&lt;p&gt;Clocking in at 15.6 seconds — significantly better than the current .lines implementation, significantly worse than the .get version — this was actually the best variant I came up with.&lt;/p&gt;
&lt;p&gt;I tried upping the count to 8, but it actually ran a touch slower then.  And jnthn suggested a version which tried to optimize creation of the iterator objects, but it actually ran significantly slower than the naive version.&lt;/p&gt;
&lt;p&gt;I’m not really sure where this leaves us…&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/157/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/157/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/157/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/157/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/157/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/157/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/157/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/157/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/157/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/157/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/157/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/157/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/157/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/157/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=157&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Timing Text File Reads, Part 2</title>
		<link href="http://justrakudoit.wordpress.com/2010/08/21/timing-text-file-reads-part-2/"/>
		<id>http://justrakudoit.wordpress.com/?p=153</id>
		<updated>2010-08-21T12:08:52+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Overnight pmichaud rewrote .chomp in PIR to optimize it, leading to huge improvements in performance.  The .lines version of the code has gone from 55s to 21.5s; the .get version from 44s to 7.2s.  Weirdly enough, the .slurp version has gone from 5.6s to 9s.  (No idea why.)&lt;/p&gt;
&lt;p&gt;The good news is that the performance of the .get version is clearly much, much better.  (Still with plenty of room for improvement!)  The bad news is that the penalty for using the iterator-based version is now much more significant — it adds nearly 200% to the read time!&lt;/p&gt;
&lt;p&gt;But then, that’s another potential spot for optimization…&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/153/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/153/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/153/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/153/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/153/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/153/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/153/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/153/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/153/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/153/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/153/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/153/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/153/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/153/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=153&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Timing Text File Reads</title>
		<link href="http://justrakudoit.wordpress.com/2010/08/21/timing-text-file-reads/"/>
		<id>http://justrakudoit.wordpress.com/?p=149</id>
		<updated>2010-08-21T01:44:31+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I’ve been worried about the performance of .lines reading text files due to iterator overhead, so I decided to time it tonight.  It is a problem, but it appears to not be the biggest problem!&lt;/p&gt;
&lt;p&gt;As usual, I probably did things backwards.  I started off by creating a ten thousand line text file from &lt;a href=&quot;http://www.theotherpages.org/poems/part2/jacob01.html&quot;&gt;Violet Jacob poems&lt;/a&gt; and Rakudo’s core.pm.  Then I ran it against this:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;my $count = 0;
for $*IN.lines {
    $count++;
}

say :$count.perl;
&lt;/pre&gt;
&lt;p&gt;That takes 55s on my MacBook Pro.&lt;/p&gt;
&lt;p&gt;The .lines method is just an iterator wrapper around .get, so I tried a version which calls .get directly next.&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;my $count = 0;
loop {
    $*IN.get // last;
    $count++;
}

say :$count.perl;
&lt;/pre&gt;
&lt;p&gt;That takes 44s on the MBP.  So using the iterator adds 25% to the execution time.  That’s bad, but in a certain sense, less bad than the straight .get version being so incredibly slow.&lt;/p&gt;
&lt;p&gt;Next attempt, .slurp.  What’s the overhead of doing things line-by-line, with an autochomp?&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;$*IN.slurp;
&lt;/pre&gt;
&lt;p&gt;That takes 5.6 seconds.  So the line-by-line overhead is terrible AND even the slurp version is crazy slow.&lt;/p&gt;
&lt;p&gt;jnthn coded up two PIR versions for comparison.  &lt;a href=&quot;http://gist.github.com/541540&quot;&gt;Version 1&lt;/a&gt; reads the entire file in PIR — that took 0.84 seconds on my MBP.  &lt;a href=&quot;http://gist.github.com/541544&quot;&gt;Version 2&lt;/a&gt; reads the file line-by-line in PIR, and is drastically faster — 0.03 seconds.  (pmichaud++ reported this discrepancy to the Parrot team.)&lt;/p&gt;
&lt;p&gt;It looks like .chomp might be the best point of attack.  It looks grotesquely inefficient at the moment.  But it’s time for bed now….&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; see the &lt;a href=&quot;http://justrakudoit.wordpress.com/2010/08/21/timing-text-file-reads-part-2/&quot;&gt;next post&lt;/a&gt; for reports on how pmichaud’s .chomp optimization (mentioned in the comments) improved the situation.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/149/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/149/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/149/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/149/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/149/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/149/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/149/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/149/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/149/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/149/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/149/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/149/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/149/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/149/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=149&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">The State of Regex Modifiers in Rakudo</title>
		<link href="http://perlgeek.de/blog-en/perl-6/state-of-regex-modifiers.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/state-of-regex-modifiers.html</id>
		<updated>2010-08-17T00:16:15+00:00</updated>
		<content type="html">&lt;p&gt;During the last one and a half month, I've been working on making regex
modifiers easily available in Rakudo.&lt;/p&gt;

&lt;p&gt;The regex compiler itself has to support only a few of the adverbs that can
be applied to regexes; those include :ignorecase, :sigspace, :ignoremark and
:continue/:pos. NQP-rx, the regex engine that Rakudo uses under the hood,
supports those (except :ignoremark), so previously you could write&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;synStatement&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;ABC&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;~~&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;i abc&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt; {
    &lt;span class=&quot;synIdentifier&quot;&gt;say&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;case insensitive match&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
}
&lt;/pre&gt;


&lt;p&gt;But not&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;synStatement&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;ABC&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;~~&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;rx:&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;abc&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt; {
    &lt;span class=&quot;synIdentifier&quot;&gt;say&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;case insensitive match&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
}
&lt;/pre&gt;

&lt;p&gt;nor &lt;code&gt;m:i/abc/&lt;/code&gt;, for that matter.&lt;/p&gt;

&lt;p&gt;I've patched Rakudo to actually recognize those adverbs outside of the
regex, and also for &lt;code&gt;s///&lt;/code&gt; substitutions.&lt;/p&gt;

&lt;p&gt;Another category of adverbs are those that apply to regex calls, not to the
compilation of a regex. Among those are :global/:g, :overlap/:ov, :nth($n),
:x. I've implemented those for substitutions, but implementing them for
&lt;code&gt;m//&lt;/code&gt; turns  out to be quite a bit harder.&lt;/p&gt;

&lt;p&gt;The reason is the return value: each regex match returns a Match object,
which can store positional and named parts. &lt;a href=&quot;http://pugscode.org/syn/S05.html&quot;&gt;S05&lt;/a&gt; says that regex matches
with multiple results should return a single match object, with all results as
positional parts. It can be distinguished from a normal match object by
evaluating it in slice context... which Rakudo doesn't support yet.&lt;/p&gt;

&lt;p&gt;Now the &lt;code&gt;subst&lt;/code&gt; method and thus &lt;code&gt;s///&lt;/code&gt; are
implemented by calling &lt;code&gt;.match(:global, ...)&lt;/code&gt;, and without slice
context, it can't distinguish between multiple matches, and a single match
with subcaptures. And so my changes to the global match broke the
substitution, and I see no easy way to fix it.&lt;/p&gt;

&lt;p&gt;Anyway, here are a few examples of what works today:&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;synIdentifier&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;ab12fg34&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;synStatement&quot;&gt;s:&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/\d/&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;say&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;synComment&quot;&gt;# output: abXXfgXX&lt;/span&gt;


&lt;span class=&quot;synIdentifier&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;Hello, World&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;# :ii is the same as :samecase&lt;/span&gt;
&lt;span class=&quot;synStatement&quot;&gt;s:&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;ii&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;world&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;perl&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;say&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;synComment&quot;&gt;# output: Hello, Perl&lt;/span&gt;

&lt;span class=&quot;synIdentifier&quot;&gt;$_&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;I did not know that that work together&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;synStatement&quot;&gt;s:&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;2nd&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;that&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;they&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;say&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;synComment&quot;&gt;# output: I did not know that they work together&lt;/span&gt;
&lt;/pre&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 subroutines and home made operators</title>
		<link href="http://szabgab.com/blog/2010/08/perl6-subroutines-and-home-made-operators.html"/>
		<id>http://szabgab.com/blog/2010/08/perl6-subroutines-and-home-made-operators.html</id>
		<updated>2010-08-15T15:10:12+00:00</updated>
		<content type="html">&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Welcome back to the Perl 6 Tricks and Treats&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
This time together with a Perl 6 screencast to show the &lt;b&gt;thought operator&lt;/b&gt; 
and the &lt;b&gt;+- operator&lt;/b&gt; of Perl 6.
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=sBvjUi2093A&quot;&gt;Perl 6 subroutines screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;hr /&gt;
This entry was first sent out as part of the 
&lt;a href=&quot;http://szabgab.com/perl6_tricks_and_treats.html&quot;&gt;Perl 6 Tricks and Treats&lt;/a&gt;.
Visit &lt;a href=&quot;http://mail.szabgab.com/mailman/listinfo/perl6&quot;&gt;here to subscribe&lt;/a&gt;.&lt;br /&gt;
It was also included the &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6 series of screencasts&lt;/a&gt;.
&lt;hr /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;The Thought operator&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I just tried the thought operator in Perl 6. Typed in this:
&lt;/p&gt;
&lt;pre&gt;  &quot;szabgab&quot; .oO &quot;Perl 6 is cool&quot;;

&lt;/pre&gt;
&lt;p&gt;
and got the following:
&lt;/p&gt;
&lt;pre&gt;  szabgab thinks Perl 6 is cool

&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;The +- operator&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I also tried the +- operator:
&lt;/p&gt;
&lt;pre&gt;  2.78  ~~ 10 +- 3 ?? 't' !! 'f'     # f
  7.5   ~~ 10 +- 3 ?? 't' !! 'f'     # t
  13    ~~ 10 +- 3 ?? 't' !! 'f'     # t
  13.1  ~~ 10 +- 3 ?? 't' !! 'f'     # f

&lt;/pre&gt;
&lt;p&gt;
I think you get the point here. We check if the value on the left
is between 10 +- 3.
&lt;/p&gt;
&lt;p&gt;
~~ is the smart match operator, ?? !! are the two parts of the ternary 
operator of Perl 6 and +- is, well not everyone has the +- or the thought 
operator but if you read on you'll see how you can create one for yourself.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Subroutines in Perl 6&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Subroutines in Perl 6 are declared using the sub keyword just as in Perl 5
But in Perl 6, after the name of the subroutine one can provide a signature,
describing the parameters that function accepts.
&lt;/p&gt;
&lt;pre&gt;    use v6;

    sub f($a, $b) {
        return &quot;$a - $b&quot;;
    }

    say f(4, 2);

&lt;/pre&gt;
&lt;p&gt;
If called with a different number of arguments then Perl will issue an error message:
&lt;/p&gt;
&lt;pre&gt;    say f(4, 2, 5);

&lt;/pre&gt;
&lt;p&gt;
gives this message:
&lt;/p&gt;
&lt;pre&gt;    Too many positional parameters passed; got 3 but expected 2
      in 'f' at line 3:script.p6
      in main program body at line 8:script.p6

&lt;/pre&gt;
&lt;p&gt;
or
&lt;/p&gt;
&lt;pre&gt;    say f(4);

&lt;/pre&gt;
&lt;p&gt;
gives this message:
&lt;/p&gt;
&lt;pre&gt;    Not enough positional parameters passed; got 1 but expected 2
      in 'f' at line 3:script.p6
      in main program body at line 8:script.p6

&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 5 style in Perl 6&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
For people who really want the Perl 5 style subroutine declaration they can use this code:
&lt;/p&gt;
&lt;pre&gt;    use v6;
    
    sub f {
        return @_.perl
    }
    
    say f(4, 2);     # [4, 2]
    say f(4);        # [4]
    say f(4, 2, 3);  # [4, 2, 3]

&lt;/pre&gt;
&lt;p&gt;
but that would eliminate all the nice features of Perl 6.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Optional parameter&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
What if we would like to allow the user to pass 1 or 2 parameters?
For that case we can mark the second parameter as optional:
&lt;/p&gt;
&lt;pre&gt;    use v6;
    
    sub f($a, $b?) {
        return defined $b ?? &quot;$a - $b&quot; !! &quot;$a - na&quot;;
    }
    
    say f(4, 2);    # 4 - 2
    say f(4);       # 4 - na

&lt;/pre&gt;
&lt;p&gt;
The ?? !! is a the ternary operator of Perl 6 so what we see above is
that if $b is defined the &quot;$a - $b&quot; is returned and when $b is not defined
then 'na' will be returned instead of that value.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Parameters are read-only&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
In other cases you might be tempted to replace $b with some default value like this:
&lt;/p&gt;
&lt;pre&gt;    use v6;
    
    sub f($a, $b?) {
        $b //= 17;
        return defined $b ?? &quot;$a - $b&quot; !! &quot;$a - na&quot;;
    }
    
    say f(4, 2);    # 4 - 2
    say f(4);       # 4 - na

&lt;/pre&gt;
&lt;p&gt;
but this will throw an exception like this:
&lt;/p&gt;
&lt;pre&gt;    Cannot modify readonly value
      in '&amp;amp;infix:&amp;lt;=&amp;gt;' at line 1
      in 'f' at line 4:02.p6
      in main program body at line 8:02.p6

&lt;/pre&gt;
&lt;p&gt;
as arguments in Perl 6 are by default read only;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Default value of a parameter&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
There are two solutions to this, depending on what do you really want to achieve:
If you only want to give a default value to $b then the best way is to add it right
in the signature:
&lt;/p&gt;
&lt;pre&gt;    use v6;
    
    sub f($a, $b = 17) {
        return defined $b ?? &quot;$a - $b&quot; !! &quot;$a - na&quot;;
    }
    
    say f(4, 2);    # 4 - 2
    say f(4);       # 4 - 17

&lt;/pre&gt;
&lt;p&gt;
In this case you don't even need the question mark '?' as the presence of a
default value automatically makes the parameter optional.
This still keeps $b read-only within the subroutine.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Making the parameter a copy and thus changeable&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
The other solution is to mark the $b variable as a 'copy' of the original value.
Therefore allowing the user to make changes to it:
&lt;/p&gt;
&lt;pre&gt;    use v6;
    
    sub f($a, $b? is copy) {
        $b //= 17;
        return defined $b ?? &quot;$a - $b&quot; !! &quot;$a - na&quot;;
    }
    
    say f(4, 2);    # 4 - 2
    say f(4);       # 4 - 17

&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Type restrictions on parameters&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
We can also restrict the parameters of a subroutine to certain data types:
&lt;/p&gt;
&lt;pre&gt;    use v6;
    
    sub f($a, Int $b) {
        return &quot;$a - $b&quot;;
    }
    
    say f(4, 2);
    say f(4, &quot;foo&quot;);

&lt;/pre&gt;
&lt;p&gt;
The first call will succeed but the second will generate an exception:
&lt;/p&gt;
&lt;pre&gt;    4 - 2
    Nominal type check failed for parameter '$b'; expected Int but got Str instead
      in 'f' at line 4:03.p6
      in main program body at line 9:03.p6

&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Other constraints on parameters&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
It is also possible to provide further constraints on the parameters:
&lt;/p&gt;
&lt;pre&gt;    use v6;
    
    sub f($a, Int $b where { $b &amp;lt; 10 }) {
        return &quot;$a - $b&quot;;
    }
    
    say f(4, 2);
    say f(4, 11);

    4 - 2
    Constraint type check failed for parameter '$b'
      in 'f' at line 4:03.p6
      in main program body at line 9:03.p6

&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Creating operators in Perl 6&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
There are of course a lot of other aspects for subroutine definition in Perl 6
but let's now go back to our original goal, to create the +- operator.
&lt;/p&gt;
&lt;p&gt;
So how can one create a new operator in Perl 6?
It is quite simple as an operator is just a subroutine with a funny way of calling it.
&lt;/p&gt;
&lt;p&gt;
So here is how to create the thought operator. We create a subroutine, declaring
it to be an infix operator with the name .oO
&lt;/p&gt;
&lt;pre&gt;    sub infix:&amp;lt;.oO&amp;gt;($name, $thought) {  
        say &quot;$name thinks $thought&quot;
    }



&lt;/pre&gt;
&lt;p&gt;
Specifically we want to make +- an infix operator that create a Range. 
Not something complex. Within the angle brackets we put the new operator,
the sub has a signature of two scalars and within the block we put actual
code that needs to be executed.
&lt;/p&gt;
&lt;pre&gt;    sub infix:&amp;lt;+-&amp;gt;($a, $b) { ($a-$b) .. ($a+$b) }


&lt;/pre&gt;
&lt;p&gt;
Then we can use
&lt;/p&gt;
&lt;pre&gt;   5 +- 2

&lt;/pre&gt;
&lt;p&gt;
that will create the range 5-2 .. 5+2 also known as 3 .. 7
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Comments and Discussion&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I am always open to comments and criticism 
(just have a positive spin to it :-)
So if you find any issue with the examples,
please don't hesitate to let me know.
&lt;/p&gt;
&lt;p&gt;
If you'd like to ask question about Perl 6, 
probably the best would be to sign up on the Perl 6 
users list by sending an e-mail to
&lt;/p&gt;
&lt;pre&gt;    perl6-users-subscribe@perl.org

&lt;/pre&gt;
&lt;p&gt;
The archive of the perl6-users list is at:   &lt;a href=&quot;http://www.perl6.org/&quot;&gt;Perl6.org&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The even better way is to join the #perl6 IRC channel on irc.freenode.net
If you have not used IRC yet, the easies way is to use the web based
&lt;a href=&quot;http://webchat.freenode.net/?channels=perl6&quot;&gt;IRC client of Freenode&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Previous issues of this newsletter can be found at
&lt;a href=&quot;http://szabgab.com/perl6_tricks_and_treats.html&quot;&gt;Perl 6 Tricks and Treats&lt;/a&gt;.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Weeks 8..12 of GSoC work on Buf -- not packing it in yet</title>
		<link href="http://use.perl.org/~masak/journal/40494?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40494?from=rss</id>
		<updated>2010-08-13T22:35:51+00:00</updated>
		<content type="html">&lt;p&gt; &lt;em&gt;I was reproached by my colleague because of the lack of &quot;no cake&quot;-style jokes in this last grant update. So what can I do to amend the situation? Firstly, let me concede that the below blog post is almost tear-inducingly boring. Secondly, let me remind you that when accosted by boring material such as that in this post, the most important thing to have is a positive outlook on life. Thank you.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;The past couple of days have been really eventful. The coming couple of days probably will be, too. It seems fitting to punctuate all this eventfulness with a status-updating blog post, something that I apparently haven't gotten around to in a few weeks.&lt;/p&gt;&lt;p&gt;So, what's been happening?&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;In the &lt;a href=&quot;http://use.perl.org/~masak/journal/40440&quot;&gt;last update&lt;/a&gt;, I was at a point where I needed to encode to different encodings, not just UTF-8. Tonight I had &lt;a href=&quot;http://irclog.perlgeek.de/parrot/2010-08-13#i_2701004&quot;&gt;an enlightening discussion&lt;/a&gt; with the Parrot people, which gave all the pieces of the puzzle. Now it's just a Simple Matter of Programming. More precisely, I need to apply it to &lt;a href=&quot;http://github.com/rakudo/rakudo/blob/0839993ed01c816dc8b3459fa7b79608be4fbf3a/src/core/Str.pm#L17&quot;&gt;this spot&lt;/a&gt; in the code base.&lt;/li&gt;&lt;li&gt;By that discussion, I was once again made aware that Parrot differs between &lt;em&gt;encodings&lt;/em&gt; and &lt;em&gt;charsets&lt;/em&gt;. For example, &lt;code&gt;utf8&lt;/code&gt; is an encoding, but &lt;code&gt;iso-8859-1&lt;/code&gt; is a charset. It's confusing me slightly, but that's OK. I can make the code work so that both are treated as &quot;encodings&quot; on the Perl 6 level.&lt;/li&gt;&lt;li&gt;I got unexpected assistance from oha++, who took me aside in private discussions to discuss new wild ideas for &lt;code&gt;Buf&lt;/code&gt;. It all culminated in a &lt;a href=&quot;http://www.mail-archive.com/perl6-language@perl.org/msg32689.html&quot;&gt;p6l thread&lt;/a&gt;. Oha is writing code that uses Buf for network traffic, and has been preparing a patch for making &lt;code&gt;IO::Socket::INET&lt;/code&gt; return &lt;code&gt;Buf&lt;/code&gt;s instead of &lt;code&gt;Str&lt;/code&gt;s. In trying out this patch, oha++ found that some tests &lt;a href=&quot;http://irclog.perlgeek.de/perl6/2010-08-12#i_2694900&quot;&gt;will never work&lt;/a&gt; when &lt;code&gt;Buf&lt;/code&gt;s are used. Those tests will probably need to be rewritten.&lt;/li&gt;&lt;li&gt;During the past week or so, I've been implementing &lt;code&gt;pack&lt;/code&gt; and &lt;code&gt;unpack&lt;/code&gt; in a branch. I'm making steady progress, and trying to take in documentation such as Perl 5's &lt;a href=&quot;http://perldoc.perl.org/functions/pack.html&quot;&gt; &lt;code&gt;perldoc -f pack&lt;/code&gt; &lt;/a&gt; and &lt;a href=&quot;http://perldoc.perl.org/perlpacktut.html&quot;&gt; &lt;code&gt;perlpacktut&lt;/code&gt; &lt;/a&gt; and &lt;a href=&quot;http://www.erlang.org/doc/man/ei.html&quot;&gt;Erlang's&lt;/a&gt; &lt;a href=&quot;http://www.trapexit.org/How_to_use_ei_to_marshal_binary_terms_in_port_programs&quot;&gt; &lt;code&gt;ei&lt;/code&gt; &lt;/a&gt; and &lt;a href=&quot;http://www.tcl.tk/man/tcl8.5/TclCmd/binary.htm&quot;&gt;Tcl's &lt;code&gt;binary&lt;/code&gt; &lt;/a&gt;. It's a lot to take in, and I won't aim for full functionality — look, &lt;a href=&quot;http://github.com/mirrors/perl/blob/blead/t/op/pack.t&quot;&gt;Perl 5 has 14699 tests&lt;/a&gt; for pack! — but rather a reasonable subset of the directives from Perl 5.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There's a lot to be said about the interplay between Perl 6's high level of abstraction and the almost reckless to-the-metal feeling of &lt;code&gt;&amp;amp;pack&lt;/code&gt;/&lt;code&gt;&amp;amp;unpack&lt;/code&gt;. Add to this that the &quot;metal&quot; in this case is Parrot, which in some regards is there to abstract away the real metal. I think the details of this interplay might well be the subject of a separate blog post. When I'm not busy finishing up the code itself. 哈哈&lt;/p&gt;&lt;p&gt;The hard pencils-down deadline for GSoC is on Monday. I'm pretty sure I will have tied up the remaining loose ends by then, but I also foresee a couple of fairly focused hours programming before that. Time to dig back in; see you on the other side.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html">What is the &quot;Cool&quot; class in Perl 6?</title>
		<link href="http://perlgeek.de/blog-en/perl-6/cool.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/cool.html</id>
		<updated>2010-08-12T22:28:39+00:00</updated>
		<content type="html">&lt;p&gt;In Perl, subroutine and operator names determine what happens, usually not
the type of the arguments. Instead the arguments are coerced to a type on
which the operation makes sense:&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;synIdentifier&quot;&gt;say&lt;/span&gt; &lt;span class=&quot;synIdentifier&quot;&gt;uc&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;34&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;      &lt;span class=&quot;synComment&quot;&gt;# coerces 34 to a string, and upper-cases it&lt;/span&gt;
&lt;span class=&quot;synIdentifier&quot;&gt;say&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;synComment&quot;&gt;# converts &quot;2&quot; to a number before adding&lt;/span&gt;
&lt;/pre&gt;

&lt;p&gt;To make things more extensible, the &lt;code&gt;uc&lt;/code&gt; function re-dispatches
to the &lt;code&gt;uc&lt;/code&gt; method on its argument. So for the example above to
work, we need an &lt;code&gt;uc&lt;/code&gt; function in Int. And in Array, so that
&lt;code&gt;@a.uc&lt;/code&gt; works. And so on.&lt;/p&gt;

&lt;p&gt;The original approach was to stuff all these methods into &lt;code&gt;Any&lt;/code&gt;,
the base class of the object hierarchy. Which kinda worked, but also meant
that all user-defined classes ended up having some few hundreds methods to
start with. Not good.&lt;/p&gt;

&lt;p&gt;These days, the type &lt;code&gt;Cool&lt;/code&gt; fills this niche: most built-in types
(all that are meant to be used in that polymorphic way) inherit from Cool, so
the &lt;code&gt;uc&lt;/code&gt; method is actually defined in class &lt;code&gt;Cool&lt;/code&gt;,
coerces to string, and then re-dispatches to the internal logic that actually
does the upper-casing.&lt;/p&gt;

&lt;p&gt;The name either stands for &lt;em&gt;&lt;strong&gt;C&lt;/strong&gt;onvenient
    &lt;strong&gt;o&lt;/strong&gt;bject &lt;strong&gt;o&lt;/strong&gt;riented
    &lt;strong&gt;l&lt;/strong&gt;oopback&lt;/em&gt;, or just expresses that that most
built-ins are cool with an argument of that type.&lt;/p&gt;

&lt;p&gt;If users want to write a type that can be used like a built-in type now
just inherit from &lt;code&gt;Cool&lt;/code&gt;, and define coercion methods to other
built-in types. If the types don't inherit from &lt;code&gt;Cool&lt;/code&gt;, they are
more light-weight, and less magic. There's more than one way to do it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Cool&lt;/code&gt; is a class (and not a role), because classes are mutable;
so if you want to inject behavior into nearly all built-in types, augmenting
&lt;code&gt;Cool&lt;/code&gt; is an option (though usually considered evil, and should not
be done lightly).&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">There's just no way to keep up with all you people</title>
		<link href="http://use.perl.org/~masak/journal/40490?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40490?from=rss</id>
		<updated>2010-08-10T20:22:42+00:00</updated>
		<content type="html">&lt;p&gt;Let's look at a week two years ago in the perl6 RT queue. Who submitted bugs?&lt;/p&gt;&lt;p&gt; &lt;code&gt;
Moritz&lt;br /&gt;
Moritz&lt;br /&gt;
Moritz&lt;br /&gt;
Moritz&lt;br /&gt;
Yaakov&lt;br /&gt;
Yaakov&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
Moritz&lt;br /&gt;
Moritz&lt;br /&gt;
Ron&lt;br /&gt;
Charlie&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Seems I just managed to tie with Moritz++ there. Almost one ticket a day sounds about right from what I remember of my submit pace from that time. In total, there were 16 tickets in that week.&lt;/p&gt;&lt;p&gt;Ok, that was two years ago. What about one year ago? By this time, Rakudo had already picked up a bit of a reputation.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
Patrick&lt;br /&gt;
Patrick&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
Alex&lt;br /&gt;
Alex&lt;br /&gt;
Timothy&lt;br /&gt;
Moritz&lt;br /&gt;
Gilbert&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
Timothy&lt;br /&gt;
Timothy&lt;br /&gt;
Eduardo&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
dakkar&lt;br /&gt;
dakkar&lt;br /&gt;
Hanno&lt;br /&gt;
Solomon&lt;br /&gt;
Ben&lt;br /&gt;
Solomon&lt;br /&gt;
Ben&lt;br /&gt;
dakkar&lt;br /&gt;
Aaron&lt;br /&gt;
Solomon&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Dang, only five tickets that week. 哈哈&lt;/p&gt;&lt;p&gt;Still, a pretty typical week. 25 tickets all in all. We see a bit more variation in the names now. That's the new people.&lt;/p&gt;&lt;p&gt;Finally, let's look at last week:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
Ekkehard&lt;br /&gt;
Timothy&lt;br /&gt;
Tom&lt;br /&gt;
cognominal&lt;br /&gt;
Cosimo&lt;br /&gt;
Sven&lt;br /&gt;
Chris&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
Moritz&lt;br /&gt;
Simon&lt;br /&gt;
Mulander&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
Paweł&lt;br /&gt;
Tadeusz&lt;br /&gt;
Aaron&lt;br /&gt;
cognominal&lt;br /&gt;
cognominal&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
Paweł&lt;br /&gt;
Lithos&lt;br /&gt;
Lithos&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
Tyler&lt;br /&gt;
Alex&lt;br /&gt;
Lithos&lt;br /&gt;
Moritz&lt;br /&gt;
Lithos&lt;br /&gt;
Brian&lt;br /&gt;
Moritz&lt;br /&gt;
Moritz&lt;br /&gt;
Paweł&lt;br /&gt;
Steve&lt;br /&gt;
Francesco&lt;br /&gt;
Lithos&lt;br /&gt;
Jarrod&lt;br /&gt;
Lithos&lt;br /&gt;
Francesco&lt;br /&gt;
&lt;strong&gt;Carl&lt;/strong&gt; &lt;br /&gt;
Moritz&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;These figures help express what I feel. I'm still submitting a fair amount of tickets — all of nine last week — and still they make up an ever-smaller proportion of the growing deluge of perl6 tickets on RT.&lt;/p&gt;&lt;p&gt;Or, put differently, all you other people finally caught up with me. I can no longer compete with the rest of you. 哈哈&lt;/p&gt;&lt;p&gt;It makes me proud and excited to disappear under the waves of other people's contributions. There's been both a slow buildup over the past two years, and a sudden spike thanks to Rakudo Star. Together, they help drown out my insistent, repeating splashes on RT.&lt;/p&gt;&lt;p&gt;Rakudobugs are love. There's a whole lotta love out there right now. ♥ This uptake is what we've been waiting for.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl::Staff - Upcoming events for promoting Perl</title>
		<link href="http://szabgab.com/blog/2010/08/upcoming-events-for-promoting-perl.html"/>
		<id>http://szabgab.com/blog/2010/08/upcoming-events-for-promoting-perl.html</id>
		<updated>2010-08-10T19:56:52+00:00</updated>
		<content type="html">&lt;p&gt;
As I mentioned during my lightning talk in Pisa there are a number of tech events in Europe where it would be 
interesting to have Perl presence. The full list of events that I am aware of can be found on the
&lt;a href=&quot;http://www.perlfoundation.org/perl5/index.cgi?events&quot;&gt;events&lt;/a&gt; wiki page and the Perl presence
is being organized for some of them already.
&lt;/p&gt;
&lt;p&gt;
If you have time it would be nice to help out the organizers or if you can attend other events, then to
organize something there or if you know about more events, please add them to the wiki.
&lt;/p&gt;
&lt;p&gt;
Here is what is planned so far:
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.perlfoundation.org/perl5/index.cgi?events_2010_froscon&quot;&gt;Froscon&lt;/a&gt; in St Augustin, Germany
will take place 21-22 August 2010. Organized by Renée Bäcker there is going to be a full track of Perl talks.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.perlfoundation.org/perl5/index.cgi?events_2010_froscamp_zurich&quot;&gt;FrosCamp&lt;/a&gt; in Zurich, Switzerland
will be 17-18 September 2010. Oranized by Renée Bäcker, as I can see there is going to be a Perl booth and maybe a 
couple of Perl related talks. The dead-line for talk submission is 2010-08-14. Just a few days from now.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.perlfoundation.org/perl5/index.cgi?events_2010_oswc_malaga&quot;&gt;OSWC&lt;/a&gt; in Malaga, Spain between
27-28 October 2010. The organizers, Salvador Fandiño, Diego Kuperman, JJ Merelo, Rodrigo de Oliveira are planning to have
a Perl track.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.perlfoundation.org/perl5/index.cgi?events_2010_blit_potsdam&quot;&gt;Brandenburger Linux-Infotag&lt;/a&gt; in Potsdam, Germany
on 6 Nov 2010. Organized by Renée Bäcker they are stll looking for more people to help out at the Perl booth and give Perl related talks.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.perlfoundation.org/perl5/index.cgi?events_2010_t_dose_eindhoven&quot;&gt;T-Dose&lt;/a&gt; in Eindhoven, Holland will be between 6-7 November 2010.
I've just started to organize the Perl presence there. Let me know if you can help out.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Perl 6 Questions on Perlmonks</title>
		<link href="http://perlgeek.de/blog-en/perl-6/perlmonks-questions.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/perlmonks-questions.html</id>
		<updated>2010-08-10T18:18:42+00:00</updated>
		<content type="html">&lt;p&gt;Since the Rakudo Star release, there has been a noticeable increase in Perl
6 questions on perlmonks - a good sign, because it means people are using
it.&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.perlmonks.org/?node_id=853975&quot;&gt;Array interpolation
        in Rakudo&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.perlmonks.org/?node_id=853727&quot;&gt;Rakudo build
        problems&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.perlmonks.org/?node_id=853573&quot;&gt;Perl6, latest
        Rakudo bug or error on my part?&lt;/a&gt; (parsing issue related to missing
        whitespace).&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.perlmonks.org/?node_id=853149&quot;&gt;Perl6, modifying
        @*INC&lt;/a&gt; (another ws parsing issue)&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.perlmonks.org/?node_id=853113&quot;&gt;Perl6's
        LWP::Simple&lt;/a&gt; -- seemingly an installation issue&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.perlmonks.org/?node_id=852900&quot;&gt;Perl 6, defining a
        hash with interpolated string&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've assembled this list by looking through the 100 newest nodes in &lt;a href=&quot;http://www.perlmonks.org/?node=Seekers%20of%20Perl%20Wisdom&quot;&gt;Seekers of
Perl Wisdom&lt;/a&gt;, which makes it 6% of the questions asked, or on average 1 per
day (used to be around 1 per week).&lt;/p&gt;

&lt;p&gt;Most of the questions are related to environmental issues
(building/installing stuff), or beginner's questions related to syntax.&lt;/p&gt;

&lt;p&gt;It's good to see the questions flowing in, and I hope that we'll soon see
more questions where I can show off cool Perl 6 features in the answers
:-).&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Factorial and Memoizing</title>
		<link href="http://justrakudoit.wordpress.com/2010/08/10/factorial-and-memoizing/"/>
		<id>http://justrakudoit.wordpress.com/?p=143</id>
		<updated>2010-08-10T15:33:18+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Just saw &lt;a href=&quot;http://blog.foxxtrot.net/2010/08/perl6-first-impressions.html&quot;&gt;this post&lt;/a&gt;.  Tried to comment there, but it failed. &lt;/p&gt;
&lt;p&gt;As I understand it, Perl 6 is supposed to have a memoizer built-in, something like &lt;code&gt;sub fact is cached ($n)&lt;/code&gt;.  But that definitely isn’t implemented in Rakudo yet.&lt;/p&gt;
&lt;p&gt;There is an interesting way to do this that does work in Rakudo:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;&amp;gt; my $fact = gather { take 1; my $a = 1; for 1..* { $a *= $_; take $a + 0 } }; say $fact[3];
6
&amp;gt; say $fact[3]
6
&amp;gt; say $fact[4]
24
&amp;gt; say $fact[10]
3628800
&amp;gt; say $fact.munch(20).perl
(1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, 20922789888000, 355687428096000, 6.402373705728e+15, 1.21645100408832e+17)
&lt;/pre&gt;
&lt;p&gt;That defines &lt;code&gt;$fact&lt;/code&gt; as a lazy list of the factorials, which you can then access as, say, &lt;code&gt;$fact[10]&lt;/code&gt; (for 10!).  The list will only contain actual values for the factorials you have asked for (and any others needed to compute those).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edited to add:&lt;/strong&gt; Just realized there is (almost?) an easier way of doing this.&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;&amp;gt; my $fact = [\*] 1..*; say $fact[3]
24
&amp;gt; $fact.munch(20).perl
(1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, 20922789888000, 355687428096000, 6.402373705728e+15, 1.21645100408832e+17, 2.43290200817664e+18)
&lt;/pre&gt;
&lt;p&gt;As you can see, this is a much cleaner way of generating the list, but the indices are now off by one.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/143/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/143/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/143/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/143/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/143/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/143/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/143/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=143&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">So You want to write a Perl 6 module?</title>
		<link href="http://ttjjss.wordpress.com/2010/08/09/so-you-want-to-write-a-perl-6-module/"/>
		<id>http://ttjjss.wordpress.com/?p=16</id>
		<updated>2010-08-09T17:17:25+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;As the &lt;a href=&quot;http://modules.perl6.org&quot; target=&quot;_self&quot;&gt;module database&lt;/a&gt; grows bigger and stronger, who wouldn’t like to see his/her work there? Here’s a bunch of notes to get You started. Please note it’s rather a piece of advice, not the standard of any sort. There is no standard about preparing modules, yet when it fullfils the below conventions it’ll have a bigger chance of working everywhere without problems. They’re based on the proto &lt;a href=&quot;http://github.com/masak/proto/blob/master/PIONEER&quot;&gt;PIONEER&lt;/a&gt; document, but remember, there’s no standard. It’s just a convention, You can accept it or ignore it.&lt;/p&gt;
&lt;p&gt;To create a Perl 6 module, collect the .pm files and put them all inside the lib/ directory of Your project.&lt;/p&gt;
&lt;p&gt;“That’s all?” You’ll ask. “No metainfo files, no dist.ini, no Configure, Makefile, anything?”. No. They’re all optional. The simple lib/ directory is enough for Your module to be easily compiled and installed by a module management tool. From now on, everything is optional. Hell, even lib/ is optional, if You just want to install some executables.&lt;/p&gt;
&lt;p&gt;But You’ll usually need more. Tests! Everyone likes tests. You definitely want to ensure that Your module actually works. You don’t? Come on, I know You do.&lt;/p&gt;
&lt;p&gt;So here’s another simple thing: just put all the tests in a t/ directory, and they will all be checked before the module is installed. Again, no Makefile or anything is required.&lt;/p&gt;
&lt;p&gt;Same goes for executables. If You actually write a complete application, or just want a helper script as a bonus, put it in the bin/ directory and it will also get automagically installed. Easy peasy.&lt;/p&gt;
&lt;p&gt;So basically You’ll end up with something like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;README&lt;/strong&gt; – not going to be installed, but it’s good to have one&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lib/Acme/Nothing.pm&lt;/strong&gt; – an actual module to be compiled and installed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;t/00-basic.t&lt;/strong&gt; – tests to be run before installation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bin/do_nothing&lt;/strong&gt; – will be compiled, installed and available as a ‘do_nothing’ executable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And You’re done! Go and upload Your new, shiny module to Github and poke one of the proto maintainers to put it on the modules list.&lt;/p&gt;
&lt;p&gt;But what if You actually want that Makefile? Of course You can create one, and it will be used by a module installer to ‘make’, ‘make test’ and ‘make install’ Your module. You can also include Configure.pl script (Perl 6 is preffered here), and it will be run before compilation. If You don’t really want to write Your own makefile, that problem is also solved alredy. &lt;a href=&quot;http://github.com/masak/ufo&quot;&gt;Ufo&lt;/a&gt; will automagically build a perfect Makefile for You, able to compile, test, even install. If You won’t ship any Makefile with Your project, a module installer is likely to generate it with ufo anyway, so it won’t have to do everything by itself.&lt;/p&gt;
&lt;p&gt;One last thing. Dependencies. Hell and blessing at the same time. To ensure Your dependencies will be installed before Your module is, add the deps.proto (proto.deps is also used sometimes) file in a toplevel directory, with each required module name in a new line.&lt;/p&gt;
&lt;p&gt;So, to sum it up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dependencies listed in &lt;strong&gt;deps.proto&lt;/strong&gt; will be installed if they aren’t&lt;/li&gt;
&lt;li&gt;Files in &lt;strong&gt;lib/&lt;/strong&gt; and &lt;strong&gt;bin/ &lt;/strong&gt;will get compiled&lt;/li&gt;
&lt;li&gt;Tests in &lt;strong&gt;t/&lt;/strong&gt; will be run&lt;/li&gt;
&lt;li&gt;Everything from &lt;strong&gt;lib/ &lt;/strong&gt;and &lt;strong&gt;bin/&lt;/strong&gt; will be installed&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As a bonus, You can add a &lt;strong&gt;logotype/&lt;/strong&gt; directory with ﻿﻿﻿﻿logo_32x32.png file. On &lt;a href=&quot;http://modules.perl6.org/&quot;&gt;http://modules.perl6.org/&lt;/a&gt; You can see how it will appear in the modules database.&lt;/p&gt;
&lt;p&gt;It’s nice to see how the existing modules look like. ﻿&lt;a href=&quot;http://github.com/moritz/Math-Model/&quot;&gt;Math::Model&lt;/a&gt; and &lt;a href=&quot;http://github.com/masak/yapsi/&quot;&gt;Yapsi&lt;/a&gt; are good examples.&lt;/p&gt;
&lt;p&gt;Remember, these aren’t the rules, and there is no standard. It’s just nice to have it simple and not to overcomplicate too much.&lt;/p&gt;
&lt;p&gt;That’s all for today. Happy hacking! Fun, fame, and ladies’ hearts await!&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ttjjss.wordpress.com/16/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ttjjss.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ttjjss.wordpress.com/16/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ttjjss.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ttjjss.wordpress.com/16/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ttjjss.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ttjjss.wordpress.com/16/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ttjjss.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ttjjss.wordpress.com/16/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ttjjss.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ttjjss.wordpress.com/16/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ttjjss.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ttjjss.wordpress.com/16/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ttjjss.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ttjjss.wordpress.com&amp;amp;blog=15099040&amp;amp;post=16&amp;amp;subd=ttjjss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>ttjjss</name>
			<uri>http://ttjjss.wordpress.com</uri>
		</author>
		<source>
			<title type="html">A Blag » Perl</title>
			<subtitle type="html">What is, IMHO, worth publishing</subtitle>
			<link rel="self" href="http://ttjjss.wordpress.com/category/perl/feed/"/>
			<id>http://ttjjss.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Perl 6 – ready enough for me</title>
		<link href="http://ttjjss.wordpress.com/2010/08/08/perl-6-%e2%80%93-ready-enough-for-me/"/>
		<id>http://ttjjss.wordpress.com/?p=6</id>
		<updated>2010-08-08T17:16:35+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;(Forgive me starting from the nerdy stuff. Give me some time to get comfortable and I may write about something interesting one day)&lt;/p&gt;
&lt;p&gt;Rakudo Star, being “useful and usable”, brought not only hapiness and amazement, but also suprisingly many votes of disapproval, even from inside the Perl community. It’s slow, it’s not complete, it’s this and that, blah blah blah. I don’t know what these people were actually expecting, but I’m happy about what the Rakudo team has released. And here’s why.&lt;/p&gt;
&lt;p&gt;I’m not a proffesional programmer of any sort (hell, I won’t even go so far to call myself a programmer at all). It’s my passion, not my job, and a die-hard production-ready Perl 6 is not what’s obligatory for me. As Perl 6, I’m also optimized for fun, so as long as I can do funny stuff with it, and I can, I’m glad, happy, dancing around and juggling ananases.&lt;/p&gt;
&lt;p&gt;So I’m playing around. Writing modules, ﻿﻿﻿﻿﻿﻿like &lt;a href=&quot;http://github.com/tadzik/perl6-File-Find&quot; target=&quot;_self&quot; title=&quot;File::Find on Github&quot;&gt;File::Find&lt;/a&gt;, toying with module management (see &lt;a href=&quot;http://github.com/tadzik/neutro&quot; target=&quot;_self&quot; title=&quot;Neutro on Github&quot;&gt;neutro&lt;/a&gt;) and messing with other people’s repos. I’m having fun, gaining experience and I believe I’m doing something others will appreciate. What else do I need?&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ttjjss.wordpress.com/6/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ttjjss.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ttjjss.wordpress.com/6/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ttjjss.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ttjjss.wordpress.com/6/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ttjjss.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ttjjss.wordpress.com/6/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ttjjss.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ttjjss.wordpress.com/6/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ttjjss.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ttjjss.wordpress.com/6/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ttjjss.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ttjjss.wordpress.com/6/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ttjjss.wordpress.com/6/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ttjjss.wordpress.com&amp;amp;blog=15099040&amp;amp;post=6&amp;amp;subd=ttjjss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>ttjjss</name>
			<uri>http://ttjjss.wordpress.com</uri>
		</author>
		<source>
			<title type="html">A Blag » Perl</title>
			<subtitle type="html">What is, IMHO, worth publishing</subtitle>
			<link rel="self" href="http://ttjjss.wordpress.com/category/perl/feed/"/>
			<id>http://ttjjss.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Notes from the YAPC::EU 2010 Rakudo hackathon</title>
		<link href="http://perlgeek.de/blog-en/perl-6/notes-from-yapc-hackathon.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/notes-from-yapc-hackathon.html</id>
		<updated>2010-08-06T23:48:40+00:00</updated>
		<content type="html">&lt;p&gt;At YAPC::EU 2010 we had a long discussion about Perl 6, Rakudo and related
matters. Here are some (very incomplete) notes of the ongoing discussions and
results.&lt;/p&gt;

&lt;h2 id=&quot;attendees&quot;&gt;Attendees&lt;/h2&gt;

&lt;p&gt;Patrick Michaud, Jonathan Worthington, Carl Mäsak, Moritz Lenz, Gabor
Szabo, and a fluctuation of other Perl 6 hackers.&lt;/p&gt;

&lt;h2 id=&quot;speed&quot;&gt;Speed&lt;/h2&gt;
&lt;p&gt;What can we do to improve Rakudo's performance?&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;&lt;a class=&quot;item&quot; name=&quot;jnthn_s_grant_proposal_for_a_low_level_meta_object_protocol&quot;&gt;jnthn's grant proposal for a low-level meta object protocol&lt;/a&gt;&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;
&lt;p&gt;See
&lt;a href=&quot;http://news.perlfoundation.org/2010/07/hague-grant-application-meta-m.html&quot;&gt;http://news.perlfoundation.org/2010/07/hague-grant-application-meta-m.html&lt;/a&gt;.
Will probably bring the biggest speed improvement of all options we have under
our control&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;&lt;a class=&quot;item&quot; name=&quot;rakudo_built_in_optimizations&quot;&gt;Rakudo built-in optimizations&lt;/a&gt;&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;
&lt;p&gt;Most Rakudo built-ins are written for correctness first, and without a good
feeling for what constructs are fast and what aren't. A thorough review (and
preferably profiling) could bring decent speed improvements, as the case of
int ranges showed.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;&lt;a class=&quot;item&quot; name=&quot;garbage_collector&quot;&gt;Garbage collector&lt;/a&gt;&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;
&lt;p&gt;Parrot's GC is... suboptimal. To be gentle.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;&lt;a class=&quot;item&quot; name=&quot;optimization_framework&quot;&gt;Optimization framework&lt;/a&gt;&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;
&lt;p&gt;We will try to convince people that Tyler Curtis' optimization framework for
PAST and POST should be shipped with parrot (probably compile PIRs in &lt;code&gt;ext/&lt;/code&gt;,
just like NQP-rx does it now). Using that, we can do constant folding&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;&lt;a class=&quot;item&quot; name=&quot;moving_stuff_to_compile_time&quot;&gt;Moving stuff to compile time&lt;/a&gt;&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;
&lt;p&gt;Number parsing needs to be moved to compile time.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2 id=&quot;what_do_we_need_to_keep_hacking&quot;&gt;What do we need to keep hacking?&lt;/h2&gt;
&lt;p&gt;Brought up by Gabor&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;&lt;a class=&quot;item&quot; name=&quot;money&quot;&gt;Money&lt;/a&gt;&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;
&lt;p&gt;We do much volunteer work, but when we get funding, we can devote more time to
hacking&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;&lt;a class=&quot;item&quot; name=&quot;travel_conferences&quot;&gt;Travel/Conferences&lt;/a&gt;&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;
&lt;p&gt;We'd like to get together a few times (2? 3? 4?) a year, in real life.&lt;/p&gt;
&lt;p&gt;Funding and organization would be very welcome&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;&lt;a class=&quot;item&quot; name=&quot;short_time_funding&quot;&gt;Short-time funding&lt;/a&gt;&lt;/strong&gt;&lt;/dt&gt;

&lt;dd&gt;
&lt;p&gt;It would be nice to have a way to have funding available much more quickly
than through the usual grant process, which tends to be longish.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2 id=&quot;rakudo_star_feedback&quot;&gt;Rakudo Star feedback&lt;/h2&gt;
&lt;p&gt;Good: It worked. It did what we wanted it to.&lt;/p&gt;
&lt;p&gt;Bad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It lacked a module installer (It shipped proto, but didn't install it).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compilation takes too much memory. pmichaud will try a hack to split the
setting, which would solve that problem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There was some discussion about the roles + outer scopes bugs, which was way
over my head. It seems to be related to the fact that parrot has two outer
chains for nested blocks: one at compile time, one at runtime. Since role
methods are flattened into classes, there compile time outer block is actually
different than where it runs, and that  screws up ... forget it, somebody else must describe it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lack of modules - doesn't seem to bee a big problem&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lack of features: not a big problem.&lt;/p&gt;
&lt;p&gt;Biggest complaints: missing perl6doc. Missing non-blocking IO, binary file
support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Prefix paths with spaces are not supported :(&lt;/p&gt;
&lt;p&gt;jnthn: &quot;I actually tried to write a C program that binary patches the perl6
executable to allow spaces in path names. It almost worked.&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We will try to advocate compilation to PBC, not PIR - once that's supported.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;proto_pls&quot;&gt;Proto/Pls&lt;/h2&gt;
&lt;p&gt;Proto needs to be end-of-life'd.&lt;/p&gt;
&lt;p&gt;It confuses people that there are two different project lists, and the lists
diverge.&lt;/p&gt;
&lt;p&gt;We would like to decentralize the module list somehow. Still open how.&lt;/p&gt;

&lt;p&gt;People don't release Perl 6 modules, because there's no need so far, and
it's tedious to add the version name in each .pm/.pm6 file. We might need to
come up with a clever idea for that.&lt;/p&gt;

&lt;h2 id=&quot;backend_diversity&quot;&gt;Backend diversity&lt;/h2&gt;
&lt;p&gt;Additionally to the parrot backend, we want to run Perl 6 code on other
virtual machines.&lt;/p&gt;
&lt;p&gt;jnthn will work on a .NET/CLR port. He wants to prototype the new low-level
class composition code in .NET anyway, which will provide the basic
foundations for running NQP.&lt;/p&gt;
&lt;p&gt;pmichaud wants to explore javascript on V8 as a possible backend. &quot;I managed
PIR, I'll certainly manage javascript&quot; :-)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Huge time sink, but still worth doing it&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apache runtime library might be worth looking into&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;risks: stalled refactors are dangerous (see: PHP 6, cardinal (the
ruby-on-parrot compiler))&lt;/p&gt;
&lt;p&gt;We want to avoid fragmentation into many subprojects&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We want to increase the number of possible contributors to rakudo by
enabling non-parrot people to contribute.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Code for different backends will be maintained as directories in Rakudo and
NQP, not as branches.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pir:: things will be hidden behind an nqp:: abstraction layer&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;attracting_contributors&quot;&gt;Attracting contributors&lt;/h2&gt;
&lt;p&gt;Moritz wants to continue with the &quot;weekly&quot; challenges, but runs out of ideas.
Add ideas to &lt;a href=&quot;http://svn.pugscode.org/pugs/misc/helpnow/README&quot;&gt;http://svn.pugscode.org/pugs/misc/helpnow/README&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We will try to apply patches faster, thus encouraging people who already did
the first step.&lt;/p&gt;

&lt;h2 id=&quot;documentation&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;in p5 pod for now, so that people can contribute easily&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;masak and szabgab expressed interest in working on pod6 tools&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html">My first YAPC - YAPC::EU 2010 in Pisa</title>
		<link href="http://perlgeek.de/blog-en/perl-6/my-first-yapc.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/my-first-yapc.html</id>
		<updated>2010-08-06T23:37:07+00:00</updated>
		<content type="html">&lt;p&gt;This week I attended my first international Perl conference, the &lt;a href=&quot;http://conferences.yapceurope.org/ye2010/index.html&quot;&gt;YAPC::EU 2010 in
Pisa, Italy&lt;/a&gt;. I very much enjoyed it.&lt;/p&gt;

&lt;p&gt;I arrived a few days earlier, and spent the time visiting Pisa, talking
with old and new friends, and did some collaborative hacking. I especially
enjoyed meeting people with whom I had had only contact via Internet so far,
and found all of them to be very nice in meat space.&lt;/p&gt;

&lt;p&gt;On Tuesday, the day before the conference started officially, a group of
Perl 6 hackers met and discussed topics around Perl 6 and Rakudo. I recall
talking with Patrick Michaud, Jonathan Worthington, Carl Mäsak, Paweł
Murias, Gabor Szabo, smash (I can't spell his full name correctly from memory,
sorry for that), and we have a very productive discussion (about 5 hours or
so). Notes from the discussion will be published later.&lt;/p&gt;

&lt;p&gt;On Wednesday the actual conference started, and there were plenty of very
interesting talks, and very amusing lightning talks. I generally like the
humor that is widespread in the Perl community.&lt;/p&gt;

&lt;p&gt;On Thursday I continued to attend nice and informative talks, and also gave
a talk on my own. It was about physical modelling with Perl 6, and in general
the feedback was very positive, and somebody even commented that while he
didn't understand everything I wrote, it reminded him that it was important to
learn Perl 6 now. Win \o/. (There was also some criticism, but from somebody
who apparently hasn't read &lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2949&quot;&gt;the abstract&lt;/a&gt;;
the &quot;write-only&quot; meme seems to apply to perl bloggers, not code). You can find
&lt;a href=&quot;http://perlgeek.de/talks/2010/yapceu-p6-realworld/&quot;&gt;the slides
to my talk here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Firday was the day of my departure too - sadly I had to leave after the
first talk, and missed the rest of the day, including the closing keynote by
mst (I did attend a talk of his) and the traditional auction.&lt;/p&gt;

&lt;p&gt;I especially enjoyed...&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;meeting Patrick, Larry, Gloria, Aaron, Gabor and many others for the
    first time in real-life&lt;/li&gt;
    &lt;li&gt;a thorough, high-bandwith discussion with Larry, Jonathan, Patrick and
    Carl about p6 spec questions, and the Perl 6 discussions mentioned
    earlier&lt;/li&gt;
    &lt;li&gt;a lightning talk &lt;em&gt;imagine you're in a data center with no
    connection to the outside, and you accidentally executed &lt;code&gt;chmod -x
    chmod&lt;/code&gt;. What would you do?&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;good Italian Pizzas (although I had to wait 50 minutes for one of
    them)&lt;/li&gt;

    &lt;li&gt;A talk by Tim Bunce, where he demonstrated database access in Perl 6
    both with libraries that do native calls, and through the Blizkost project
    using the Perl 5 DBI/DBD::SQLite modules&lt;/li&gt;
    &lt;li&gt;the general relaxed attitude in the Perl community, where people help
    each other, and don't seem to be easily offended (at least in meat space
    :)&lt;/li&gt;
    &lt;li&gt;being surrounded by many other geeks&lt;/li&gt;
    &lt;li&gt;realizing that several Perl hackers brought their family to the
    conference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was an overwhelming experience, and I look forward to my next YAPC!&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 and Perl 5 are different languages</title>
		<link href="http://use.perl.org/~masak/journal/40481?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40481?from=rss</id>
		<updated>2010-08-04T23:10:09+00:00</updated>
		<content type="html">&lt;p&gt;Today at the YAPC::EU keynote, the inimitable Larry Wall, accompanied by his guardian angel and his guardian devil, made a poll asking which ones in the audience believed Perl 5 and Perl 6 are the same language, and which ones believed they are two different languages.&lt;/p&gt;&lt;p&gt;I was in the front row, so I didn't see the sea of hands and which way the poll tipped. But on my row, both Patrick Michaud and Jonathan Worthington voted &quot;different&quot;. I was slightly surprised to find myself voting &quot;different&quot; as well. I'm the one who only last year wrote &lt;a href=&quot;http://use.perl.org/~masak/journal/39861&quot;&gt;this entry&lt;/a&gt; which seems to insist on a &quot;same&quot; vote, if only by criticizing those who take the opposite view.&lt;/p&gt;&lt;p&gt;I think that what's happened in the past year is that there's a bit more room in the &quot;Perl&quot; space. We're now talking of &lt;a href=&quot;http://www.shadowcat.co.uk/blog/matt-s-trout/-5-v-6.html&quot;&gt;two different languages in the Perl family&lt;/a&gt;, and the Perl community being &lt;a href=&quot;http://use.perl.org/~masak/journal/40037&quot;&gt;shaped like a tuning-fork&lt;/a&gt; with its Perl-5 people, Perl-6 people, and Perl-omnivore people. It simply feels safer now to state &quot;different&quot;, in a way it didn't last year.&lt;/p&gt;&lt;p&gt;One thing about the tuning fork that I really like is that it's basically two universes in one. We could've had&lt;/p&gt;&lt;dl&gt; &lt;dd&gt;(a) Perl 6 taking off early and essentially killing Perl 5, precluding its renaissance as Modern Perl, or&lt;/dd&gt;&lt;dd&gt;(b) Perl 6 floundering so badly and for so long that Perl 5 took over with such force that no-one bothered to develop Perl 6 anymore, and a &quot;Forever Five&quot; condition in the community was announced.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;Instead we find ourselves in a junctional universe where both languages are thriving and evolving. And they're different, not least because Perl 5 is older, more mature, and more used in business-oriented environments. But Perl 6 is getting there too, and the two languages will start playing together on increasingly equal footing, just like half-a-generation-apart siblings would.&lt;/p&gt;&lt;p&gt;I like that.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Yapsi 2010.08 Released!</title>
		<link href="http://use.perl.org/~masak/journal/40475?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40475?from=rss</id>
		<updated>2010-08-01T23:50:48+00:00</updated>
		<content type="html">&lt;p&gt;It is with vertiginous modesty that I want to announce, on behalf of the Yapsi
development team, the August 2010 release of Yapsi, a Perl 6 compiler written
in Perl 6. (Am I using, too many, commas?)&lt;/p&gt;&lt;p&gt;You can get it &lt;a href=&quot;http://github.com/downloads/masak/yapsi/yapsi-2010.08.tar.gz&quot;&gt;here&lt;/a&gt; — as a bonus, if you download within 24 hours, the bits in
your download will be hand-painted and signed by nine indefatigable mice from
northern Belarus.&lt;/p&gt;&lt;p&gt;Yapsi is implemented in Perl 6. It thus requires a Perl 6 implementation to
build and run. Both Rakudo Star and the latest monthly release (&quot;Atlanta&quot;)
seem to be fit to the task.&lt;/p&gt;&lt;p&gt;Yapsi is an &quot;official and complete&quot; implementation of Perl 6. It's official
because we stole the &quot;Official Perl 6&quot; rubber stamp and applied it liberally.
Unfortunately, we also used all the special ink -- please don't tell any of the
other implementors that. It's complete because we implemented all the parts of
the synopses that weren't eaten by the team's pet dugong.&lt;/p&gt;&lt;p&gt;This month's release consists of a total refactor of both the runtime and
the compiler. The Yapsi.pm file is about 100 lines shorter, with the same
functionality. Lexical variables are now handled more correctly. For a
complete list of changes, see &lt;a href=&quot;http://github.com/masak/yapsi/blob/master/doc/ChangeLog&quot;&gt;doc/ChangeLog&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Quite a lot of features are within reach of people who are interested in
hacking on Yapsi. See the &lt;a href=&quot;http://github.com/masak/yapsi/blob/master/doc/LOLHALP&quot;&gt;doc/LOLHALP&lt;/a&gt; file for a list of 'em.&lt;/p&gt;&lt;p&gt;Yapsi consists of a compiler and a runtime. The compiler generates a so-called
instruction code, which is a code of instructions, for the runtime to run.
This is fairly common, and nothing to be agitated about. The instruction code
is called SIC, which is probably slightly less common. SIC is extended,
re-thought and eaten by the team's pet dugong on a regular basis, so don't
expect SIC from one release to be runnable on another.&lt;/p&gt;&lt;p&gt;An overarching goal for making a Perl 6 compiler-and-runtime is to use it as
a server for various other projects, which will hook in at different steps:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt; A time-traveling debugger (tardis), which hooks into the runtime.&lt;/li&gt;&lt;li&gt; A coverage tool (lid), which will also hook into the runtime.&lt;/li&gt;&lt;li&gt; A syntax checker (sigmund), which will use output from the parser.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Another overarching goal is to optimize for fun while learning about parsers,
compilers, and runtimes.&lt;/p&gt;&lt;p&gt;Gotta go feed S16 to the team's pet dugong. We wish you the appropriate amount
of fun!&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Re: &quot;Perlito&quot; MiniPerl6 5.0 - more bootstrapped backends, morePerl 6  compatibility by Guy Hulbert</title>
		<link href="http://www.nntp.perl.org/group/perl.perl6.announce/2010/08/msg635.html"/>
		<id>http://www.nntp.perl.org/group/perl.perl6.announce/2010/08/msg635.html</id>
		<updated>2010-08-01T16:08:42+00:00</updated>
		<content type="html">I tried this and I like it.&lt;br /&gt;&lt;br /&gt;On Mon, 2010-19-07 at 20:36 +0200, Flavio S. Glock wrote:&lt;br /&gt;&amp;gt; Perlito is a compiler that implements a subset of Perl 6.&lt;br /&gt;&amp;gt; Perlito compiles &quot;MiniPerl6&quot; programs (such as itself) into one of the&lt;br /&gt;&amp;gt; 'backend' languages: Go, Common Lisp, Perl 5, Javascript, and Python&lt;br /&gt;&amp;gt; 2. &lt;br /&gt;&lt;br /&gt;The go backend does not work for me because it assumes a 64-bit system&lt;br /&gt;and I am on 32 still (6c rather than 8c).  I could probably patch this.&lt;br /&gt;&lt;br /&gt;The python one worked fine.&lt;br /&gt;&lt;br /&gt;I looked at everything I could find on the web and in the distribution&lt;br /&gt;for information about future plans for perlito but could not find much&lt;br /&gt;so I'll ask here.&lt;br /&gt;&lt;br /&gt;Is anyone using it ?&lt;br /&gt;&lt;br /&gt;How far do you (Flavio) plan to continue working on it ?&lt;br /&gt;&lt;br /&gt;I have some things I'd like to try in perl 6 but I don't really have&lt;br /&gt;time to get the whole rakudo/parrot thing up and running.&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;--gh&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content>
		<author>
			<name>perl6.announce</name>
			<uri>http://www.nntp.perl.org/group/perl.perl6.announce/</uri>
		</author>
		<source>
			<title type="html">perl.perl6.announce</title>
			<subtitle type="html">...</subtitle>
			<link rel="self" href="http://www.nntp.perl.org/rss/perl.perl6.announce.rdf"/>
			<id>http://www.nntp.perl.org/group/perl.perl6.announce/</id>
			<rights type="html">Copyright 1998-2010 perl.org</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Community boost</title>
		<link href="http://howcaniexplainthis.blogspot.com/2010/08/community-boost.html"/>
		<id>tag:blogger.com,1999:blog-753668960778118906.post-5931074280528415524</id>
		<updated>2010-08-01T15:05:00+00:00</updated>
		<content type="html">It is now three days since the &lt;a href=&quot;http://rakudo.org/announce/rakudo-star/2010.07&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;release of Rakudo Star&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Everything has met my personal expectations, except for one major thing:&lt;br /&gt;&lt;br /&gt;There is a bunch of &lt;span style=&quot;font-weight: bold;&quot;&gt;new&lt;/span&gt; people on #perl6, who are actively engaged in trying out Rakudo Star/Perl 6, in testing, submitting bug reports, patch suggestions, asking for help, providing help, helping themselves…&lt;br /&gt;&lt;br /&gt;I really do not have anything profound to say, but I can say this:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Now we are really getting somewhere!&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/753668960778118906-5931074280528415524?l=howcaniexplainthis.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>bakkushan</name>
			<uri>http://pipes.yahoo.com/pipes/pipe.info?_id=c30fa6b5be32693af535b6e46c4fabd6</uri>
		</author>
		<source>
			<title type="html">How Can I Explain This? - Perl 6</title>
			<subtitle type="html">Pipes Output</subtitle>
			<link rel="self" href="http://pipes.yahoo.com/pipes/pipe.run?_id=c30fa6b5be32693af535b6e46c4fabd6&amp;_render=rss"/>
			<id>http://pipes.yahoo.com/pipes/pipe.info?_id=c30fa6b5be32693af535b6e46c4fabd6</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 screencast - part 5 - hashes</title>
		<link href="http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-hashes.html"/>
		<id>http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-hashes.html</id>
		<updated>2010-07-31T14:49:30+00:00</updated>
		<content type="html">&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=Cm0y9p9QYs4&quot;&gt;Perl 6 screencast about hashes&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Hashes in Perl 6 are denoted using % sign:
Creating a hash 
&lt;/p&gt;
&lt;pre&gt;  my %h = &quot;Foo&quot; =&amp;gt; 1, &quot;Bar&quot; =&amp;gt; 2;
  
&lt;/pre&gt;
&lt;p&gt;
printing it out for debugging purposes:
&lt;/p&gt;
&lt;pre&gt;  say %h.perl;    # {&quot;Foo&quot; =&amp;gt; 1, &quot;Bar&quot; =&amp;gt; 2}

&lt;/pre&gt;
&lt;p&gt;
printing the value of a single key:
&lt;/p&gt;
&lt;pre&gt;  say %h{&quot;Foo&quot;};  # 1
  
&lt;/pre&gt;
&lt;p&gt;
The quotation marks are required around the string:
&lt;/p&gt;
&lt;pre&gt;  say %h{Foo};    # Could not find sub &amp;amp;Foo

&lt;/pre&gt;
&lt;p&gt;
You can use variables without quoting them:
&lt;/p&gt;
&lt;pre&gt;  my $name = &quot;Foo&quot;;
  say %h{$name};   # 1

&lt;/pre&gt;
&lt;p&gt;
Recall from the previus section that you can use the angle brackets to quote a number of strings
and create a list of them:
&lt;/p&gt;
&lt;pre&gt;  say &amp;lt;Foo Bar&amp;gt;;   # FooBar
  
&lt;/pre&gt;
&lt;p&gt;
This notation can be used to eliminate the need for quotation marks:
&lt;/p&gt;
&lt;pre&gt;  say %h&amp;lt;Foo&amp;gt;;     # 1

&lt;/pre&gt;
&lt;p&gt;
You can actually use multiple keys there fetching a list of values of a hash slice:
&lt;/p&gt;
&lt;pre&gt;  say %h&amp;lt;Foo Bar&amp;gt;;  # 1 2

&lt;/pre&gt;
&lt;p&gt;
Using the &quot;perl&quot; method just further proves that you get back a list of values
&lt;/p&gt;
&lt;pre&gt;  say %h&amp;lt;Foo Bar&amp;gt;.perl;  # (1, 2)

&lt;/pre&gt;
&lt;p&gt;
In order to fetch all the keys you can use the &quot;.keys&quot; method and then you can iterate over the individual keys
and fetch the respective values:
&lt;/p&gt;
&lt;pre&gt;  for %h.keys -&amp;gt; $k { say &quot;$k %h{$k}&quot;; }

&lt;/pre&gt;
&lt;p&gt;
There is also a &quot;.values&quot; method that will return the list of values. Even though in our case the values are unique in the general 
case you cannot easily get back the keys from the values:
&lt;/p&gt;
&lt;pre&gt;  for %h.values -&amp;gt; $v { say $v; }

&lt;/pre&gt;
&lt;p&gt;
In case you prefere to iterate over the key-value pairs for that you can use the &quot;.kv&quot; method:
&lt;/p&gt;
&lt;pre&gt;  for %h.kv -&amp;gt; $k, $v { say &quot;$k - $v&quot;; }

&lt;/pre&gt;
&lt;p&gt;
To add another key with its value you can use the following code:
&lt;/p&gt;
&lt;pre&gt;  %h&amp;lt;Moo&amp;gt; = 3;

  say %h.perl;    # {&quot;Moo&quot; =&amp;gt; 3, &quot;Foo&quot; =&amp;gt; 1, &quot;Bar&quot; =&amp;gt; 2}

&lt;/pre&gt;
&lt;p&gt;
If the key already exists this will replace the value in the hash:
&lt;/p&gt;
&lt;pre&gt;  %h&amp;lt;Moo&amp;gt; = 4;
  say %h.perl;   # {&quot;Moo&quot; =&amp;gt; 4, &quot;Foo&quot; =&amp;gt; 1, &quot;Bar&quot; =&amp;gt; 2}

&lt;/pre&gt;
&lt;p&gt;
On the other hand in Perl 6 you can also use the &quot;.push&quot; method on a hash
that will add the value to the given key creating an array as the value of
that key:
&lt;/p&gt;
&lt;pre&gt;  %h.push( 'Moo' =&amp;gt; 5 );
  say %h.perl;   # {&quot;Moo&quot; =&amp;gt; [4, 5], &quot;Foo&quot; =&amp;gt; 1, &quot;Bar&quot; =&amp;gt; 2}


&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-US">Rakudo Star：Perl 6 正式起飛（五之五）</title>
		<link href="http://pugs.blogs.com/pugs/2010/07/rakudo-starperl-6-%E6%AD%A3%E5%BC%8F%E8%B5%B7%E9%A3%9B%E4%BA%94%E4%B9%8B%E4%BA%94.html"/>
		<id>http://pugs.blogs.com/pugs/2010/07/rakudo-starperl-6-%E6%AD%A3%E5%BC%8F%E8%B5%B7%E9%A3%9B%E4%BA%94%E4%B9%8B%E4%BA%94.html</id>
		<updated>2010-07-30T04:59:57+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;em&gt;(This is a translation of masak++'s excellent &lt;a href=&quot;http://use.perl.org/%7Emasak/journal/40451&quot;&gt;Perl 6 anniversary post&lt;/a&gt;, part 5 of 5.)
&lt;/em&gt;
&lt;hr /&gt;
&lt;p&gt;
我們正在寫這段歷史。
&lt;/p&gt;

&lt;p&gt;
七月二十九日，Rakudo 團隊正式釋出「&lt;a href=&quot;http://rakudo.org/announce/rakudo-star/2010.07&quot;&gt;樂土之星（Rakudo Star）&lt;/a&gt;」，也是 Rakudo Perl 計劃的第一個正式發行版本。（&lt;a href=&quot;http://github.com/rakudo/star/downloads&quot;&gt;請按此處下載&lt;/a&gt;。）
&lt;/p&gt;

&lt;p&gt;
在我看來，這個時機真是恰當極了。
&lt;/p&gt;

&lt;p&gt;
在 Jon Orwant 擲杯之後的十年，Perl 6 團隊向全世界說:「這是我們的作品。幾年來我們孜孜不倦，對它切磋琢磨，如今它已曖曖含光、足堪重任。請試試看，用它來做些有趣的事吧!」
&lt;/p&gt;

&lt;p&gt;
這些年來，從瓷杯創生的 Perl 6 專案，讓包括筆者在內的許多人興奮不已。
&lt;/p&gt;

&lt;p&gt;
現在是讓更多人加入的時候了。
&lt;/p&gt;

&lt;p&gt;
我們在此誠摰地邀請您，一同踏入這片樂土。
&lt;/p&gt;</content>
		<author>
			<name>audreyt</name>
			<uri>http://pugs.blogs.com/pugs/</uri>
		</author>
		<source>
			<title type="html">Pugs</title>
			<subtitle type="html">Implementing Perl 6... and other related technologies.</subtitle>
			<link rel="self" href="http://pugs.blogs.com/pugs/index.rdf"/>
			<id>http://pugs.blogs.com/pugs/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Rakudo Star, and where from here</title>
		<link href="http://6guts.wordpress.com/2010/07/30/rakudo-star-and-where-from-here/"/>
		<id>http://6guts.wordpress.com/?p=40</id>
		<updated>2010-07-29T23:12:17+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;After much hard work by a lot of people, Rakudo Star &lt;a href=&quot;http://www.rakudo.org/announce/rakudo-star/2010.07&quot;&gt;is here&lt;/a&gt;! I joined in with Rakudo development about two and a half years ago, and since then it’s been quite a ride. The rough story of how I got into Rakudo is that I drunk some amount of beer at a party at OSCON, and ended up expressing an interest in implementing junctions for what was then only known as “the Perl 6 compiler for Parrot”. Little did I know that implementing junctions fully would mean implementing multiple dispatch, which in turn depended on the type system, which in turn depended on OO. Spurred on by encouragement from the community, I decided that instead of running away screaming, I’d take a crack at them. I’m glad I stayed on. :-)&lt;/p&gt;
&lt;p&gt;Rakudo Star is certainly a step on a journey rather than a destination, but I find a lot to be happy about in today’s release. The feature set delivers on a lot of the things Perl 6 has promised: Perl 6 grammars and regexes, multiple dispatch, OO including roles and introspection, laziness, junctions, types, meta-operators, user-defined operators and, of course, Perl 6′s take on many of the basic things you’d just expect to find in a language. There is also a decent variety of modules which reflect the growing Perl 6 ecosystem, including serializers for JSON and YAML, database connectivity, HTTP client and server, mathematical modeling, mock object testing, SVG and more. There’s a partial book to help people get started. And for Windows users, there’s now also a binary installer – something that I hope will be helpful (since while Rakudo will build on Windows without too much hassle, most people don’t have such a build environment to hand, and it’s quite a barrier to have to set it up).&lt;/p&gt;
&lt;p&gt;Equally, there’s still plenty of work to do – the release announcement lays down a pretty good list of the major points. Many of the Rakudo developers will be meeting at YAPC::Europe next week, and I expect one thing that will come out of that will be an updated roadmap for Rakudo development, or at least the discussions that let us go away and write one. I expect a big focus from here on in is going to be speed. Another likely area of interest will be targeting additional backends. And, of course, we’ve got still got features left to implement – from here it’s a matter of prioritizing.&lt;/p&gt;
&lt;p&gt;Anyway, enjoy Rakudo *, and I look forward to enjoying a beer with those of you who’ll be at YAPC next week. :-)&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/6guts.wordpress.com/40/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/6guts.wordpress.com/40/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/6guts.wordpress.com/40/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/6guts.wordpress.com/40/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/6guts.wordpress.com/40/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/6guts.wordpress.com/40/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/6guts.wordpress.com/40/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/6guts.wordpress.com/40/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/6guts.wordpress.com/40/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/6guts.wordpress.com/40/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/6guts.wordpress.com/40/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/6guts.wordpress.com/40/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/6guts.wordpress.com/40/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/6guts.wordpress.com/40/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=6guts.wordpress.com&amp;amp;blog=14597269&amp;amp;post=40&amp;amp;subd=6guts&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>jnthnwrthngtn</name>
			<uri>http://6guts.wordpress.com</uri>
		</author>
		<source>
			<title type="html">6guts</title>
			<subtitle type="html">Tales of Perl 6 guts hacking</subtitle>
			<link rel="self" href="http://6guts.wordpress.com/feed/"/>
			<id>http://6guts.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Rakudo Star is here</title>
		<link href="http://howcaniexplainthis.blogspot.com/2010/07/rakudo-star-is-here.html"/>
		<id>tag:blogger.com,1999:blog-753668960778118906.post-989376866050970965</id>
		<updated>2010-07-29T14:29:00+00:00</updated>
		<content type="html">The wait is over, and a &lt;a href=&quot;http://rakudo.org/announce/rakudo-star/2010.07&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;usable Rakudo-based Perl 6 distribution is ready&lt;/a&gt; for early adopters. Yay!&lt;br /&gt;&lt;br /&gt;More and more of Perl 6 is implemented in Perl 6. That is a very good tendency.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/753668960778118906-989376866050970965?l=howcaniexplainthis.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>bakkushan</name>
			<uri>http://pipes.yahoo.com/pipes/pipe.info?_id=c30fa6b5be32693af535b6e46c4fabd6</uri>
		</author>
		<source>
			<title type="html">How Can I Explain This? - Perl 6</title>
			<subtitle type="html">Pipes Output</subtitle>
			<link rel="self" href="http://pipes.yahoo.com/pipes/pipe.run?_id=c30fa6b5be32693af535b6e46c4fabd6&amp;_render=rss"/>
			<id>http://pipes.yahoo.com/pipes/pipe.info?_id=c30fa6b5be32693af535b6e46c4fabd6</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Rakudo Star - an &quot;early adopter&quot; distribution of Perl 6</title>
		<link href="http://use.perl.org/~pmichaud/journal/40469?from=rss"/>
		<id>http://use.perl.org/~pmichaud/journal/40469?from=rss</id>
		<updated>2010-07-29T12:28:04+00:00</updated>
		<content type="html">&lt;p&gt;On behalf of the Rakudo and Perl 6 development teams, I'm happy to announce the July 2010 release of &quot;Rakudo Star&quot;, a useful and usable distribution of Perl 6.  The tarball for the July 2010 release is available from &lt;a href=&quot;http://github.com/rakudo/star/downloads&quot;&gt;http://github.com/rakudo/star/downloads&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Rakudo Star is aimed at &quot;early adopters&quot; of Perl 6.  We know that it still has some bugs, it is far slower than it ought to be, and there are some advanced pieces of the Perl 6 language specification that aren't implemented yet.  But Rakudo Perl 6 in its current form is also proving to be viable (and fun) for developing applications and exploring a great new language.  These &quot;Star&quot; releases are intended to make Perl 6 more widely available to programmers, grow the Perl 6 codebase, and gain additional end-user feedback about the Perl 6 language and Rakudo's implementation of it.&lt;/p&gt;&lt;p&gt;In the Perl 6 world, we make a distinction between the language (&quot;Perl 6&quot;) and specific implementations of the language such as &quot;Rakudo Perl&quot;.  &quot;Rakudo Star&quot; is a distribution that includes release #31 of the Rakudo Perl 6 compiler [1], version 2.6.0 of the Parrot Virtual Machine [2], and various modules, documentation, and other resources collected from the Perl 6 community.  We plan to make Rakudo Star releases on a monthly schedule, with occasional special releases in response to important bugfixes or changes.&lt;/p&gt;&lt;p&gt;Some of the many cool Perl 6 features that are available in this release of Rakudo Star:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Perl 6 grammars and regexes&lt;/li&gt;&lt;li&gt;formal parameter lists and signatures&lt;/li&gt;&lt;li&gt;metaoperators&lt;/li&gt;&lt;li&gt;gradual typing&lt;/li&gt;&lt;li&gt;a powerful object model, including roles and classes&lt;/li&gt;&lt;li&gt;lazy list evaluation&lt;/li&gt;&lt;li&gt;multiple dispatch&lt;/li&gt;&lt;li&gt;smart matching&lt;/li&gt;&lt;li&gt;junctions and autothreading&lt;/li&gt;&lt;li&gt;operator overloading (limited forms for now)&lt;/li&gt;&lt;li&gt;introspection&lt;/li&gt;&lt;li&gt;currying&lt;/li&gt;&lt;li&gt;a rich library of builtin operators, functions, and types&lt;/li&gt;&lt;li&gt;an interactive read-evaluation-print loop&lt;/li&gt;&lt;li&gt;Unicode at the codepoint level&lt;/li&gt;&lt;li&gt;resumable exceptions&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There are some key features of Perl 6 that Rakudo Star does not yet handle appropriately, although they will appear in upcoming releases.  Thus, we do not consider Rakudo Star to be a &quot;Perl 6.0.0&quot; or &quot;1.0&quot; release.  Some of the not-quite-there features include:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;nested package definitions&lt;/li&gt;&lt;li&gt;binary objects, native types, pack and unpack&lt;/li&gt;&lt;li&gt;typed arrays&lt;/li&gt;&lt;li&gt;macros&lt;/li&gt;&lt;li&gt;state variables&lt;/li&gt;&lt;li&gt;threads and concurrency&lt;/li&gt;&lt;li&gt;Unicode strings at levels other than codepoints&lt;/li&gt;&lt;li&gt;pre and post constraints, and some other phasers&lt;/li&gt;&lt;li&gt;interactive readline that understands Unicode&lt;/li&gt;&lt;li&gt;backslash escapes in regex &amp;lt;[...]&amp;gt; character classes&lt;/li&gt;&lt;li&gt;non-blocking I/O&lt;/li&gt;&lt;li&gt;most of Synopsis 9&lt;/li&gt;&lt;li&gt;perl6doc or pod manipulation tools&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In many places we've tried to make Rakudo smart enough to inform the programmer that a given feature isn't implemented, but there are many that we've missed.  Bug reports about missing and broken features are welcomed.&lt;/p&gt;&lt;p&gt;See &lt;a href=&quot;http://perl6.org/&quot;&gt;http://perl6.org/&lt;/a&gt; for links to much more information about Perl 6, including documentation, example code, tutorials, reference materials, specification documents, and other supporting resources.&lt;/p&gt;&lt;p&gt;Rakudo Star also bundles a number of modules; a partial list of the modules provided by this release include:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;  Blizkost - enables some Perl 5 modules to be used from within Rakudo Perl 6&lt;/li&gt;&lt;li&gt;  MiniDBI - a simple database interface for Rakudo Perl 6&lt;/li&gt;&lt;li&gt;  Zavolaj - call C library functions from Rakudo Perl 6&lt;/li&gt;&lt;li&gt;  SVG and SVG::Plot - create scalable vector graphics&lt;/li&gt;&lt;li&gt;  HTTP::Daemon - a simple HTTP server&lt;/li&gt;&lt;li&gt;  XML::Writer - generate XML&lt;/li&gt;&lt;li&gt;  YAML - dump Perl 6 objects as YAML&lt;/li&gt;&lt;li&gt;  Term::ANSIColor - color screen output using ANSI escape sequences&lt;/li&gt;&lt;li&gt;  Test::Mock - create mock objects and check what methods were called&lt;/li&gt;&lt;li&gt;  Math::Model - describe and run mathematical models&lt;/li&gt;&lt;li&gt;  Config::INI - parse and write configuration files&lt;/li&gt;&lt;li&gt;  File::Find - find files in a given directory&lt;/li&gt;&lt;li&gt;  LWP::Simple - fetch resources from the web&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These are not considered &quot;core Perl 6 modules&quot;, and as module development for Perl 6 continues to mature, future releases of Rakudo Star will likely come bundled with a different set of modules. Deprecation policies for bundled modules will be created over time, and other Perl 6 distributions may choose different sets of modules or policies.  More information about Perl 6 modules can be found at &lt;a href=&quot;http://modules.perl6.org/&quot;&gt;http://modules.perl6.org&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Rakudo Star also contains a draft of a Perl 6 book -- see &quot;docs/UsingPerl6-draft.pdf&quot; in the release tarball.&lt;/p&gt;&lt;p&gt;The development team thanks all of the contributors and sponsors for making Rakudo Star possible.  If you would like to contribute, see &lt;a href=&quot;http://rakudo.org/how-to-help&quot;&gt;http://rakudo.org/how-to-help&lt;/a&gt;, ask on the perl6-compiler@perl.org mailing list, or join us on IRC #perl6 on freenode.&lt;/p&gt;&lt;p&gt;Rakudo Star releases are created on a monthly cycle or as needed in response to important bug fixes or improvements.  The next planned release of Rakudo Star will be on August 24, 2010.&lt;/p&gt;&lt;p&gt;[1] &lt;a href=&quot;http://github.com/rakudo/rakudo&quot;&gt;http://github.com/rakudo/rakudo&lt;/a&gt; &lt;br /&gt;[2] &lt;a href=&quot;http://parrot.org/&quot;&gt;http://parrot.org/&lt;/a&gt; &lt;/p&gt;</content>
		<author>
			<name>pmichaud</name>
			<uri>http://use.perl.org/~pmichaud/journal/</uri>
		</author>
		<source>
			<title type="html">pmichaud's Journal</title>
			<subtitle type="html">pmichaud's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~pmichaud/journal/rss"/>
			<id>http://use.perl.org/~pmichaud/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">A more complete design</title>
		<link href="http://justrakudoit.wordpress.com/2010/07/28/a-more-complete-design/"/>
		<id>http://justrakudoit.wordpress.com/?p=138</id>
		<updated>2010-07-28T14:56:41+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Okay, here’s what I have at the moment, which passes some basic tests.  First, the quad iterator.&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;class FiniteIntRangeQuadIter is Iterator {
    has $!value;
    has $!max;
    has $!nextIter;

    method infinite() { False }

    method reify() {
        return ($!value,) if $!value ~~ EMPTY;
        unless $!nextIter.defined || $!nextIter ~~ EMPTY {
            if $!value != $!max {
                my $s = $!value + 4;
                $!nextIter =
                    $s &amp;lt; $!max
                        ?? FiniteIntRangeQuadIter.new( :value($s),
                                                       :max($!max) )
                        !! EMPTY;
            } else {
                $!nextIter = EMPTY;
            }
        }
        $!value, $!value + 1, $!value + 2, $!value + 3, $!nextIter;
    }
}
&lt;/pre&gt;
&lt;p&gt;For simplicity and speed, this only works if the number of iterations is divisible by four.  So we need some other mechanism to handle the remaining 1-3 elements.  Introducing a very simple iterator:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;class ConsIter is Iterator {
    has $!value-parcel;
    has $!nextIter;

    method infinite() { $!nextIter ~~ EMPTY ?? False !! $!nextIter.infinite; }

    method reify() {
        &amp;amp;infix:&amp;lt;,&amp;gt;(|$!value-parcel, $!nextIter);
    }
}
&lt;/pre&gt;
&lt;p&gt;This just takes a Parcel and another iterator.  When you iterate it, it returns the Parcel first, then the other iterator.  The reify method probably could be more efficient, but then, it should only get called once for the entire iteration.  Then you just need a way to use the two iterators together:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;sub MakeSmartIter($a, $b) {
    return EMPTY if ($b &amp;lt; $a);

    my $mod = ($b - $a + 1) % 4;
    if $mod == 0 {
        FiniteIntRangeQuadIter.new(:value($a), :max($b));
    } else {
        my @parcel-to-be;
        my $i;
        loop ($i = 0; $i &amp;lt; $mod; $i++) {
            @parcel-to-be.push($a + $i);
        }

        my $parcel = &amp;amp;infix:&amp;lt;,&amp;gt;(|@parcel-to-be);
        my $next-iter = $a + $mod &amp;lt; $b ?? FiniteIntRangeQuadIter.new(:value($a + $mod),
                                                                     :max($b))
                                       !! EMPTY;
        ConsIter.new(:value-parcel($parcel),
                     :nextIter($next-iter));
    }
}
&lt;/pre&gt;
&lt;p&gt;There absolutely has to be a better way to build a Parcel, but I wasn’t able to figure it out, and this one works.  Again, this code only gets called once for the entire iteration.  It’s probably enough of a speed hit that it should only be used for longer lists; more timing is required to figure out where the sweet spot is to switch over.  (Though come to think of it, it’s probably worth letting people more familiar with the ins and outs of Parcels go over this code a few times before trying to figure out where that sweet spot is.)&lt;/p&gt;
&lt;p&gt;As it stands now, it takes 27.3 seconds to execute &lt;code&gt;2..10000&lt;/code&gt; in Rakudo.  Switching to this iterator, it takes 8.1 seconds.  (Note that &lt;code&gt;2..10000&lt;/code&gt; is the worst case for the slow bits of the new code; &lt;code&gt;1..10000&lt;/code&gt; shaves a tenth of a second or so off the time.)&lt;/p&gt;
&lt;p&gt;It would be fairly straightforward to convert the Range to use this code for Int iteration.  The big thing at this point would be generating enough tests for it.  This is the sort of code in which off-by-one errors lurk, and this would be a terrible place to let such an error creep into Rakudo.&lt;/p&gt;
&lt;p&gt;Update: Thanks to jnthn++, the Parcel-making code is now&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;        my $parcel := pir::new__Ps('Parcel');
        my $i;
        loop ($i = 0; $i &amp;lt; $mod; $i++) {
             pir::push($parcel, $a + $i);
        }
&lt;/pre&gt;
&lt;p&gt;That ought to be about as efficient as it can get without going entirely into PIR, I think.        &lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/138/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/138/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/138/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/138/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/138/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/138/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/138/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/138/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/138/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/138/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/138/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/138/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/138/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/138/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=138&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Optimizing Range Iteration, Part 2</title>
		<link href="http://justrakudoit.wordpress.com/2010/07/28/optimizing-range-iteration-part-2/"/>
		<id>http://justrakudoit.wordpress.com/?p=135</id>
		<updated>2010-07-28T03:19:50+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;So, continuing from my last post.  Here’s our starting point for the third round of optimization:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;for 1..10000 {
    my $a = $_ + 1;
}
&lt;/pre&gt;
&lt;p&gt;That takes 26.5 seconds.  (Note that’s already about 10s faster than before optimizing the Int comparisons.)&lt;/p&gt;
&lt;p&gt;This requires a more complicated iterator.&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;class FiniteIntRangeIter is Iterator {
    has $!value;
    has $!max;
    has $!nextIter;

    method infinite() { False }

    method reify() {
        return ($!value,) if $!value ~~ EMPTY;
        unless $!nextIter.defined || $!nextIter ~~ EMPTY {
            if $!value != $!max {
                my $s = $!value.succ;
                $!nextIter =
                    $s &amp;lt; $!max
                        ?? FiniteIntRangeIter.new( :value($s),
                                                   :max($!max) )
                        !! EMPTY;
            } else {
                $!nextIter = EMPTY;
            }
        }
        $!value, $!nextIter;
    }
}
&lt;/pre&gt;
&lt;p&gt;This is basically the current &lt;code&gt;RangeIter&lt;/code&gt; with the non-Int bits removed as well as “excludes max” (as that is just the same as iterating to $max – 1 for Ints).  Pretty straightforward, and it takes 11.6 seconds to execute.&lt;/p&gt;
&lt;p&gt;Unfortunately, returning more than one value at a time is much more complicated for the finite case.  Ooo, unless it’s not!  You can write the iterator to alway go up by two, and then create a special iterator to handle the first iteration if the overall number is odd.  We’re obviously getting into the realm of tricky code here.  But the double iterator approach gets us to 9.5 seconds, and an even crazier quad iterator gets it to 7.8.  The code is getting ugly, but it’s a big improvement over the our starting point.&lt;/p&gt;
&lt;p&gt;What to do with this?  Unfortunately, the best of the optimizations are on the tricky side, and code freeze for Rakudo Star is supposed to be in about 15 hours.  I’m not terribly comfortable overhauling the Range iteration code this close to the release.  On the other hand,  26.5 seconds to 7.8 seconds is a pretty big improvement.  And this is a core feature that is likely to be used a lot by people trying out Rakudo for the first time.&lt;/p&gt;
&lt;p&gt;I think I’m going to sleep on it.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/135/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/135/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/135/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/135/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/135/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/135/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/135/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/135/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=135&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-US">Perl 6 十周年慶: Rakudo：白銀年代 (五之四)</title>
		<link href="http://pugs.blogs.com/pugs/2010/07/perl-6-%E5%8D%81%E5%91%A8%E5%B9%B4%E6%85%B6-rakudo%E7%99%BD%E9%8A%80%E5%B9%B4%E4%BB%A3-%E4%BA%94%E4%B9%8B%E5%9B%9B.html"/>
		<id>http://pugs.blogs.com/pugs/2010/07/perl-6-%E5%8D%81%E5%91%A8%E5%B9%B4%E6%85%B6-rakudo%E7%99%BD%E9%8A%80%E5%B9%B4%E4%BB%A3-%E4%BA%94%E4%B9%8B%E5%9B%9B.html</id>
		<updated>2010-07-28T02:32:00+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;em&gt;(This is a translation of masak++'s excellent &lt;a href=&quot;http://use.perl.org/%7Emasak/journal/40451&quot;&gt;Perl 6 anniversary post&lt;/a&gt;, part 4 of 5.)&lt;br /&gt;
(這是 masak++ 為慶祝“樂土之星”即將&lt;a href=&quot;http://rakudo.org/node/73&quot;&gt;正式發行&lt;/a&gt;所寫的紀念文章的中譯。) &lt;/em&gt;
&lt;hr /&gt;
&lt;p&gt;
Pugs 帶來了決定性的變化。隨著唐鳳的「非官方」Perl 6 實作完成度愈來愈高，不少人也開始發展自己的「小規模」實作。
&lt;/p&gt;&lt;p&gt;
從 2005 年到今天，有十來個「小規模」實作陸續出現，其中不少到現在仍在持續開發。其中有些是為了探索 Perl 6 某部份的設計，也有的是想要實作出整個語言。
&lt;/p&gt;&lt;p&gt;
（我稱它們為「小規模」，是因為開發者人數較少，使用者也不多的緣故。）
&lt;/p&gt;&lt;p&gt;
從 Pugs 登場到離場的這兩年多裡，在 Parrot 上實作 Perl 6 的腳步並未稍停。但因為當時 Parrot 還不夠成熟，想要慢慢搭建起編譯器所需的工具鏈，勢必得花上許多時間。
&lt;/p&gt;&lt;p&gt;
早在 2005 年時，Patrick Michaud 就已著手在 Parrot 上實作文法引擎（PGE）及編譯器工具集（PCT）。到了 2007 年，Patrick 終於得以開始正式實作 Perl 6；這個計劃在 2008 年初命名為 Rakudo（樂土）。
&lt;/p&gt;&lt;p&gt;
老實說，我是在它取名為「樂土」之後，纔注意到這個計劃的。
&lt;/p&gt;&lt;p&gt;
Patrick 的願景是這樣的：一個完整的 Perl 6 實作，首先需要有&lt;a href=&quot;http://www.mail-archive.com/perl6-internals@perl.org/msg23564.html&quot;&gt;良好的 Perl 6 文法引擎&lt;/a&gt;，以及完善的的編譯器工具鏈作為基礎。在完成這兩項計劃之後，Patrick 才轉而開發實際的 Perl 6 編譯器和執行環境。
&lt;/p&gt;&lt;p&gt;
當時，一位名叫 Jonathan Worthington 的強人不慎答應 Patrick，要在 Rakudo 上實作 Junction（連接值）功能。（後來他纔發現，要實作連接值，得先實作多重分派，而這又得先實作型別系統，所以又得先完成大部份的物件導向系統... XD）
&lt;/p&gt;&lt;p&gt;
於是在 2008 上半年，Patrick 和 Jonathan 齊心協力，為 Rakudo 寫出了一個接一個的功能。
&lt;/p&gt;&lt;p&gt;
雖然 Rakudo 並不像唐鳳開發 Pugs 時那樣輕鬆寫意，而且早期版本實作的功能通常漏洞百出，但它確實讓 Perl 6 社群再度活躍起來。
&lt;/p&gt;&lt;p&gt;
在相對完整但發展停滯的 Pugs 計劃，與緩慢但穩定地追上 Pugs 的 Rakudo 計劃之間，我逐漸把注意力轉向後者。
&lt;/p&gt;&lt;p&gt;
2008 年的夏天過得很快；我和 viklund 合作，用當時還乳臭未乾的 Rakudo 寫一套圍紀引擎（純粹為了好玩而已）。
&lt;/p&gt;&lt;p&gt;
我們對自己說，如果竟然能寫出來，那我們就到 YAPC::EU 會議上，以它為主題來一場閃電演講。
&lt;/p&gt;&lt;p&gt;
嗯，最後我們真的寫出來了，也真的到 YAPC::EU 講了一場。與會者聽到有人能用 Perl 6 寫網站程式，反應十分熱烈，我們也很開心。
&lt;/p&gt;&lt;p&gt;
可是，中間我們繞了多大的彎，避開了多少還沒實作的功能，又發現了多少瑕疵啊！
&lt;/p&gt;&lt;p&gt;
而且，既然這是個秘密計劃，我們就不能在 #perl6 上直接貼出有問題的程式。要回報瑕疵之前，我們得先把代碼清理到看不出和圍紀有任何關係纔行。在那段時間裡，我學會了在瑕疵回報上打高爾夫（Golfing，壓縮字數）的價值。
&lt;/p&gt;&lt;p&gt;
那年夏天，我提交了許多瑕疵回報，每份的代碼都清理過了。就像小孩子收集瓶蓋一樣，我開始熱衷於此。
&lt;/p&gt;&lt;p&gt;
當時 Rakudo 的瑕疵不少。有一陣子，瑕疵似乎無所不在。這不能怪 Patrick 和 Jonathan；他們一直都很盡責。但任何專案都要經歷實地運用的考驗，而 viklund 和我恰好是首先拿 Rakudo 來用的人。
&lt;/p&gt;&lt;p&gt;
實地測試和回報瑕疵成了我的嗜好，驅使我不斷重複著「拿 Rakudo 做些新鮮事」、「看 Rakudo 爆炸」、「寫瑕疵報告」的無盡迴圈。
&lt;/p&gt;&lt;p&gt;
能脫離粉絲階段，正式參與開發，這讓我非常高興。日後我寫了更多 Perl 6 代碼，甚至還拿到了 Rakudo 的提交權... 但我想我會一直當那個「專門提瑕疵報告的傢伙」吧。
&lt;/p&gt;&lt;p&gt;
目前頻道上的幽默以大笑貓（lolcat）、奇特的顏文字，以及其他時下的網路流行語彙。頻道上的氛圍輕鬆有趣；大笑貓和編譯器內核開發的對比，時常令人耳目一新。 
&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;pmichaud&amp;gt; 早安, #perl6
&amp;lt;jnthn&amp;gt; 早, pmichaud
&amp;lt;PerlJam&amp;gt; pm 你好
&amp;lt;colomon&amp;gt; o/
&amp;lt;mathw&amp;gt; o/ pmichaud
&amp;lt;moritz_&amp;gt; /o/
&amp;lt;mathw&amp;gt; \o\
&amp;lt;jnthn&amp;gt; \o/ |\o/| o&amp;lt; /o\
&amp;lt;jnthn&amp;gt; ;-)
&amp;lt;mathw&amp;gt; 啊啊啊啊
* mathw 躲起來
&amp;lt;okeCay&amp;gt; o/\o !
&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;
隨著 Rakudo 漸趨成熟，「綱要」也隨之作出修訂。也許有人覺得這很可怕。要怎樣去學一門不斷變化的語言呢？為什麼不讓規範文件確定下來呢？
&lt;/p&gt;&lt;p&gt;
我個人的想法是：我不希望語言規範被「鎖定」或「凍結」住，因為目前的修訂已經愈來愈小，大都是為了修正 Rakudo 等實作回報出的問題。
&lt;/p&gt;&lt;p&gt;
雖然 Perl 6 的規格改動幅度超過我所知的其他語言，但另一方面，它也一天天變得更加穩定。我們稱它為「漩渦式開發模型」，實作和規範雖然相互影響，但最終仍是往同一個單點收歛。
&lt;/p&gt;&lt;p&gt;
相對於某些 IRC 頻道的粗暴文化，#perl6 可說是網路上最親切的地方之一。我們花非常多的時間回答新手的問題、幫忙修正語法錯誤、並為訪客和開發團隊釐清各式術語及設計方針。我們互相幫忙看代碼和網誌文章，讓頻道上洋溢著彼此尊重和互相照顧的感覺。
&lt;/p&gt;&lt;p&gt;
今天的 #perl6 幾乎是「日不落頻道」，擁有來自全球各地的人積極參與。我們不僅覺得這裡有個非常酷、足以向世界展示的語言，也很自豪於 Perl 6 文化的良好素質。
&lt;/p&gt;&lt;p&gt;
2008 年以來，Rakudo 逐漸領先其他實作，完成度甚至超越了 Pugs。目前絕大多數的算符和控制結構都已完工，更有強大的正規表示式與文法引擎（感謝 Patrick！）以及優秀的物件導向、多重分派支援（感謝 Jonathan！），許多其他功能也已充份實作。
&lt;/p&gt;&lt;p&gt;
我們還有許多「小規模」的 Perl 6 實作，幫忙推動「綱要」發展和探索實作策略。但投注於 Rakudo 開發的人力，確實遠大於其他實作。Rakudo 每月釋出新版的工作人員名單，通常都在二三十人以上。
&lt;/p&gt;&lt;p&gt;
重新回到「Perl 6 每天都更近一些」的日子真好。
&lt;/p&gt;&lt;p&gt;
我仍然每天回報一則 Rakudo 的瑕疵，但通常是關於尚未實作的進階語言特性，而不是缺少什麼常用的功能。
&lt;/p&gt;&lt;p&gt;
2009 年至今，Rakudo 成功完成了幾項龐大的重構任務。首先是文法系統，隨後其他各元件也都分別重新寫過。
&lt;/p&gt;&lt;p&gt;
對開發者來說，這些小計劃統合成了所謂的「Rakudo 大重構」。
&lt;/p&gt;&lt;p&gt;
對於外界來說，這就是即將正式發表的 Rakudo Star，「樂土之星」。
&lt;/p&gt;</content>
		<author>
			<name>audreyt</name>
			<uri>http://pugs.blogs.com/pugs/</uri>
		</author>
		<source>
			<title type="html">Pugs</title>
			<subtitle type="html">Implementing Perl 6... and other related technologies.</subtitle>
			<link rel="self" href="http://pugs.blogs.com/pugs/index.rdf"/>
			<id>http://pugs.blogs.com/pugs/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Optimizing Range Iteration</title>
		<link href="http://justrakudoit.wordpress.com/2010/07/28/optimizing-range-iteration/"/>
		<id>http://justrakudoit.wordpress.com/?p=132</id>
		<updated>2010-07-28T02:27:58+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I wasn’t planning on doing any more work on Rakudo before Rakudo Star, but the conversation on #phasers today got me thinking.  On the one hand, I’m somewhat opposed to the idea of the Range-specific &lt;code&gt;RangeIter&lt;/code&gt; iterator, as Range and the series operator are supposed to behave identically.  On the other hand, the idea of creating a special case for &lt;code&gt;RangeIter&lt;/code&gt; to handle the super-common Int iteration case seemed very appealing.  So I thought I’d poke around a little and see what I could do.&lt;/p&gt;
&lt;p&gt;I’m going to tell this story backwards of the way I actually did it, because I flailed around a lot at the beginning.  My goal was to focus on a construct like&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;for 1..10000 {
   # do something
}
&lt;/pre&gt;
&lt;p&gt;But in the process of my flailing, I thought that switching from &lt;code&gt;before&lt;/code&gt; to &lt;code&gt;&amp;lt;&lt;/code&gt; made the code go slower, so I thought I might focus on that.  &lt;/p&gt;
&lt;p&gt;So here’s the first bit of code I’m going to talk about optimizing:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;my $i;
loop ($i = 0; $i &amp;lt; 10000; $i++) {
    my $a = $i + 1;  # this line just to give the loop something to do!
}
&lt;/pre&gt;
&lt;p&gt;That took 7.4 seconds to execute on my MacBook Pro.  Much faster than a loop using &lt;code&gt;1..10000&lt;/code&gt;, but still awfully slow.&lt;/p&gt;
&lt;p&gt;Well, &lt;code&gt;&amp;lt;&lt;/code&gt; didn’t have a specific version for Int.  It relied on the Real version to convert the arguments to Num and delegate to that version of &lt;code&gt;&amp;lt;&lt;/code&gt;.  It was very easy to code up an Int specific version of &lt;code&gt;&amp;lt;&lt;/code&gt; which calls down into PIR.  And with that in place, the above code runs in 4.0 seconds.  So, this simple change pretty much doubles the speed of the most basic loop.  (That time includes Rakudo’s start up, after all.)&lt;/p&gt;
&lt;p&gt;So, sort of the next logical step turns out to be to look at the infinite case.  Let’s look at a slightly different piece of code:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;for 1..* {
    last if $_ &amp;gt; 10000;
}
&lt;/pre&gt;
&lt;p&gt;That takes 19.1 seconds on my MBP.  So, here’s a new iterator type crafted specifically for infinite Ranges:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;class InfiniteIntRangeIter is Iterator {
    has $!value;
    has $!nextIter;

    method infinite() { True; }

    method reify() {
        unless $!nextIter.defined {
            $!nextIter = InfiniteIntRangeIter.new( :value($!value.succ) );
        }
        $!value, $!nextIter;
    }
}
&lt;/pre&gt;
&lt;p&gt;Using that instead of the default RangeIter completes the above sample loop in 10.6 seconds.&lt;/p&gt;
&lt;p&gt;But wait!  pmichaud says iterators will be more efficient if they return more than one value at a time.  Basically, the above version constructs an iterator object for each iteration.  If we return two values at a time, we can cut the number of objects created in half.  Seems like that ought to be a win.  Here’s the new source:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;class InfiniteIntRangeIter is Iterator {
    has $!value;
    has $!nextIter;

    method infinite() { True; }

    method reify() {
        unless $!nextIter.defined {
            $!nextIter = InfiniteIntRangeIter.new( :value($!value + 2) );
        }
        $!value, $!value + 1, $!nextIter;
    }
}
&lt;/pre&gt;
&lt;p&gt;That’s 9.5 seconds, another 10% shaved off.  Returning four values at a time gets it to 8.7 seconds.  Eight gets us 8.2 seconds, and it seems like we are into diminishing returns.&lt;/p&gt;
&lt;p&gt;But wait!  The loop code uses &lt;code&gt;&amp;gt;&lt;/code&gt;, which I haven’t optimized yet.  Switch it to use the already optimized &lt;code&gt;&amp;lt;&lt;/code&gt;, and the runtime is down to 4.8 seconds.  Seems like fine progress!&lt;/p&gt;
&lt;p&gt;This blog post is probably already too long, so I’ll stop it short here.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/132/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/132/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/132/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/132/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/132/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/132/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/132/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/132/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=132&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Currying</title>
		<link href="http://perlgeek.de/blog-en/perl-5-to-6/28-currying.html"/>
		<id>http://perlgeek.de/blog-en/perl-5-to-6/28-currying.html</id>
		<updated>2010-07-25T18:17:10+00:00</updated>
		<content type="html">&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;NAME&quot; title=&quot;click to go to top of document&quot;&gt;NAME&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&quot;Perl 5 to 6&quot; Lesson 28 - Currying&lt;/p&gt;

&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;SYNOPSIS&quot; title=&quot;click to go to top of document&quot;&gt;SYNOPSIS&lt;/a&gt;&lt;/h3&gt;

&lt;pre&gt;  use v6;
  
  my &amp;amp;f := &amp;amp;substr.assuming('Hello, World');
  say f(0, 2);                # He
  say f(3, 2);                # lo
  say f(7);                   # World
  
  say &amp;lt;a b c&amp;gt;.map: * x 2;     # aabbcc
  say &amp;lt;a b c&amp;gt;.map: *.uc;      # ABC
  for ^10 {
      print &amp;lt;R G B&amp;gt;.[$_ % *]; # RGBRGBRGBR
  }&lt;/pre&gt;

&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;DESCRIPTION&quot; title=&quot;click to go to top of document&quot;&gt;DESCRIPTION&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;i&gt;Currying&lt;/i&gt; or &lt;i&gt;partial application&lt;/i&gt; is the process of generating a function from another function or method by providing only some of the arguments. This is useful for saving typing, and when you want to pass a callback to another function.&lt;/p&gt;

&lt;p&gt;Suppose you want a function that lets you extract substrings from &lt;code&gt;&quot;Hello, World&quot;&lt;/code&gt; easily. The classical way of doing that is writing your own function:&lt;/p&gt;

&lt;pre&gt;  sub f(*@a) {
      substr('Hello, World', |@a)
  }&lt;/pre&gt;

&lt;h4&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;Currying_with_assuming&quot; title=&quot;click to go to top of document&quot;&gt;Currying with &lt;code&gt;assuming&lt;/code&gt;&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Perl 6 provides a method &lt;code&gt;assuming&lt;/code&gt; on code objects, which applies the arguments passed to it to the invocant, and returns the partially applied function.&lt;/p&gt;

&lt;pre&gt;  my &amp;amp;f := &amp;amp;substr.assuming('Hello, World');&lt;/pre&gt;

&lt;p&gt;Now &lt;code&gt;f(1, 2)&lt;/code&gt; is the same as &lt;code&gt;substr('Hello, World', 1, 2)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;assuming&lt;/code&gt; also works on operators, because operators are just subroutines with weird names. To get a subroutine that adds 2 to whatever number gets passed to it, you could write&lt;/p&gt;

&lt;pre&gt;  my &amp;amp;add_two := &amp;amp;infix:&amp;lt;+&amp;gt;.assuming(2);&lt;/pre&gt;

&lt;p&gt;But that's tedious to write, so there's another option.&lt;/p&gt;

&lt;h4&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;Currying_with_the_Whatever-Star&quot; title=&quot;click to go to top of document&quot;&gt;Currying with the Whatever-Star&lt;/a&gt;&lt;/h4&gt;

&lt;pre&gt;  my &amp;amp;add_two := * + 2;
  say add_two(4);         # 6&lt;/pre&gt;

&lt;p&gt;The asterisk, called &lt;i&gt;Whatever&lt;/i&gt;, is a placeholder for an argument, so the whole expression returns a closure. Multiple Whatevers are allowed in a single expression, and create a closure that expects more arguments, by replacing each term &lt;code&gt;*&lt;/code&gt; by a formal parameter. So &lt;code&gt;* * 5 + *&lt;/code&gt; is equivalent to &lt;code&gt;-&amp;gt; $a, $b { $a * 5 + $b }&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;  my $c = * * 5 + *;
  say $c(10, 2);                # 52&lt;/pre&gt;

&lt;p&gt;Note that the second &lt;code&gt;*&lt;/code&gt; is an infix operator, not a term, so it is not subject to Whatever-currying.&lt;/p&gt;

&lt;p&gt;The process of lifting an expression with Whatever stars into a closure is driven by syntax, and done at compile time. This means that&lt;/p&gt;

&lt;pre&gt;  my $star = *;
  my $code = $star + 2&lt;/pre&gt;

&lt;p&gt;does not construct a closure, but instead dies with a message like&lt;/p&gt;

&lt;pre&gt;  Can't take numeric value for object of type Whatever&lt;/pre&gt;

&lt;p&gt;Whatever currying is more versatile than &lt;code&gt;.assuming&lt;/code&gt;, because it allows to curry something else than the first argument very easily:&lt;/p&gt;

&lt;pre&gt;  say  ~(1, 3).map: 'hi' x *    # hi hihihi&lt;/pre&gt;

&lt;p&gt;This curries the second argument of the string repetition operator infix &lt;code&gt;x&lt;/code&gt;, so it returns a closure that, when called with a numeric argument, produces the string &lt;code&gt;hi&lt;/code&gt; as often as that argument specifies.&lt;/p&gt;

&lt;p&gt;The invocant of a method call can also be Whatever star, so&lt;/p&gt;

&lt;pre&gt;  say &amp;lt;a b c&amp;gt;.map: *.uc;      # ABC&lt;/pre&gt;

&lt;p&gt;involves a closure that calls the &lt;code&gt;uc&lt;/code&gt; method on its argument.&lt;/p&gt;

&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;MOTIVATION&quot; title=&quot;click to go to top of document&quot;&gt;MOTIVATION&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Perl 5 could be used for functional programming, which has been demonstrated in Mark Jason Dominus' book &lt;i&gt;Higher Order Perl&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;Perl 6 strives to make it even easier, and thus provides tools to make typical constructs in functional programming easily available. Currying and easy construction of closures is a key to functional programming, and makes it very easy to write transformation for your data, for example together with &lt;code&gt;map&lt;/code&gt; or &lt;code&gt;grep&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;SEE_ALSO&quot; title=&quot;click to go to top of document&quot;&gt;SEE ALSO&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;podlinkurl&quot; href=&quot;http://perlcabal.org/syn/S02.html#Built-In_Data_Types&quot;&gt;http://perlcabal.org/syn/S02.html#Built-In_Data_Types&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;podlinkurl&quot; href=&quot;http://hop.perl.plover.com/&quot;&gt;http://hop.perl.plover.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;podlinkurl&quot; href=&quot;http://en.wikipedia.org/wiki/Currying&quot;&gt;http://en.wikipedia.org/wiki/Currying&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-5-to-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Vector.pm working again</title>
		<link href="http://justrakudoit.wordpress.com/2010/07/24/vector-pm-working-again/"/>
		<id>http://justrakudoit.wordpress.com/?p=129</id>
		<updated>2010-07-24T19:24:41+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I went to announce on #perl6 that I had &lt;a href=&quot;http://lastofthecarelessmen.blogspot.com/&quot;&gt;Last of the Careless Men’s&lt;/a&gt; Vector class running on modern Rakudo (finally), and literally in the middle of typing the announcement there was a massive net spasm of some sort and I was kicked off the channel.  Sigh.&lt;/p&gt;
&lt;p&gt;Anyway, thanks to a timely patch from jnthn++ and a bit of rearranging things on my part, Vector.pm works again, or at least passes all the current tests in its 01-basic.t.  I will try to get the rest of the code in that package working again in time for R*.  The only major caveat at this point is that the &lt;code&gt;op=&lt;/code&gt; metaoperator does not work for the Vector-specific operators.  Apparently this is because of a known bug.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/129/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/129/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/129/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/129/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/129/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/129/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/129/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/129/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/129/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/129/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/129/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/129/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/129/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/129/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=129&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Happy 2nd birthday to Padre - Get on an IRC channel</title>
		<link href="http://szabgab.com/blog/2010/07/happy-2nd-birthday-to-padre-the-perl-ide.html"/>
		<id>http://szabgab.com/blog/2010/07/happy-2nd-birthday-to-padre-the-perl-ide.html</id>
		<updated>2010-07-24T15:55:45+00:00</updated>
		<content type="html">&lt;p&gt;
The &lt;a href=&quot;http://padre.perlide.org/irc.html&quot;&gt;IRC redirector&lt;/a&gt; on the &lt;a href=&quot;http://padre.perlide.org/&quot;&gt;Padre&lt;/a&gt; website. 
Type in some username and select the channel.
&lt;/p&gt;
&lt;p&gt;
If your perl related channel is missing from the list let us know on #padre irc.perl.org
&lt;/p&gt;
&lt;p&gt;
I hope you'll come by the Padre channel and say happy birthday to the developers!
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=oQjYzneEBmw&quot;&gt;screencast&lt;/a&gt;
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Happy 2nd birthday to Padre - Get on an IRC channel</title>
		<link href="http://szabgab.com/blog/2010/07/1280012145.html"/>
		<id>http://szabgab.com/blog/2010/07/1280012145.html</id>
		<updated>2010-07-24T15:55:45+00:00</updated>
		<content type="html">&lt;p&gt;
The &lt;a href=&quot;http://padre.perlide.org/irc.html&quot;&gt;IRC redirector&lt;/a&gt; on the &lt;a href=&quot;http://padre.perlide.org/&quot;&gt;Padre&lt;/a&gt; website. 
Type in some username and select the channel.
&lt;/p&gt;
&lt;p&gt;
If your perl related channel is missing from the list let us know on #padre irc.perl.org
&lt;/p&gt;
&lt;p&gt;
I hope you'll come by the Padre channel and say happy birthday to the developers!
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=oQjYzneEBmw&quot;&gt;screencast&lt;/a&gt;
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-US">Perl 6 十周年慶: Pugs：黃金年代 (五之三)</title>
		<link href="http://pugs.blogs.com/pugs/2010/07/perl-6-%E5%8D%81%E5%91%A8%E5%B9%B4%E6%85%B6-pugs%E9%BB%83%E9%87%91%E5%B9%B4%E4%BB%A3-%E4%BA%94%E4%B9%8B%E4%B8%89.html"/>
		<id>http://pugs.blogs.com/pugs/2010/07/perl-6-%E5%8D%81%E5%91%A8%E5%B9%B4%E6%85%B6-pugs%E9%BB%83%E9%87%91%E5%B9%B4%E4%BB%A3-%E4%BA%94%E4%B9%8B%E4%B8%89.html</id>
		<updated>2010-07-24T06:53:38+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;em&gt;(This is a translation of masak++'s excellent &lt;a href=&quot;http://use.perl.org/%7Emasak/journal/40451&quot;&gt;Perl 6 anniversary post&lt;/a&gt;, part 3 of 5.)&lt;br /&gt;
(這是 masak++ 為慶祝“樂土專案”即將&lt;a href=&quot;http://rakudo.org/node/73&quot;&gt;正式發行&lt;/a&gt;所寫的紀念文章的中譯。)&lt;/em&gt;
&lt;hr /&gt;
&lt;p&gt;
我還記得初次踏入 #perl6 頻道的感覺。
&lt;/p&gt;&lt;p&gt;
有人真的拿「綱要」來實作，這已經夠驚人了。而唐鳳又是個極富生產力的黑客，像磁鐵一般，以前所未見的速度吸引眾人投入開發。
&lt;/p&gt;&lt;p&gt;
待在 #perl6 頻道上，就像是站在颱風眼附近；事情像奇蹟般陸續發生，無論是因為唐鳳又完成了一組更動，或是旁邊又有人開始了某個很酷的專案。有趣的想法和點子，日夜不停湧入頻道當中。
&lt;/p&gt;&lt;p&gt;
而我們所有人都真的在跑（早期的）Perl 6！算符、副程式、類型、多載... 一個接著一個，我們期待以久的功能陸續開始運作。
&lt;/p&gt;&lt;p&gt;
很快，我們就寫出了在頻道上即時運行 Perl 6 代碼的機器人。
&lt;/p&gt;&lt;p&gt;
無論是誰，只要一提出改進 Perl 6 的想法，唐鳳就送他一個提交權。這招還真管用！數以百計的人獲得了提交權，卻完全沒有像圍紀系統上常見的破壞行為出現。許多人踴躍加入，主動做出貢獻。
&lt;/p&gt;&lt;p&gt;
當時我們的口號是「信任安那其」，現在回想起來仍然很聳動。
&lt;/p&gt;&lt;p&gt;
唐鳳興高采烈地站在漩渦中心，引導大家發展各式相關計劃，幾乎每天都邊寫網誌，邊提交出鉅量的代碼，為逐漸成形的 Perl 6 社群注入活力。
&lt;/p&gt;&lt;p&gt;
Pugs 是用 Haskell 寫成的，因此早期 #perl6 的文化深受 Haskell 文化的影響。
&lt;/p&gt;&lt;p&gt;
Pugs 黑客團隊的綽號是「浪達駱駝（Lambdacamels）」；頻道上大量出現資訊科學類的的論文、關於 Haskell 的書藉，以及其他編程相關的深奧論著。這些參考書目今天仍然可以在 Pugs 的 &lt;a href=&quot;http://svn.pugscode.org/pugs/READTHEM&quot;&gt;READTHEM&lt;/a&gt; 文件裡看到。
&lt;/p&gt;&lt;p&gt;
頻道上的幽默相當機智，主題往往也和電腦有關。
&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;audreyt&amp;gt; Alias_：我的眼鏡是 style=&quot;border: none&quot;
&amp;lt;Alias_&amp;gt; 無所謂
&amp;lt;Alias_&amp;gt; 人眼的感光邊界會自動加上 border: solid 1px #9999
&amp;lt;audreyt&amp;gt; 說得對
&amp;lt;audreyt&amp;gt; 不過以我的視力來說，更像是 ridged
* audreyt 望著頻道上的高度技客傾向嘆氣
...
&amp;lt;audreyt&amp;gt; 這顯然要 blame malaire++
&amp;lt;audreyt&amp;gt; 我的意思是 praise
&amp;lt;audreyt&amp;gt; 不然說 annotate 好了
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;
頻道上主要的感嘆詞是「讚！（woot!）」。主要說「讚！」的人是唐鳳。業力（Karma）取代了貨幣，由機器人在頻道上統計，並在即時公佈提交訊息時，一併幫提交者加分。
&lt;/p&gt;&lt;p&gt;
我要說明一點：當時在 #perl6 上，我只是個粉絲。我對 Pugs 沒有作出什麼重大貢獻，對「綱要」和語言設計也沒有幫上什麼忙。至於在頻道上搞笑嘛，我倒是不遺餘力。:-)
&lt;/p&gt;&lt;p&gt;
2005 年 3 月，我的傻言傻語換來了一份提交權：
&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;autrijus&amp;gt; 歡迎上船！
&amp;lt;masak&amp;gt; 謝謝。因為 Pugs 的關係，我幾乎整晚沒睡。:-)
&amp;lt;autrijus&amp;gt; 開心嗎？
&amp;lt;masak&amp;gt; 太興奮了
&amp;lt;autrijus&amp;gt; 這感覺我懂 :)))
&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;
唐鳳保持著很高的開發速度，頻道上經常出現關於他生產力的玩笑：
&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;autrijus&amp;gt; 待會見 - 洗澡去 &amp;amp;
&amp;lt;geoffb&amp;gt; 所以說唐鳳在浴室連 IRC 的謠言不是真的嘍...
&amp;lt;geoffb&amp;gt; 也許他把筆記型電腦放在浴簾外，邊洗邊看螢幕。
&amp;lt;autrijus&amp;gt; 沒錯。
&amp;lt;autrijus&amp;gt; 通常是這樣。
&amp;lt;autrijus&amp;gt; 我都拿牙刷按鍵盤，以免鍵盤進水。
&amp;lt;geoffb&amp;gt; *大笑*
...
&amp;lt;Juerd&amp;gt; 每本講 Perl 6 的書都太舊了。
&amp;lt;Juerd&amp;gt; 它們送印後兩小時就過時了。
&amp;lt;Juerd&amp;gt; 等它們進到書店，已經過期一個月了。
&amp;lt;Juerd&amp;gt; 等你買到書準備看時，autrijus 已經把 Perl 6 實作出來了。:)
&amp;lt;mauke&amp;gt; 在睡夢裡實作的！
&amp;lt;castaway&amp;gt; autrijus 會睡覺？
&amp;lt;nothingmuch&amp;gt; castaway: 有時候他宣稱自己去睡了。
* castaway 完全不信
&amp;lt;mauke&amp;gt; 也許他和電腦之間有神經界面，讓他在夢裡寫程式。
&amp;lt;castaway&amp;gt; 這我一點都不意外 :)
&amp;lt;Juerd&amp;gt; castaway: 嗯，有時後他說要去睡，可是沒幾個小時後
              就出現了一大份提交。所以我才不信呢。:)
&amp;lt;castaway&amp;gt; 嘻嘻
&amp;lt;castaway&amp;gt; 據我看來，他每次最多只睡 30 分鐘。
&amp;lt;Juerd&amp;gt; 我想他有超線程功能。
&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;
唐鳳曾經說過：「人們以為我是了不起的程序員，但其實是 Haskell 和 Parsec（Haskell 的剖析結合函式庫）太強大了。」不過，這並沒有讓人們停止議論他的產能。
&lt;/p&gt;&lt;p&gt;
2006 年的某一天，Larry Wall 加入了 #perl6 頻道。他再也沒有離開過。 
&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;avar&amp;gt; ?eval &amp;lt;物美 迅速 價廉&amp;gt;.pick(2)
&amp;lt;evalbot_r16148&amp;gt;（&quot;物美&quot;, &quot;價廉&quot;)
&amp;lt;TimToady&amp;gt; 這是在說我們沒錯...
&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;
不過，我們確實失去了唐鳳。在他進入&lt;a href=&quot;http://pugs.blogs.com/audrey/2005/12/runtime_typecas.html&quot;&gt;跨性別旅程&lt;/a&gt;後，產量雖然有增無減，但在 2007 年一次艱難的重構任務中，唐鳳突然爆發急性肝炎，於是離開了頻道，再也沒有回來。
&lt;/p&gt;&lt;p&gt;
Pugs 中斷開發。在唐鳳離開後，頻道頓時安靜了許多。
&lt;/p&gt;&lt;p&gt;
Pugs 還在，但已不再更新，也還沒完全達成對 Perl 6 規格的實作。社群裡的成員都在，但核心人物卻消失了。
&lt;/p&gt;&lt;p&gt;
當時我不知道未來會如何，只好盼望有更多像 Pugs 一樣的計劃出現。
&lt;/p&gt;&lt;p&gt;
（唐鳳沒有回頻道的原因，直到兩年之後才在他的&lt;a href=&quot;http://pugs.blogs.com/audrey/2009/08/why-such-me.html&quot;&gt;一篇網誌&lt;/a&gt;裡揭曉。）
&lt;/p&gt;</content>
		<author>
			<name>audreyt</name>
			<uri>http://pugs.blogs.com/pugs/</uri>
		</author>
		<source>
			<title type="html">Pugs</title>
			<subtitle type="html">Implementing Perl 6... and other related technologies.</subtitle>
			<link rel="self" href="http://pugs.blogs.com/pugs/index.rdf"/>
			<id>http://pugs.blogs.com/pugs/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">How to connect to the #perl6 IRC channel and try Perl 6 on-line</title>
		<link href="http://szabgab.com/blog/2010/07/how-to-use-perl6-without-installing-it.html"/>
		<id>http://szabgab.com/blog/2010/07/how-to-use-perl6-without-installing-it.html</id>
		<updated>2010-07-23T17:45:44+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=2M3f3uAqMWg&quot;&gt;screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://webchat.freenode.net/&quot;&gt;web interface to Freenode&lt;/a&gt;. Pick some username and type in the name of the channel: #perl6
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">How to connect to the #perl6 IRC channel and try Perl 6 on-line</title>
		<link href="http://szabgab.com/blog/2010/07/1279932344.html"/>
		<id>http://szabgab.com/blog/2010/07/1279932344.html</id>
		<updated>2010-07-23T17:45:44+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=2M3f3uAqMWg&quot;&gt;screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://webchat.freenode.net/&quot;&gt;web interface to Freenode&lt;/a&gt;. Pick some username and type in the name of the channel: #perl6
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 screencast - part 4 - files</title>
		<link href="http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-files.html"/>
		<id>http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-files.html</id>
		<updated>2010-07-23T02:05:45+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=hma55uL9qPI&quot;&gt;Perl 6 files screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Reading in all the lines of a file in a single scalar using the &lt;i&gt;slurp&lt;/i&gt; function:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my $content = slurp &quot;text.txt&quot;;
  say $content.chars;


&lt;/pre&gt;
&lt;p&gt;
Reading in all the lines of a file into the first element of an array using the &lt;i&gt;slurp&lt;/i&gt;:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my @content = slurp &quot;text.txt&quot;;
  say @content.elems;
  say @content[0].chars;

&lt;/pre&gt;
&lt;p&gt;
Reading in all the lines, each line in a separate element of the array using the &lt;i&gt;lines&lt;/i&gt; function:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my @content = lines &quot;text.txt&quot;;
  say @content.elems;
  say @content[0].chars;

&lt;/pre&gt;
&lt;p&gt;
Iterating over the lines one by one. &lt;i&gt;lines&lt;/i&gt; is evaluated lazily  here:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  for lines &quot;text.txt&quot; -&amp;gt; $line {
    say $line.chars;
  }

&lt;/pre&gt;
&lt;p&gt;
Opening a file using the &lt;i&gt;open&lt;/i&gt; function.
Reading in one line using the &lt;i&gt;get&lt;/i&gt; method.
Iterating over the rest of the file using the &lt;i&gt;lines&lt;/i&gt; method:
&lt;/p&gt;
&lt;pre&gt;  use v6;
  my $fh = open &quot;text.txt&quot;;

  my $first_line = $fh.get;
  say $first_line;

  for $fh.lines -&amp;gt; $line {
    say $line.chars;
  }


&lt;/pre&gt;
&lt;p&gt;
Opening a file for writing, printing a string to it using the 
&lt;i&gt;say&lt;/i&gt; method and then &lt;i&gt;close&lt;/i&gt;ing it to flush all the
buffered output.
Then re-reading the file just to show what happened.
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my $fh = open &quot;out.txt&quot;, :w;
  $fh.say(&quot;text 4&quot;);
  $fh.close;

  say slurp &quot;out.txt&quot;;



&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 screencast - part 4 - files</title>
		<link href="http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-file.html"/>
		<id>http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-file.html</id>
		<updated>2010-07-23T02:05:45+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=hma55uL9qPI&quot;&gt;Perl 6 files screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Reading in all the lines of a file in a single scalar using the &lt;i&gt;slurp&lt;/i&gt; function:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my $content = slurp &quot;text.txt&quot;;
  say $content.chars;


&lt;/pre&gt;
&lt;p&gt;
Reading in all the lines of a file into the first element of an array using the &lt;i&gt;slurp&lt;/i&gt;:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my @content = slurp &quot;text.txt&quot;;
  say @content.elems;
  say @content[0].chars;

&lt;/pre&gt;
&lt;p&gt;
Reading in all the lines, each line in a separate element of the array using the &lt;i&gt;lines&lt;/i&gt; function:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my @content = lines &quot;text.txt&quot;;
  say @content.elems;
  say @content[0].chars;

&lt;/pre&gt;
&lt;p&gt;
Iterating over the lines one by one. &lt;i&gt;lines&lt;/i&gt; is evaluated lazily  here:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  for lines &quot;text.txt&quot; -&amp;gt; $line {
    say $line.chars;
  }

&lt;/pre&gt;
&lt;p&gt;
Opening a file using the &lt;i&gt;open&lt;/i&gt; function.
Reading in one line using the &lt;i&gt;get&lt;/i&gt; method.
Iterating over the rest of the file using the &lt;i&gt;lines&lt;/i&gt; method:
&lt;/p&gt;
&lt;pre&gt;  use v6;
  my $fh = open &quot;text.txt&quot;;

  my $first_line = $fh.get;
  say $first_line;

  for $fh.lines -&amp;gt; $line {
    say $line.chars;
  }


&lt;/pre&gt;
&lt;p&gt;
Opening a file for writing, printing a string to it using the 
&lt;i&gt;say&lt;/i&gt; method and then &lt;i&gt;close&lt;/i&gt;ing it to flush all the
buffered output.
Then re-reading the file just to show what happened.
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my $fh = open &quot;out.txt&quot;, :w;
  $fh.say(&quot;text 4&quot;);
  $fh.close;

  say slurp &quot;out.txt&quot;;



&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 screencast - part 4 - files</title>
		<link href="http://szabgab.com/blog/2010/07/1279875945.html"/>
		<id>http://szabgab.com/blog/2010/07/1279875945.html</id>
		<updated>2010-07-23T02:05:45+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=hma55uL9qPI&quot;&gt;Perl 6 files screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Reading in all the lines of a file in a single scalar using the &lt;i&gt;slurp&lt;/i&gt; function:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my $content = slurp &quot;text.txt&quot;;
  say $content.chars;


&lt;/pre&gt;
&lt;p&gt;
Reading in all the lines of a file into the first element of an array using the &lt;i&gt;slurp&lt;/i&gt;:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my @content = slurp &quot;text.txt&quot;;
  say @content.elems;
  say @content[0].chars;

&lt;/pre&gt;
&lt;p&gt;
Reading in all the lines, each line in a separate element of the array using the &lt;i&gt;lines&lt;/i&gt; function:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my @content = lines &quot;text.txt&quot;;
  say @content.elems;
  say @content[0].chars;

&lt;/pre&gt;
&lt;p&gt;
Iterating over the lines one by one. &lt;i&gt;lines&lt;/i&gt; is evaluated lazily  here:
&lt;/p&gt;
&lt;pre&gt;  use v6;

  for lines &quot;text.txt&quot; -&amp;gt; $line {
    say $line.chars;
  }

&lt;/pre&gt;
&lt;p&gt;
Opening a file using the &lt;i&gt;open&lt;/i&gt; function.
Reading in one line using the &lt;i&gt;get&lt;/i&gt; method.
Iterating over the rest of the file using the &lt;i&gt;lines&lt;/i&gt; method:
&lt;/p&gt;
&lt;pre&gt;  use v6;
  my $fh = open &quot;text.txt&quot;;

  my $first_line = $fh.get;
  say $first_line;

  for $fh.lines -&amp;gt; $line {
    say $line.chars;
  }


&lt;/pre&gt;
&lt;p&gt;
Opening a file for writing, printing a string to it using the 
&lt;i&gt;say&lt;/i&gt; method and then &lt;i&gt;close&lt;/i&gt;ing it to flush all the
buffered output.
Then re-reading the file just to show what happened.
&lt;/p&gt;
&lt;pre&gt;  use v6;

  my $fh = open &quot;out.txt&quot;, :w;
  $fh.say(&quot;text 4&quot;);
  $fh.close;

  say slurp &quot;out.txt&quot;;



&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">6 built-ins in Perl 6 that you never knew you needed</title>
		<link href="http://use.perl.org/~masak/journal/40459?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40459?from=rss</id>
		<updated>2010-07-23T01:24:48+00:00</updated>
		<content type="html">&lt;p&gt; &lt;b&gt;.pick&lt;/b&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
say @deck.pick();                   # pick a card, any card...&lt;br /&gt;
&lt;br /&gt;
say @deck.pick(5);                  # poker hand&lt;br /&gt;
&lt;br /&gt;
my @shuffled = @deck.pick(*);       # here, '*' means 'keep going'&lt;br /&gt;
&lt;br /&gt;
my @urn = &amp;lt;black white white&amp;gt;;      # beads, 1/3 black, 2/3 white&lt;br /&gt; .say for @urn.pick(50, :replace);   # put back after each pick&lt;br /&gt;
&lt;br /&gt;
for @urn.pick(*, :replace) {&lt;br /&gt;
    .say;                           # infinite bead picker&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say [+] (1..6).pick(4, :replace);   # 4d6&lt;br /&gt;
&lt;br /&gt;
class Enemy {&lt;br /&gt;
    method attack-with-arrows   { say &quot;peow peow peow&quot; }&lt;br /&gt;
    method attack-with-swords   { say &quot;swish cling clang&quot; }&lt;br /&gt;
    method attack-with-fireball { say &quot;sssSSS fwoooof&quot; }&lt;br /&gt;
    method attack-with-camelia  { say &quot;flap flap RAWWR!&quot; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $selector = { .name ~~ /^ 'attack-with-' / };&lt;br /&gt;
given Enemy.new -&amp;gt; $e {&lt;br /&gt;
    my $attack-strategy&lt;br /&gt;
        = $e.^methods().grep($selector).pick();&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
    $e.$attack-strategy();           # call a random method&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;b&gt;.classify&lt;/b&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
my @names = &amp;lt;Patrick Jonathan Larry Moritz Audrey&amp;gt;;&lt;br /&gt;
say .key, &quot;\t&quot;, ~.values&lt;br /&gt;
    for @names.classify( *.chars );&lt;br /&gt;
&lt;br /&gt;
# Output:&lt;br /&gt;
# 5       Larry&lt;br /&gt;
# 6       Moritz Audrey&lt;br /&gt;
# 7       Patrick&lt;br /&gt;
# 8       Jonathan&lt;br /&gt;
&lt;br /&gt; .say for slurp(&quot;README&quot;)\            # whole file into string&lt;br /&gt;
         .words()\                   # split into list of words&lt;br /&gt;
         .classify( *.Str )\         # group words w/ multiplicity&lt;br /&gt;
         .map({; .key =&amp;gt; .value.elems })\&lt;br /&gt;
                                     # turn lists into lengths&lt;br /&gt;
         .sort( { -.value } )\       # sort descending&lt;br /&gt;
         .[ ^10 ];                   # 10 most common words&lt;br /&gt;
&lt;br /&gt;
class Student {&lt;br /&gt;
    has Str $.name;&lt;br /&gt;
    has Int $.grade is rw;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my Student @students = get-students();&lt;br /&gt;
for @students.classify( *.grade ).sort -&amp;gt; $group {&lt;br /&gt;
    say &quot;These students got grade $group.key():&quot;;&lt;br /&gt;
    say .name for $group.value.list;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;b&gt;.sort&lt;/b&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
# 1 if $a is higher, -1 if $b is higher, 0 if equal&lt;br /&gt;
$a &amp;lt;=&amp;gt; $b;&lt;br /&gt;
&lt;br /&gt;
# sort students according to grade&lt;br /&gt;
@students.sort: -&amp;gt; $a, $b { $a.grade &amp;lt;=&amp;gt; $b.grade };&lt;br /&gt;
&lt;br /&gt;
# same thing&lt;br /&gt;
@students.sort: { $^a.grade &amp;lt;=&amp;gt; $^b.grade };&lt;br /&gt;
&lt;br /&gt;
# same thing&lt;br /&gt;
@students.sort: { .grade };&lt;br /&gt;
&lt;br /&gt;
# same thing&lt;br /&gt;
@students.sort: *.grade;&lt;br /&gt;
&lt;br /&gt;
# leg gives -1, 0 or 1 according to lexicographic ordering&lt;br /&gt;
# 'leg' is for Str, 'cmp' is now for type-agnostic sort&lt;br /&gt;
$a leg $b;&lt;br /&gt;
&lt;br /&gt;
# sort students by name (Unicode order)&lt;br /&gt;
@students.sort: { $^a.name leg $^b.name };&lt;br /&gt;
&lt;br /&gt;
# same thing&lt;br /&gt;
@students.sort: *.name;&lt;br /&gt;
&lt;br /&gt;
# don't worry, things are properly cached; no re-evaluations&lt;br /&gt;
@items.sort: *.expensive-calculation();&lt;br /&gt;
&lt;br /&gt;
# ...which means this works (and is a fair shuffle)&lt;br /&gt;
@deck.sort: { rand }&lt;br /&gt;
&lt;br /&gt;
# ...but this is cuter :)&lt;br /&gt;
@deck.pick(*);&lt;/code&gt;&lt;/p&gt;&lt;p&gt; &lt;b&gt;
Operator overloading&lt;/b&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
sub infix:&amp;lt;±&amp;gt;($number, $fuzz) {&lt;br /&gt;
    $number - $fuzz + rand * 2 * $fuzz;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say 15 ± 5;                          # somewhere between 10 and 20&lt;br /&gt;
&lt;br /&gt;
sub postfix:&amp;lt;!&amp;gt;($n) { [*] 1..$n }&lt;br /&gt;
say 5!;                              # 120&lt;br /&gt;
&lt;br /&gt;
class Physical::Unit {&lt;br /&gt;
    has Int $.kg = 0;                # these attrs denote powers of units&lt;br /&gt;
    has Int $.m  = 0;                # eg $.kg == 2 means that this object&lt;br /&gt;
    has Int $.s  = 0;                # has a kg**2 unit&lt;br /&gt;
&lt;br /&gt;
    has Numeric $.payload;&lt;br /&gt;
&lt;br /&gt;
    method multiply(Physical::Unit $other) {&lt;br /&gt;
        Physical::Unit.new(&lt;br /&gt;
            :kg( $.kg + $other.kg ),&lt;br /&gt;
            :m( $.m + $other.m ),&lt;br /&gt;
            :s( $.s + $other.s ),&lt;br /&gt;
            :payload( $.payload * $other.payload )&lt;br /&gt;
        )&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    method invert() {&lt;br /&gt;
        Physical::Unit.new(&lt;br /&gt;
            :kg( -$.kg ), :m( -$.m ), :s( -$.s ),&lt;br /&gt;
            :payload( 1 / $.payload )&lt;br /&gt;
        )&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    method Str {&lt;br /&gt;
        $.payload&lt;br /&gt;
        ~ ($.kg ?? ($.kg == 1 ?? &quot; kg&quot; !! &quot;kg**$.kg&quot;) !! &quot;&quot;)&lt;br /&gt;
        ~ ($.m  ?? ($.m  == 1 ?? &quot; m&quot;  !! &quot;m**$.m&quot;)   !! &quot;&quot;)&lt;br /&gt;
        ~ ($.s  ?? ($.s  == 1 ?? &quot; s&quot;  !! &quot;s**$.s&quot;)   !! &quot;&quot;)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub postfix:&amp;lt;kg&amp;gt;(Numeric $payload) { Physical::Unit.new( :kg(1), :$payload ) } &lt;br /&gt;  
sub postfix:&amp;lt;m&amp;gt;(Numeric $payload) { Physical::Unit.new( :m(1), :$payload ) }&lt;br /&gt;
sub postfix:&amp;lt;s&amp;gt;(Numeric $payload) { Physical::Unit.new( :s(1), :$payload ) }&lt;br /&gt;
&lt;br /&gt;
# Note how we now use 'multi sub', so as not to shadow the original infix:&amp;lt;*&amp;gt;&lt;br /&gt;
multi sub infix:&amp;lt;*&amp;gt;(Physical::Unit $a, $b) {&lt;br /&gt;
    $a.clone( :payload($a.payload * $b) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
multi sub infix:&amp;lt;*&amp;gt;($a, Physical::Unit $b) {&lt;br /&gt;
    $b.clone( :payload($a * $b.payload) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
multi sub infix:&amp;lt;*&amp;gt;(Physical::Unit $a, Physical::Unit $b) {&lt;br /&gt;
    $a.multiply($b);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
multi sub infix:&amp;lt;/&amp;gt;(Physical::Unit $a, $b) {&lt;br /&gt;
    $a.clone( :payload($a.payload / $b) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
multi sub infix:&amp;lt;/&amp;gt;($a, Physical::Unit $b) {&lt;br /&gt;
    $b.invert.clone( :payload($a / $b.payload) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
multi sub infix:&amp;lt;/&amp;gt;(Physical::Unit $a, Physical::Unit $b) {&lt;br /&gt;
    $a.multiply($b.invert);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say 5m / 2s;                         # 2.5 m s**-1&lt;br /&gt;
say 100kg * 2m / 5s;                 # 40 kg m s**-1&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;b&gt;infix:&amp;lt;Z&amp;gt;&lt;/b&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
# Z (the 'zip operator') means &quot;mix these lists together&quot;&lt;br /&gt;
my @tastes = &amp;lt;spicy sweet bland&amp;gt;;&lt;br /&gt;
my @foods = &amp;lt;soup potatoes tofu&amp;gt;;&lt;br /&gt;
@tastes Z @foods; # &amp;lt;spicy soup sweet potatoes bland tofu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# » means &quot;call the method for each element&quot;&lt;br /&gt; .say for @students».grade;                 # all the grades&lt;br /&gt;
&lt;br /&gt;
for @students».name Z @students».grade -&amp;gt; $name, $grade {&lt;br /&gt;
    say &quot;$name got a $grade this year&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Note that the latter list is infinite -- it works anyway&lt;br /&gt;
for @students».name Z (1..6).pick(*, :replace) -&amp;gt; $name, $roll {&lt;br /&gt;
    say &quot;$name rolls a $roll&quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# you can also Z together two lists with an infix op&lt;br /&gt;
my @total-scores = @first-scores Z+ @second-scores;&lt;br /&gt;
&lt;br /&gt;
# strings as keys, the appropriate number of 1s as values&lt;br /&gt;
my %hash = @names Z=&amp;gt; 1 xx *;              # xx is list repeat&lt;br /&gt;
&lt;br /&gt;
# line people up with increasing numbers&lt;br /&gt;
my %people2numbers = @people Z=&amp;gt; 1..*;&lt;br /&gt;
&lt;br /&gt;
# don't have a good op? roll your own!&lt;br /&gt;
sub infix:&amp;lt;likes&amp;gt;($liker, $likee) { &quot;$liker is fond of $likee&quot; }&lt;br /&gt;
# note how the op infix:&amp;lt;Zlikes&amp;gt; is automatically available&lt;br /&gt;
my @relations = @likers Zlikes @likees;&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;b&gt;infix:&amp;lt;...&amp;gt;&lt;/b&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;
1 ... $n                                    # integers 1 to $n&lt;br /&gt;
$n ... 1                                    # and backwards&lt;br /&gt;
&lt;br /&gt;
1, 3 ... $n                                 # odd numbers to $n&lt;br /&gt;
1, 3, ... *                                 # odd numbers&lt;br /&gt;
1, 2, 4 ... *                               # powers of two&lt;br /&gt;
map { $_ * $_ }, (1 ... *)                  # squares&lt;br /&gt;
&lt;br /&gt;
1, 1, -&amp;gt; $a, $b { $a + $b } ... *           # fibonacci&lt;br /&gt;
1, 1, { $^a + $^b } ... *                   # ditto&lt;br /&gt;
1, 1, *+* ... *                             # ditto&lt;br /&gt;
&lt;br /&gt;
'Camelia', *.chop ... '';                     # all prefixes of 'Camelia'&lt;br /&gt;
&lt;br /&gt;
# See http://blog.plover.com/CS/parentheses.html&lt;br /&gt;
# for the principle behind this&lt;br /&gt;
sub next-balanced-paren-string($s) {&lt;br /&gt;
    $s ~~ /^ ( '('+ ) ( ')'+ ) '(' /;&lt;br /&gt;
    [~] $s.substr(0, $/.from),&lt;br /&gt;
        &quot;()&quot; x ($1.chars - 1),&lt;br /&gt;
        &quot;(&quot; x ($0.chars - $1.chars + 2),&lt;br /&gt;
        &quot;)&quot;,&lt;br /&gt;
        $s.substr($/.to);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $N = 3;&lt;br /&gt;
&lt;br /&gt;
my $start = &quot;()&quot; x $N;&lt;br /&gt;
my &amp;amp;step = &amp;amp;next-balanced-paren-string;&lt;br /&gt;
my $end = &quot;(&quot; x $N ~ &quot;)&quot; x $N;&lt;br /&gt;
&lt;br /&gt;
for $start, &amp;amp;step ... $end -&amp;gt; $string {&lt;br /&gt;
    say $string;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Output:&lt;br /&gt;
# ()()()&lt;br /&gt;
# (())()&lt;br /&gt;
# ()(())&lt;br /&gt;
# (()())&lt;br /&gt;
# ((()))&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Rakudo Star releases in a week, July 29th.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Announce: Rakudo Perl 6 compiler development release #31 (&quot;Atlanta&quot;) by Will Coleda</title>
		<link href="http://www.nntp.perl.org/group/perl.perl6.announce/2010/07/msg634.html"/>
		<id>http://www.nntp.perl.org/group/perl.perl6.announce/2010/07/msg634.html</id>
		<updated>2010-07-23T01:21:16+00:00</updated>
		<content type="html">On behalf of the Rakudo development team, I'm happy to announce the&lt;br /&gt;July 2010 development release of Rakudo Perl #31 &quot;Atlanta&quot;.&lt;br /&gt;Rakudo is an implementation of Perl 6 on the Parrot Virtual Machine&lt;br /&gt;(see &amp;lt;http://www.parrot.org&amp;gt;). The tarball for the July 2010 release&lt;br /&gt;is available from &amp;lt;http://github.com/rakudo/rakudo/downloads&amp;gt;.&lt;br /&gt;&lt;br /&gt;Please note: This is not the Rakudo Star release, which is scheduled&lt;br /&gt;for July 29, 2010 [1]. The Star release will include the compiler, an&lt;br /&gt;installer, modules, a book (PDF), and more.&lt;br /&gt;&lt;br /&gt;The Rakudo Perl compiler follows a monthly release cycle, with each release&lt;br /&gt;named after a Perl Mongers group. The July 2010 release is code named&lt;br /&gt;&quot;Atlanta&quot; in recognition of Atlanta.pm and their Perl 5 Phalanx project [2],&lt;br /&gt;which they selected for its benefits to Perl 6.&lt;br /&gt;&lt;br /&gt;Some of the specific changes and improvements occurring with this&lt;br /&gt;release include:&lt;br /&gt;&lt;br /&gt;* Rakudo now properly constructs closures in most instances.&lt;br /&gt;&lt;br /&gt;* Undefined objects can now autovivify into arrays or hashes when&lt;br /&gt;  subscripted with .[ ] or .{ } .&lt;br /&gt;&lt;br /&gt;* Arrays can now handle infinite ranges.&lt;br /&gt;&lt;br /&gt;* Generic, multi-level Whatever-currying now works, e.g. (1, 1, *+* ... *).&lt;br /&gt;&lt;br /&gt;* The REPL shell now remembers lexical declarations in susbsequent lines.&lt;br /&gt;&lt;br /&gt;* The open() subroutine now returns a Failure instead of throwing&lt;br /&gt;  a fatal exception.&lt;br /&gt;&lt;br /&gt;* Rakudo now provides $*ARGFILES for reading from files specified&lt;br /&gt;  on the command line.&lt;br /&gt;&lt;br /&gt;* Added $*PERL, moved %*VM to $*VM.&lt;br /&gt;&lt;br /&gt;* Simple binding operators := and ::= now work.&lt;br /&gt;&lt;br /&gt;* Simple feed operators &amp;lt;== and ==&amp;gt; now work.&lt;br /&gt;&lt;br /&gt;For a more detailed list of changes see &quot;docs/ChangeLog&quot;.&lt;br /&gt;&lt;br /&gt;The development team thanks all of our contributors and sponsors for&lt;br /&gt;making Rakudo Perl possible, as well as those people who worked on parrot, the&lt;br /&gt;Perl 6 test suite and the specification.&lt;br /&gt;&lt;br /&gt;The following people contributed to this release:&lt;br /&gt;Patrick R. Michaud, Jonathan Worthington, Moritz Lenz, Solomon Foster,&lt;br /&gt;Carl Masak, Bruce Gray, Martin Berends, chromatic, Will &quot;Coke&quot; Coleda,&lt;br /&gt;Matthew (lue), Timothy Totten, maard, Kodi Arfer, TimToady, Stephen Weeks,&lt;br /&gt;Patrick Abi Salloum, snarkyboojum, Radu Stoica, Vyacheslav Matjukhin,&lt;br /&gt;Andrew Whitworth, cognominal, Tyler Curtis, Alex Kapranoff, Ingy döt Net,&lt;br /&gt;Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯, mathw, lue, Вячеслав Матюхин&lt;br /&gt;&lt;br /&gt;If you would like to contribute, see &amp;lt;http://rakudo.org/how-to-help&amp;gt;, ask on&lt;br /&gt;the perl6-compiler@perl.org mailing list, or ask on IRC #perl6 on freenode.&lt;br /&gt;&lt;br /&gt;The next release of Rakudo (#32) is scheduled for August 19, 2010.&lt;br /&gt;A list of the other planned release dates and code names for 2010 is&lt;br /&gt;available in the &quot;docs/release_guide.pod&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://rakudo.org/node/73&lt;br /&gt;[2] http://code.google.com/p/atlanta-pm-code/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;Will &quot;Coke&quot; Coleda&lt;br /&gt;</content>
		<author>
			<name>perl6.announce</name>
			<uri>http://www.nntp.perl.org/group/perl.perl6.announce/</uri>
		</author>
		<source>
			<title type="html">perl.perl6.announce</title>
			<subtitle type="html">...</subtitle>
			<link rel="self" href="http://www.nntp.perl.org/rss/perl.perl6.announce.rdf"/>
			<id>http://www.nntp.perl.org/group/perl.perl6.announce/</id>
			<rights type="html">Copyright 1998-2010 perl.org</rights>
		</source>
	</entry>

	<entry>
		<title type="html">Common Perl 6 data processing idioms</title>
		<link href="http://perlgeek.de/blog-en/perl-5-to-6/27-common-idioms.html"/>
		<id>http://perlgeek.de/blog-en/perl-5-to-6/27-common-idioms.html</id>
		<updated>2010-07-22T22:34:26+00:00</updated>
		<content type="html">&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;NAME&quot; title=&quot;click to go to top of document&quot;&gt;NAME&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&quot;Perl 5 to 6&quot; Lesson 27 - Common Perl 6 data processing idioms&lt;/p&gt;

&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;SYNOPSIS&quot; title=&quot;click to go to top of document&quot;&gt;SYNOPSIS&lt;/a&gt;&lt;/h3&gt;

&lt;pre&gt;  # create a hash from a list of keys and values:
  # solution 1: slices
  my %hash; %hash{@keys} = @values;
  # solution 2: meta operators
  my %hash = @keys Z=&amp;gt; @values;

  # create a hash from an array, with
  # true value for each array item:
  my %exists = @keys Z=&amp;gt; 1 xx *;

  # limit a value to a given range, here 0..10.
  my $x = -2;
  say 0 max $x min 10;

  # for debugging: dump the contents of a variable,
  # including its name, to STDERR
  note :$x.perl;

  # sort case-insensitively
  say @list.sort: *.lc;

  # mandatory attributes
  class Something {
      has $.required = die &quot;Attribute 'required' is mandatory&quot;;
  }
  Something.new(required =&amp;gt; 2); # no error
  Something.new()               # BOOM&lt;/pre&gt;

&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;DESCRIPTION&quot; title=&quot;click to go to top of document&quot;&gt;DESCRIPTION&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Learning the specification of a language is not enough to be productive with it. Rather you need to know how to solve specific problems. Common usage patterns, called &lt;i&gt;idioms&lt;/i&gt;, helps you not having to re-invent the wheel every time you're faced with a problem.&lt;/p&gt;

&lt;p&gt;So here a some common Perl 6 idioms, dealing with data structures.&lt;/p&gt;

&lt;h4&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;Hashes&quot; title=&quot;click to go to top of document&quot;&gt;Hashes&lt;/a&gt;&lt;/h4&gt;

&lt;pre&gt;  # create a hash from a list of keys and values:
  # solution 1: slices
  my %hash; %hash{@keys} = @values;
  # solution 2: meta operators
  my %hash = @keys Z=&amp;gt; @values;&lt;/pre&gt;

&lt;p&gt;The first solution is the same you'd use in Perl 5: assignment to a slice. The second solution uses the zip operator &lt;code&gt;Z&lt;/code&gt;, which joins to list like a zip fastener: &lt;code&gt;1, 2, 3 Z 10, 20, 30&lt;/code&gt; is &lt;code&gt;1, 10, 2, 20, 3, 30&lt;/code&gt;. The &lt;code&gt;Z=&amp;gt;&lt;/code&gt; is a meta operator, which combines zip with &lt;code&gt;=&amp;gt;&lt;/code&gt; (the Pair construction operator). So &lt;code&gt;1, 2, 3 Z=&amp;gt; 10, 20, 30&lt;/code&gt; evaluates to &lt;code&gt;1 =&amp;gt; 10, 2 =&amp;gt; 20, 3 =&amp;gt; 30&lt;/code&gt;. Assignment to a hash variable turns that into a Hash.&lt;/p&gt;

&lt;p&gt;For existence checks, the values in a hash often doesn't matter, as long as they all evaluate to &lt;code&gt;True&lt;/code&gt; in boolean context. In that case, a nice way to initialize the hash from a given array or list of keys is&lt;/p&gt;

&lt;pre&gt;  my %exists = @keys Z=&amp;gt; 1 xx *;&lt;/pre&gt;

&lt;p&gt;which uses a lazy, infinite list of 1s on the right-hand side, and relies on the fact that &lt;code&gt;Z&lt;/code&gt; ends when the shorter list is exhausted.&lt;/p&gt;

&lt;h4&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;Numbers&quot; title=&quot;click to go to top of document&quot;&gt;Numbers&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Sometimes you want to get a number from somewhere, but clip it into a predefined range (for example so that it can act as an array index).&lt;/p&gt;

&lt;p&gt;In Perl 5 you often end up with things like &lt;code&gt;$a = $b &amp;gt; $upper ? $upper : $b&lt;/code&gt;, and another conditional for the lower limit. With the &lt;code&gt;max&lt;/code&gt; and &lt;code&gt;min&lt;/code&gt; infix operators, that simplifies considerably to&lt;/p&gt;

&lt;pre&gt;  my $in-range = $lower max $x min $upper;&lt;/pre&gt;

&lt;p&gt;because &lt;code&gt;$lower max $x&lt;/code&gt; returns the larger of the two numbers, and thus clipping to the lower end of the range.&lt;/p&gt;

&lt;p&gt;Since &lt;code&gt;min&lt;/code&gt; and &lt;code&gt;max&lt;/code&gt; are infix operators, you can also clip infix:&lt;/p&gt;

&lt;pre&gt; $x max= 0;
 $x min= 10;&lt;/pre&gt;

&lt;h4&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;Debugging&quot; title=&quot;click to go to top of document&quot;&gt;Debugging&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Perl 5 has Data::Dumper, Perl 6 objects have the &lt;code&gt;.perl&lt;/code&gt; method. Both generate code that reproduces the original data structure as faithfully as possible.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;:$var&lt;/code&gt; generates a Pair (&quot;colonpair&quot;), using the variable name as key (but with sigil stripped). So it's the same as &lt;code&gt;var =&amp;gt; $var&lt;/code&gt;. &lt;code&gt;note()&lt;/code&gt; writes to the standard error stream, appending a newline. So &lt;code&gt;note :$var.perl&lt;/code&gt; is quick way of obtaining the value of a variable for debugging; purposes, along with its name.&lt;/p&gt;

&lt;h4&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;Sorting&quot; title=&quot;click to go to top of document&quot;&gt;Sorting&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Like in Perl 5, the &lt;code&gt;sort&lt;/code&gt; built-in can take a function that compares two values, and then sorts according to that comparison. Unlike Perl 5, it's a bit smarter, and automatically does a transformation for you if the function takes only one argument.&lt;/p&gt;

&lt;p&gt;In general, if you want to compare by a transformed value, in Perl 5 you can do:&lt;/p&gt;

&lt;pre&gt;    # WARNING: Perl 5 code ahead
    my @sorted = sort { transform($a) cmp transform($b) } @values;

    # or the so-called Schwartzian Transform:
    my @sorted = map { $_-&amp;gt;[1] }
                 sort { $a-&amp;gt;[0] cmp $b-&amp;gt;[0] }
                 map { [transform($_), $_] }
                 @values&lt;/pre&gt;

&lt;p&gt;The former solution requires repetitive typing of the transformation, and executes it for each comparison. The second solution avoids that by storing the transformed value along with the original value, but it's quite a bit of code to write.&lt;/p&gt;

&lt;p&gt;Perl 6 automates the second solution (and a bit more efficient than the naiive Schwartzian transform, by avoiding an array for each value) when the transformation function has arity one, ie accepts one argument only:&lt;/p&gt;

&lt;pre&gt;    my @sorted = sort &amp;amp;transform, @values;&lt;/pre&gt;

&lt;h4&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;Mandatory_Attributes&quot; title=&quot;click to go to top of document&quot;&gt;Mandatory Attributes&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;The typical way to enforce the presence of an attribute is to check its presence in the constructor - or in all constructors, if there are many.&lt;/p&gt;

&lt;p&gt;That works in Perl 6 too, but it's easier and safer to require the presence at the level of each attribute:&lt;/p&gt;

&lt;pre&gt;    has $.attr = die &quot;'attr' is mandatory&quot;;&lt;/pre&gt;

&lt;p&gt;This exploits the default value mechanism. When a value is supplied, the code for generating the default value is never executed, and the &lt;code&gt;die&lt;/code&gt; never triggers. If any constructor fails to set it, an exception is thrown.&lt;/p&gt;

&lt;h3&gt;&lt;a class=&quot;u&quot; href=&quot;http://perlgeek.de/blog-en/perl-5-to-6/index.rss#___top&quot; name=&quot;MOTIVATION&quot; title=&quot;click to go to top of document&quot;&gt;MOTIVATION&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;N/A&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-5-to-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 screencast - part 3 - arrays and ranges</title>
		<link href="http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-arrays-and-ranges.html"/>
		<id>http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-arrays-and-ranges.html</id>
		<updated>2010-07-22T11:38:18+00:00</updated>
		<content type="html">&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=tqxI7L5FQ4w&quot;&gt;Perl 6 arrays and ranges screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;  use v6;
  my @people = ;
  for @people -&amp;gt; $n {
    say $n;
  }


  use v6;
  my @people = ;
  for 0 .. @people.elems/2 -&amp;gt; $i {
    say &quot;@people[$i*2] -  @people[$i*2+1]&quot;;
  }


  use v6;
  my @people = ;
  for @people -&amp;gt; $name, $phone {
    say &quot;$name - $phone&quot;;
  }


  use v6;
  my @names = ;
  my @phones = &amp;lt;123 456 789 512&amp;gt;;
  for @names Z @phones -&amp;gt; $name, $phone {
    say &quot;$name - $phone&quot;;
  }


  use v6;
  for 1 .. 10 -&amp;gt; $n {
    say $n;
  }


  use v6;
  for 1,3 ... Inf -&amp;gt; $n {
    say $n;
    last if $n &amp;gt; 10;
  }


&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 screencast - part 3 - arrays and ranges</title>
		<link href="http://szabgab.com/blog/2010/07/1279823898.html"/>
		<id>http://szabgab.com/blog/2010/07/1279823898.html</id>
		<updated>2010-07-22T11:38:18+00:00</updated>
		<content type="html">&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=tqxI7L5FQ4w&quot;&gt;Perl 6 arrays and ranges screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;  use v6;
  my @people = ;
  for @people -&amp;gt; $n {
    say $n;
  }


  use v6;
  my @people = ;
  for 0 .. @people.elems/2 -&amp;gt; $i {
    say &quot;@people[$i*2] -  @people[$i*2+1]&quot;;
  }


  use v6;
  my @people = ;
  for @people -&amp;gt; $name, $phone {
    say &quot;$name - $phone&quot;;
  }


  use v6;
  my @names = ;
  my @phones = &amp;lt;123 456 789 512&amp;gt;;
  for @names Z @phones -&amp;gt; $name, $phone {
    say &quot;$name - $phone&quot;;
  }


  use v6;
  for 1 .. 10 -&amp;gt; $n {
    say $n;
  }


  use v6;
  for 1,3 ... Inf -&amp;gt; $n {
    say $n;
    last if $n &amp;gt; 10;
  }


&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Call for Perl Development grant proposals</title>
		<link href="http://szabgab.com/blog/2010/07/call-for-perl-development-grant-proposals.html"/>
		<id>http://szabgab.com/blog/2010/07/call-for-perl-development-grant-proposals.html</id>
		<updated>2010-07-21T14:49:42+00:00</updated>
		<content type="html">&lt;p&gt;
Alberto has recently published the offical 
&lt;a href=&quot;http://news.perlfoundation.org/2010/07/2010q3-call-for-grant-proposal.html&quot;&gt;2010Q3 Call for Grant Proposals&lt;/a&gt;
of &lt;a href=&quot;http://www.perlfoundation.org/&quot;&gt;The Perl Foundation&lt;/a&gt;. I'd like to encourage everyone to submit proposals.
The dead-line is within 10 days.
&lt;/p&gt;
&lt;p&gt;
The standard TPF development grants are limited up to 3,000 USD/grant.
I don't know the exact reason for that limitation but I am quite sure part of the 
reason is that TPF does not have a lot of money.
&lt;/p&gt;
&lt;p&gt;
While this amount of money might not be a big motivation for someone who
lives in the wealthier areas of Europe or North America but as 
&lt;a href=&quot;http://blog.urth.org/2010/07/do-tpf-grants-de-motivate.html&quot;&gt;Dave Rolsky&lt;/a&gt; 
and a number of others have pointed out getting the grant might have other positive effects.
&lt;/p&gt;
&lt;p&gt;
On the other hand people living in countries where the salaries are much lower 
(e.g. India, China, Africa and even South America) could use such a grant and fill a full salary for
2-3 months or even longer. They could implement much bigger projects during that time period.
&lt;/p&gt;
&lt;p&gt;
Let's see that there are lots of good proposals!
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Call for Perl Development grant proposals</title>
		<link href="http://szabgab.com/blog/2010/07/1279748982.html"/>
		<id>http://szabgab.com/blog/2010/07/1279748982.html</id>
		<updated>2010-07-21T14:49:42+00:00</updated>
		<content type="html">&lt;p&gt;
Alberto has recently published the offical 
&lt;a href=&quot;http://news.perlfoundation.org/2010/07/2010q3-call-for-grant-proposal.html&quot;&gt;2010Q3 Call for Grant Proposals&lt;/a&gt;
of &lt;a href=&quot;http://www.perlfoundation.org/&quot;&gt;The Perl Foundation&lt;/a&gt;. I'd like to encourage everyone to submit proposals.
The dead-line is within 10 days.
&lt;/p&gt;
&lt;p&gt;
The standard TPF development grants are limited up to 3,000 USD/grant.
I don't know the exact reason for that limitation but I am quite sure part of the 
reason is that TPF does not have a lot of money.
&lt;/p&gt;
&lt;p&gt;
While this amount of money might not be a big motivation for someone who
lives in the wealthier areas of Europe or North America but as 
&lt;a href=&quot;http://blog.urth.org/2010/07/do-tpf-grants-de-motivate.html&quot;&gt;Dave Rolsky&lt;/a&gt; 
and a number of others have pointed out getting the grant might have other positive effects.
&lt;/p&gt;
&lt;p&gt;
On the other hand people living in countries where the salaries are much lower 
(e.g. India, China, Africa and even South America) could use such a grant and fill a full salary for
2-3 months or even longer. They could implement much bigger projects during that time period.
&lt;/p&gt;
&lt;p&gt;
Let's see that there are lots of good proposals!
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-US">Perl 6 十周年慶: 遠古時期 (五之二)</title>
		<link href="http://pugs.blogs.com/pugs/2010/07/perl-6-%E5%8D%81%E5%91%A8%E5%B9%B4%E6%85%B6-%E9%81%A0%E5%8F%A4%E6%99%82%E6%9C%9F-%E4%BA%94%E4%B9%8B%E4%BA%8C.html"/>
		<id>http://pugs.blogs.com/pugs/2010/07/perl-6-%E5%8D%81%E5%91%A8%E5%B9%B4%E6%85%B6-%E9%81%A0%E5%8F%A4%E6%99%82%E6%9C%9F-%E4%BA%94%E4%B9%8B%E4%BA%8C.html</id>
		<updated>2010-07-21T09:46:33+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;p&gt;&lt;em&gt;(This is a translation of masak++'s excellent &lt;a href=&quot;http://use.perl.org/%7Emasak/journal/40451&quot;&gt;Perl 6 anniversary&lt;/a&gt; post, part 2 of 5.)&lt;br /&gt;
(這是 masak++ 為慶祝“樂土專案”即將正式發行所寫的紀念文章的中譯。)&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
也許你聽說過 Perl 6 最初的「徵求建議（RFC）」過程 。當時 Perl 6 才剛開始，連 Larry Wall 都還不知道要朝哪個方向發展。
&lt;/p&gt;&lt;p&gt;
於是，Perl 社群建了一套系統，公開徵求對語言功能的建議。
&lt;/p&gt;&lt;p&gt;
系統上線時，團隊原本估計會收到大約 20~30 份建議書。
&lt;/p&gt;&lt;p&gt;
結果，總共收到了 361 份！
&lt;/p&gt;&lt;p&gt;
建議書不只是數量多，而且涵蓋的範圍五花八門，甚至互相衝突。大部份的建議只考慮到一個面向，完全沒有考慮到它會對整體語言造成什麼影響。
&lt;/p&gt;&lt;p&gt;
如果當時我們竟然把所有建議都實作出來的話，結果也許會像這頭著名的 &lt;a href=&quot;http://www.axis-of-aevil.net/archives/img/2003_08/p6_cover.jpg&quot;&gt;Perl 6  大怪獸&lt;/a&gt;一樣吧。
&lt;/p&gt;&lt;p&gt;
除此之外，社群對建議書的後續討論裡，往往缺乏「如何實作」的細節。Mark-Jason Dominus 對 Perl 6 RFC 過程的&lt;a href=&quot;http://www.perl.com/pub/2000/11/perl6rfc.html&quot;&gt;評論&lt;/a&gt;如下：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
於是「誰來幫貓掛鈴鐺」的問題就出現了。人們提出各種各樣的功能，然後不停討論細節，但其實這些功能根本沒辦法實現。 [...]
&lt;/p&gt;&lt;p&gt;
這讓討論失去焦點，難以集中到實際可行的權衡取捨上。[...]
&lt;/p&gt;&lt;p&gt;
最後，就我個人而言，我覺得這種「不求甚解」的態度相當惱人。它讓很多實際瞭解 Perl 內部細節的人不想參與討論。
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
最後還是 Larry Wall 獨力接下了整合 RFC 的重任，將它們融會貫通成完整的構思。他發佈的文件統稱「啟示錄」，對 RFC 分門別類、逐項點評：有的獲得採納，有的部份保留，也有些遭到駁回。
&lt;/p&gt;&lt;p&gt;
啟示錄的編號，依照駱駝書的章節順序排列：舉例來說，和第三章「算符」相對應的「啟示錄三」，講的就是 Perl 6 裡該具備哪些算符。
&lt;/p&gt;&lt;p&gt;
以下是所有已發佈的啟示錄：
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;啟示錄一，2001年5月&lt;/li&gt;
&lt;li&gt;啟示錄二，2001年5月&lt;/li&gt;
&lt;li&gt;啟示錄三，2001年10月&lt;/li&gt;
&lt;li&gt;啟示錄四，2002年1月&lt;/li&gt;
&lt;li&gt;啟示錄五，2002年6月&lt;/li&gt;
&lt;li&gt;啟示錄六，2003年3月&lt;/li&gt;
&lt;li&gt;啟示錄十二，2004年4月&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;
2001 ~ 2004 這三年，可說是 Perl 6 從眾人的意見中逐漸淬煉成形的階段。
&lt;/p&gt;&lt;p&gt;
與「啟示錄」同時發佈的，還有由 Perl 6 的主要設計者之一 Damian Conway 撰寫的「注疏」。
&lt;/p&gt;&lt;p&gt;
「啟示錄」注重的是語言的藍圖，以及功能的去留與否。「注疏」則負責展示如何使用新的功能，並對 Perl 5 程式員解釋 Perl 6 提供了哪些改進。
&lt;/p&gt;&lt;p&gt;
此刻我重讀「注疏」，覺得特別有趣的是當年「Perl 6 只是 Perl 5 的新分支」這個想法。當時的 Perl 6 已經作出許多細部的改進，但是 Damian 在「注疏二」裡，介紹完一長段 Perl 6 程式後，仍然如此敘述：
&lt;/p&gt;
&lt;blockquote&gt;
…事實上，這支程式總共 1779 字，和 Perl 5 的版本之間只差 40 個字。而且幾乎都只是把陣列取值從 $x[…] 改成 @x[…] 而已。不用靠 p52p6 自動翻譯，就有 98% 的相容性… 還不賴！
&lt;/blockquote&gt;
&lt;p&gt;
這個想法如今已然不再。如果你到 #perl6 頻道上問「Perl 6 和 Perl 5 像不像？」我們會這樣回答：雖然這兩種語言的基本概念和目的相以，但是語法卻大有不同。所以，最好把 Perl 6 當作新的語言來學，而不是用寫 Perl 5 的角度來思考。
&lt;/p&gt;&lt;p&gt;
在 2004 年，Perl 6 團隊對啟示錄作出摘要，去除闡釋的段落，發佈成足以作為語言規格的幾篇「綱要」，以供實作團隊參考。「綱要」雖然言簡意賅，但對於想深入瞭解 Perl 6 語言的人來說，仍然是不可或缺的一批文件。
&lt;/p&gt;&lt;p&gt;
作為 Perl 6 語言的定義，「綱要」一直持續更新至今。在 &lt;a href=&quot;http://perlcabal.org/syn/&quot;&gt;perlcabal.org&lt;/a&gt; 上，目前共有 33 篇綱要。其中的 S02 ~ S06 已經相當穩定，偶爾有些小幅更動。其餘部份則仍然處於草案階段，有待實作者及使用者的後續回饋，來讓它們更臻完善。
&lt;/p&gt;&lt;p&gt;
與此同時，許多實作 Perl 6 的計劃紛紛出現，但最終都以放棄收場。
&lt;/p&gt;&lt;p&gt;
早在擲杯事件和 RFC 之前，Chip Salzenberg 就用 C++ 開始進行「Topaz」計劃，並準備將它發展成 Perl 6。Topaz 原本打算重寫 Perl 5 的內部結構，但卻難以為繼。
&lt;/p&gt;&lt;p&gt;
當我問 Larry 為何 Topaz 會失敗時，他的回答是：「重新實作過的瘋狂，依然還是瘋狂。」（意思是：「不要試圖把 Perl 5 的核心改裝成 Perl 6。」）
&lt;/p&gt;&lt;p&gt;
此外還有「Sapphire」專案，只持續了一個星期。它開始於 2000 年 9 月，當時 Perl 6 才剛宣佈不久。Sapphire 也採取了「重寫 Perl 5 核心」的規劃，作為 Perl 6 正式實作前的預習。
&lt;/p&gt;&lt;p&gt;
不久之後，Parrot 專案開始發展。它是一個專為動態語言設計的虛擬機器，特別適合執行動態程度極高的 Perl 6 所需。
&lt;/p&gt;&lt;p&gt;
同時開始的還有 Ponie 專案，試圖將 Perl 5 硬生生移植到 Parrot 上運行。正如&lt;a href=&quot;http://www.nntp.perl.org/group/perl.ponie.dev/2006/08/msg487.html&quot;&gt;這篇文章&lt;/a&gt;所述，Ponie 因為&lt;a href=&quot;http://en.wikipedia.org/wiki/High_bus_number&quot;&gt;巴士數&lt;/a&gt;太低，以及當時 Parrot 還不夠成熟的緣故，最終在 2006 內正式解散。
&lt;/p&gt;&lt;p&gt;
當時我是一介旁觀者，只知道有 Parrot，沒聽過其他專案，更不知道 Parrot 上曾經出現過的 Perl 6 實作。
&lt;/p&gt;&lt;p&gt;
我認真讀完了每篇「啟示錄」和「注疏」，覺得它們很有意思。
&lt;/p&gt;&lt;p&gt;
可然後呢？這個程式語言有一天能成真嗎？沒人曉得。似乎沒有什麼激動人心的事情發生。
&lt;/p&gt;&lt;p&gt;
在 2005 年初，有位唐某人在 perl6-all 通信論壇上貼了一段&lt;a href=&quot;http://www.mail-archive.com/perl6-all@perl.org/msg45008.html&quot;&gt;短訊&lt;/a&gt;，說自己正在實作一小部份「不產生副作用運算的 Perl 6」。（請留意這篇郵件的口氣，和 Linus Torvalds 著名的那篇「不像 GNU 那麼大規模」聲明的相似程度。）
&lt;/p&gt;&lt;p&gt;
不知不覺間，這「一小部份」已經成長為完整的 Perl 6 實作，它的名字叫作 Pugs。
&lt;/p&gt;</content>
		<author>
			<name>audreyt</name>
			<uri>http://pugs.blogs.com/pugs/</uri>
		</author>
		<source>
			<title type="html">Pugs</title>
			<subtitle type="html">Implementing Perl 6... and other related technologies.</subtitle>
			<link rel="self" href="http://pugs.blogs.com/pugs/index.rdf"/>
			<id>http://pugs.blogs.com/pugs/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 presentation in Ramat Gan on 26th July 2010</title>
		<link href="http://szabgab.com/blog/2010/07/perl6-presentation-in-ramat-gan.html"/>
		<id>http://szabgab.com/blog/2010/07/perl6-presentation-in-ramat-gan.html</id>
		<updated>2010-07-20T19:43:54+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;
Next week, on 26th July, I am going to give a Perl 6 presentation at the 
&lt;a href=&quot;http://groups.google.com/group/pyweb-il/web/pyweb-il-17&quot;&gt;17th meeting of PyWeb Israel&lt;/a&gt;. 
That's the monthly meeting of the local Python users group.
&lt;/p&gt;
&lt;p&gt;
There will be a Ruby on Rails presentation before mine and Python + Javascript presentation after it.
It's going to be interesting and now I need to invest a lot of time and energy in preparing a new talk
that might fit this audience.
&lt;/p&gt;
&lt;p&gt;
In the meantime watch some &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6 screencasts&lt;/a&gt; I prepared.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 presentation in Ramat Gan on 26th July 2010</title>
		<link href="http://szabgab.com/blog/2010/07/1279680234.html"/>
		<id>http://szabgab.com/blog/2010/07/1279680234.html</id>
		<updated>2010-07-20T19:43:54+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;
Next week, on 26th July, I am going to give a Perl 6 presentation at the 
&lt;a href=&quot;http://groups.google.com/group/pyweb-il/web/pyweb-il-17&quot;&gt;17th meeting of PyWeb Israel&lt;/a&gt;. 
That's the monthly meeting of the local Python users group.
&lt;/p&gt;
&lt;p&gt;
There will be a Ruby on Rails presentation before mine and Python + Javascript presentation after it.
It's going to be interesting and now I need to invest a lot of time and energy in preparing a new talk
that might fit this audience.
&lt;/p&gt;
&lt;p&gt;
In the meantime watch some &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6 screencasts&lt;/a&gt; I prepared.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 screencast - part 2 - arrays</title>
		<link href="http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-arrays.html"/>
		<id>http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-arrays.html</id>
		<updated>2010-07-20T18:54:38+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=TbjNXtU2u_0&quot;&gt;Perl 6 arrays screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;  use v6;
  my @names = &quot;Foo&quot;, &quot;Bar&quot;, &quot;Moo&quot;;
  say @names[];
  say &quot;Hello {@names} how are you?&quot;;
  say &quot;Hello { join('; ', @names) } how are you?&quot;;


  use v6;
  my @names = ;
  say &quot;Hello {@names} how are you?&quot;;
  for @names -&amp;gt; $n {
    say $n;
  }

&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 screencast - part 2 - arrays</title>
		<link href="http://szabgab.com/blog/2010/07/1279677278.html"/>
		<id>http://szabgab.com/blog/2010/07/1279677278.html</id>
		<updated>2010-07-20T18:54:38+00:00</updated>
		<content type="html">&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=TbjNXtU2u_0&quot;&gt;Perl 6 arrays screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
See more &lt;a href=&quot;http://szabgab.com/perl6.html&quot;&gt;Perl 6&lt;/a&gt; entries.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;  use v6;
  my @names = &quot;Foo&quot;, &quot;Bar&quot;, &quot;Moo&quot;;
  say @names[];
  say &quot;Hello {@names} how are you?&quot;;
  say &quot;Hello { join('; ', @names) } how are you?&quot;;


  use v6;
  my @names = ;
  say &quot;Hello {@names} how are you?&quot;;
  for @names -&amp;gt; $n {
    say $n;
  }

&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Fun with series</title>
		<link href="http://justrakudoit.wordpress.com/2010/07/20/fun-with-series/"/>
		<id>http://justrakudoit.wordpress.com/?p=126</id>
		<updated>2010-07-20T11:51:30+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;On #perl6 this morning, rokoteko was curious about doing Taylor series in Perl 6.  This sort of thing fascinates me, so I quickly coded up this:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;sub sine-power($x) {
    my $sign = 1;
    gather for 1, 3 ... * -&amp;gt; $n {
        take $sign * $x ** $n / [*] (1 ... $n);
        $sign *= -1;
    }
}
&lt;/pre&gt;
&lt;p&gt;That works, and is pretty straightforward.  However, it’s got one big glitch in it, IMO.  Even if you feed it a Rat input, it will always return a list of Nums, because &lt;code&gt;$x ** $n&lt;/code&gt; returns a Num.  (Hmmm…. might that be worth changing?)&lt;/p&gt;
&lt;p&gt;No problem, you just need to complicate the function a bit by keeping running products for the numerator and denominator:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;sub sine-power($x) {
    my $sign = 1;
    my $x-part = $x;
    my $denom = 1;
    gather for 3, 5 ... * -&amp;gt; $n {
        take $sign * $x-part / $denom;
        $sign *= -1;
        $x-part *= $x * $x;
        $denom *= $n * ($n - 1);
    }
}
&lt;/pre&gt;
&lt;p&gt;As a bonus, the new version should be faster.&lt;/p&gt;
&lt;p&gt;Let’s see if it works:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;&amp;gt; say sine-power(0.1).munch(4).perl;
(1/10, -1/6000, 1/12000000, -1.98412698412698e-11)

&amp;gt; say ([+] sine-power(0.1).munch(3)).perl;
1198001/12000000

&amp;gt; say [+] sine-power(0.1).munch(3);
0.0998334166666667

say sin(0.1);
0.0998334166468282
&lt;/pre&gt;
&lt;p&gt;As you can see, this generates a Rat approximation for sin(0.1) which is accurate to 10 decimal places.  Not bad!&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/126/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/126/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/126/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/126/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/126/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/126/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/126/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/126/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/126/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/126/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/126/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/126/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/126/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/126/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=126&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Gabor: Keep going</title>
		<link href="http://perlgeek.de/blog-en/perl-6/gabor-keep-going.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/gabor-keep-going.html</id>
		<updated>2010-07-20T05:36:05+00:00</updated>
		<content type="html">&lt;p&gt;After reading &lt;a href=&quot;http://blogs.perl.org/users/gabor_szabo/2010/07/promoting-perl-is-fun.html&quot;&gt;this
blog post&lt;/a&gt;, I just want to say: keep going.&lt;/p&gt;

&lt;p&gt;Gabor does really awesome things for Perl (and especially for Perl 6, which
I tend to notice more): beginner's tutorials, screencasts, training courses,
writes an IDE and so on. If his primary interest was his own success, his
priorities would be quite different.&lt;/p&gt;

&lt;p&gt;I hope that Gabor doesn't pay too much attention to the hostilities from
parts of the Perl community, and I wish him and us all the best for his &lt;a href=&quot;http://news.perlfoundation.org/2010/06/hague-grant-application-perl-e.html&quot;&gt;current
project&lt;/a&gt;.&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Introduction to Perl 6 screencast - part 1 - scalars</title>
		<link href="http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-scalars.html"/>
		<id>http://szabgab.com/blog/2010/07/introduction-to-perl6-screencast-scalars.html</id>
		<updated>2010-07-19T17:07:33+00:00</updated>
		<content type="html">&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=Lp8E6OiFlEM&quot;&gt;Perl 6 scalars screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.rakudo.org/&quot;&gt;Rakudo&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
IRC: &lt;a href=&quot;http://szabgab.com/blog/webchat.freenode.net/?channels=perl6&quot;&gt;#perl6 on irc.freenode.net&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;  use v6;
  say &quot;Hello world&quot;;


  use v6;
  my $name = prompt &quot;Please type in your name: &quot;;
  say &quot;Hello $name, how are you?&quot;;


  use v6;
  my $year = prompt &quot;When were you born? &quot;;
  if $year &amp;gt; 1987 {
    say &quot;You are younger than Perl by { $year - 1987 } years&quot;;
  }


  use v6;
  my $year = prompt &quot;When were you born? &quot;;
  if 1995 &amp;gt; $year &amp;gt; 1987 {
    say &quot;You are younger than Perl 1 but older than Perl 5&quot;;
  }



  use v6;
  my $luck = prompt &quot;What is your lucky number? &quot;;
  if $luck == 3 or $luck == 7 or $luck == 13 {
    say &quot;Oh, that's like mine&quot;;
  }

  if $luck == 3|7|13 {
    say &quot;Oh, that's still like mine&quot;;
  }


&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Introduction to Perl 6 screencast - part 1 - scalars</title>
		<link href="http://szabgab.com/blog/2010/07/1279584453.html"/>
		<id>http://szabgab.com/blog/2010/07/1279584453.html</id>
		<updated>2010-07-19T17:07:33+00:00</updated>
		<content type="html">&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;
Direct link to the &lt;a href=&quot;http://www.youtube.com/watch?v=Lp8E6OiFlEM&quot;&gt;Perl 6 scalars screencast&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.rakudo.org/&quot;&gt;Rakudo&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
IRC: &lt;a href=&quot;http://szabgab.com/blog/webchat.freenode.net/?channels=perl6&quot;&gt;#perl6 on irc.freenode.net&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Perl 6 Code examples&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;  use v6;
  say &quot;Hello world&quot;;


  use v6;
  my $name = prompt &quot;Please type in your name: &quot;;
  say &quot;Hello $name, how are you?&quot;;


  use v6;
  my $year = prompt &quot;When were you born? &quot;;
  if $year &amp;gt; 1987 {
    say &quot;You are younger than Perl by { $year - 1987 } years&quot;;
  }


  use v6;
  my $year = prompt &quot;When were you born? &quot;;
  if 1995 &amp;gt; $year &amp;gt; 1987 {
    say &quot;You are younger than Perl 1 but older than Perl 5&quot;;
  }



  use v6;
  my $luck = prompt &quot;What is your lucky number? &quot;;
  if $luck == 3 or $luck == 7 or $luck == 13 {
    say &quot;Oh, that's like mine&quot;;
  }

  if $luck == 3|7|13 {
    say &quot;Oh, that's still like mine&quot;;
  }


&lt;/pre&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-US">Perl 6 十周年慶: 前言 (五之一)</title>
		<link href="http://pugs.blogs.com/pugs/2010/07/perl-6-%E5%8D%81%E5%91%A8%E5%B9%B4%E6%85%B6-%E5%89%8D%E8%A8%80-%E4%BA%94%E4%B9%8B%E4%B8%80.html"/>
		<id>http://pugs.blogs.com/pugs/2010/07/perl-6-%E5%8D%81%E5%91%A8%E5%B9%B4%E6%85%B6-%E5%89%8D%E8%A8%80-%E4%BA%94%E4%B9%8B%E4%B8%80.html</id>
		<updated>2010-07-19T12:27:28+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;p&gt;&lt;em&gt;(This is a translation of masak++'s excellent &lt;a href=&quot;http://use.perl.org/%7Emasak/journal/40451&quot;&gt;Perl 6 anniversary&lt;/a&gt; post, part 1 of 5.)&lt;br /&gt;
(這是 masak++ 一篇網誌的中譯，分五部刊出，這是第一部份。)&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;十年前的今天，Jon Orwant 在一場會議上摔咖啡杯。&lt;/p&gt;

&lt;p&gt;據維基百科記載，Perl 6 計劃是從十年前的七月十九日開始的。&lt;/p&gt;

&lt;p&gt;而前一天的擲杯事件，可以說是觸發 Perl 6 誕生的火苗。&lt;/p&gt;

&lt;p&gt;Jon 為什麼要扔杯子呢？請看 Larry Wall 的&lt;a href=&quot;http://www.spidereyeballs.com/os5/set1/small_os5_r06_9705.html&quot;&gt;口述歷史&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;頭一小時裡，我們討論的都是些無聊沉悶的政治組織問題。&lt;/p&gt;
&lt;p&gt;開會開到一半，Jon Orwant 走進房間，站在一邊聽了幾分鐘。&lt;/p&gt;
&lt;p&gt;然後他很淡定地走向咖啡桌，上面大約有20個咖啡杯。&lt;/p&gt;
&lt;p&gt;他拿起一個杯子，往對面的牆壁扔去。然後再丟一個。&lt;/p&gt;
&lt;p&gt;他邊扔邊說: 「我們得想想辦法激勵社群，不然就都完了。大家越來越無聊，都去做別的事了。」&lt;/p&gt;
&lt;p&gt;他說對了。原本他也許是想辦一場更大的 Perl 會議，或是讓 Perl 某些功能更強等等。但他說得很對，
他刺激了我們。&lt;/p&gt;
&lt;p&gt;他接著說: 「我不管你們怎麼做，可你們得搞些大事出來。」然後他掉頭就走。&lt;/p&gt;
&lt;p&gt;你要知道，這是我見過最完美的一場暴走。如果你認識 Jon，就會知道他很能自制。&lt;/p&gt;
&lt;p&gt;他發這場脾氣完全是事前計劃好的。非常驚人。&lt;/p&gt;
&lt;p&gt;我當時就想: 「我是不是也該站起來摔杯子呢？」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;在構思這篇網誌時，我只聽說過這件事，但不確定它是哪天發生的。我上網查了些資料，還是找不到確切的日期。&lt;/p&gt;

&lt;p&gt;不過，我找到了一份&lt;a href=&quot;http://www.nntp.perl.org/group/perl.packrats/2002/07/msg3.html&quot;&gt;電子郵件&lt;/a&gt;，上面列出了有哪些人在場，以及 Jon 到底丟了幾個杯子。&lt;/p&gt;

&lt;p&gt;最後，我決定在 IRC 頻道上直接問 Larry。接下來這段充滿雙關的對話紀錄，很能代表 #perl6 的氣氛:&lt;/p&gt;

&lt;blockquote&gt;&lt;tt&gt;&amp;lt;TimToady&amp;gt; masak: 對了，那些杯子是前一天扔的。
&lt;br /&gt;&amp;lt;jnthn&amp;gt; 那些？我以為只扔了一個杯子!
&lt;br /&gt;&amp;lt;masak&amp;gt; jnthn: 五個。
&lt;br /&gt;&amp;lt;masak&amp;gt; jnthn: 不過，只有一個摔破了。
&lt;br /&gt;&amp;lt;masak&amp;gt; TimToady: 感謝。這樣我還來得及寫周年紀念文。
&lt;br /&gt;&amp;lt;jnthn&amp;gt; masak: 礸!
&lt;br /&gt;&amp;lt;TimToady&amp;gt; 我當時應該把碎片留作紀念的。
&lt;br /&gt;&amp;lt;masak&amp;gt; 「Perl 6: 相容性、咖啡杯，2000 年起都砸碎。」
&lt;br /&gt;* pmichaud 打開 photoshop, 準備放上 cafepress
&lt;br /&gt;&amp;lt;masak&amp;gt; pmichaud: 「Perl 6: 打破杯具，再創豐杯。」
&lt;br /&gt;&amp;lt;pmichaud&amp;gt; 「語言有難時，請擊碎此杯。」
&lt;br /&gt;&amp;lt;jnthn&amp;gt; 「Perl 6: 比 Perl 5 更牆一杯。」
&lt;br /&gt;&amp;lt;pmichaud&amp;gt; 「Perl 6 大破大立、碎碎平安!」
&lt;br /&gt;&amp;lt;masak&amp;gt; &quot;if $杯 === all @碎片 {say '夠了，太杯撞了!'}
&lt;br /&gt;&amp;lt;jnthn&amp;gt; 你杯得動的。:P
&lt;br /&gt;* masak 笑到杯桁了
&lt;br /&gt;&amp;lt;TimToady&amp;gt; 「Jon 為什麼要扔甜甜圈呢？」 -- 拓樸學家
&lt;br /&gt;&amp;lt;masak&amp;gt; :P
&lt;br /&gt;&amp;lt;TimToady&amp;gt; 「這是碎杯。&amp;lt;mug&amp;gt; &lt;a href=&quot;http://www.youtube.com/watch?v=3FtNm9CgA6U&amp;amp;feature=related&quot;&gt;這是你嗑了碎杯的腦袋。&lt;/a&gt;              &amp;lt;camelia&amp;gt; 有問題嗎？」
&lt;br /&gt;&amp;lt;masak&amp;gt; 「Perl 6: 十年聖杯碎，今請尋其蹤。」
&lt;br /&gt;&amp;lt;jnthn&amp;gt; 「&lt;a href=&quot;http://www.somethingawful.com/flash/shmorky/babby.swf&quot;&gt;杯比怎麼昇出來的&lt;/a&gt;？」
&lt;br /&gt;&amp;lt;masak&amp;gt; 都被 Jon Orwant 搞大了。
&lt;br /&gt;&amp;lt;jnthn&amp;gt; 五杯無寸鐵，何人竟害之!
&lt;br /&gt;&amp;lt;masak&amp;gt; 我為清潔工祈倒。
&lt;br /&gt;&amp;lt;masak&amp;gt; 「Perl 6: &lt;a href=&quot;http://www.chinadaily.com.cn/language_tips/2006-09/22/content_694826.htm&quot;&gt;杯已擲下&lt;/a&gt;。」
&lt;/tt&gt;&lt;/blockquote&gt;

&lt;p&gt;Perl 6 至今已有十年的歷史了。接下來，我會從(主要是)我個人的觀點，敘述這十年來的經過。&lt;/p&gt;

&lt;p&gt;除了紀錄史實之外，我也希望能分享我對這個專案的熱情，以及為什麼我認為 Jon Orwant 的一擲，造就了現代程式語言史上最酷的計劃之一。&lt;/p&gt;

&lt;hr /&gt;
&lt;em&gt;(未完，待續。)&lt;/em&gt;</content>
		<author>
			<name>audreyt</name>
			<uri>http://pugs.blogs.com/pugs/</uri>
		</author>
		<source>
			<title type="html">Pugs</title>
			<subtitle type="html">Implementing Perl 6... and other related technologies.</subtitle>
			<link rel="self" href="http://pugs.blogs.com/pugs/index.rdf"/>
			<id>http://pugs.blogs.com/pugs/</id>
		</source>
	</entry>

	<entry>
		<title type="html">&quot;Perlito&quot; MiniPerl6 5.0 - more bootstrapped backends, more Perl 6 compatibility by Flavio S. Glock</title>
		<link href="http://www.nntp.perl.org/group/perl.perl6.announce/2010/07/msg633.html"/>
		<id>http://www.nntp.perl.org/group/perl.perl6.announce/2010/07/msg633.html</id>
		<updated>2010-07-19T11:37:36+00:00</updated>
		<content type="html">Perlito is a compiler that implements a subset of Perl 6.&lt;br /&gt;Perlito compiles &quot;MiniPerl6&quot; programs (such as itself) into one of the&lt;br /&gt;'backend' languages: Go, Common Lisp, Perl 5, Javascript, and Python&lt;br /&gt;2.&lt;br /&gt;&lt;br /&gt;Web page: http://www.perlito.org&lt;br /&gt;Run online in the browser: http://perlcabal.org/~fglock/perlito.html&lt;br /&gt;Download: http://github.com/fglock/Perlito/downloads&lt;br /&gt;&lt;br /&gt;Changes in version 5.0 (2010-07-19):&lt;br /&gt;- Python backend bootstrap.&lt;br /&gt;- use variable assignment instead of binding - that is, use '=' instead of ':='&lt;br /&gt;- 'use' - all backends can now use Test.pm&lt;br /&gt;- 'elsif'&lt;br /&gt;- 'loop'&lt;br /&gt;- regex quantifiers&lt;br /&gt;- Lisp backend now bootstraps with the 'util/mp6.pl' compiler&lt;br /&gt;- floating point numbers&lt;br /&gt;- 'while' loop&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;- Flávio S. Glock (fglock)&lt;br /&gt;</content>
		<author>
			<name>perl6.announce</name>
			<uri>http://www.nntp.perl.org/group/perl.perl6.announce/</uri>
		</author>
		<source>
			<title type="html">perl.perl6.announce</title>
			<subtitle type="html">...</subtitle>
			<link rel="self" href="http://www.nntp.perl.org/rss/perl.perl6.announce.rdf"/>
			<id>http://www.nntp.perl.org/group/perl.perl6.announce/</id>
			<rights type="html">Copyright 1998-2010 perl.org</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Happy 10th anniversary, Perl 6</title>
		<link href="http://use.perl.org/~masak/journal/40451?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40451?from=rss</id>
		<updated>2010-07-18T19:34:37+00:00</updated>
		<content type="html">&lt;p&gt;On this date exactly 10 years ago, Jon Orwant threw coffee mugs against a wall
during a meeting. Wikipedia chronicles the announcement of Perl 6 as being on
July 19 ten years ago... but the throwing of mugs on the 18th can be said to
spark the birth of Perl 6.&lt;/p&gt;&lt;p&gt;Why did he throw mugs? &lt;a href=&quot;http://www.spidereyeballs.com/os5/set1/small_os5_r06_9705.html&quot;&gt;Larry
Wall's own explanation&lt;/a&gt; covers it in sufficient detail:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;p&gt;We spent the first hour gabbing about all sorts of political and
organizational issues of a fairly boring and mundane nature. Partway through,
Jon Orwant comes in, and stands there for a few minutes listening, and then he
very calmly walks over to the coffee service table in the corner, and there
were about 20 of us in the room, and he picks up a coffee mug and throws it
against the other wall and he keeps throwing coffee mugs against the other
wall, and he says &quot;we are fucked unless we can come up with something that
will excite the community, because everyone's getting bored and going off and
doing other things&quot;.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;p&gt;And he was right. His motivation was, perhaps, to make bigger Perl
conferences, or he likes Perl doing well, or something like that. But in
actual fact he was right, so that sort of galvanized the meeting. He said &quot;I
don't care what you do, but you gotta do something big.&quot; And then he went
away.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;p&gt;Don't misunderstand me. This was the most perfectly planned tantrum you
have ever seen. If any of you know Jon, he likes control. This was a perfectly
controlled tantrum. It was amazing to see. I was thinking, &quot;should I get up
and throw mugs too?&quot;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;When I thought up this blog post, I knew about the incident but wasn't sure
when it had happened. I made some Internet research on my own, and couldn't
really find a source mentioning the day of the mug throwing.&lt;/p&gt;&lt;p&gt;I did find &lt;a href=&quot;http://www.nntp.perl.org/group/perl.packrats/2002/07/msg3.html&quot;&gt;this
email&lt;/a&gt;, which outlines the participants and the number of mugs thrown.&lt;/p&gt;&lt;p&gt;In the end, I asked Larry Wall on IRC about the date. The ensuing pun-ridden
discussion is quite typical of #perl6.&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;TimToady&amp;gt; masak: btw, the mugs were the day before&lt;br /&gt;
&amp;lt;jnthn&amp;gt; mugs? I thought it was just one mug!&lt;br /&gt;
&amp;lt;masak&amp;gt; jnthn: five.&lt;br /&gt;
&amp;lt;masak&amp;gt; jnthn: only one broke, though.&lt;br /&gt;
&amp;lt;masak&amp;gt; TimToady: thanks. still time to prepare for an anniversary blog post,&lt;br /&gt;
        then.&lt;br /&gt;
&amp;lt;jnthn&amp;gt; masak: Smashing.&lt;br /&gt;
&amp;lt;TimToady&amp;gt; I wish I'd collected the broken mug&lt;br /&gt;
&amp;lt;masak&amp;gt; &quot;Perl 6: breaking mugs and backwards compat since 2000&quot;&lt;br /&gt;
* pmichaud fires up photoshop, looks to cafepress&lt;br /&gt;
&amp;lt;masak&amp;gt; pmichaud: &quot;Perl 6: the greatest language ever to emerge out of the&lt;br /&gt;
        shards of a mug.&quot;&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; &quot;Break mug in case of language stagnation.&quot;&lt;br /&gt;
&amp;lt;jnthn&amp;gt; &quot;Perl 6. It's Perl 5 with a cupple of improvements.&quot;&lt;br /&gt;
&amp;lt;pmichaud&amp;gt; &quot;Perl 6 mugs -- another lucky break!&quot;&lt;br /&gt;
&amp;lt;masak&amp;gt; &quot;if $mug === all @shards { say 'We need a break from all the mug puns!' }&lt;br /&gt;
&amp;lt;jnthn&amp;gt; Oh, you can handle it. :P&lt;br /&gt;
* masak	shatters from laughter&lt;br /&gt;
&amp;lt;TimToady&amp;gt; &quot;Why's Jon throwing donuts?&quot;  --topologist&lt;br /&gt;
&amp;lt;masak&amp;gt; :P&lt;br /&gt;
&amp;lt;TimToady&amp;gt; &quot;This is a broken mug.  &amp;lt;mug&amp;gt; This is your brane on broken mugs.&lt;br /&gt;
           &amp;lt;camelia&amp;gt; Any questions?&quot;&lt;br /&gt;
&amp;lt;masak&amp;gt; &quot;Perl 6: seeking the holy grail after accidentally smashing it ten&lt;br /&gt;
        years ago.&quot;&lt;br /&gt;
&amp;lt;jnthn&amp;gt; &quot;How is mug re-formed?&quot;&lt;br /&gt;
&amp;lt;masak&amp;gt; They need to do way instain Jon Orwant.&lt;br /&gt;
&amp;lt;jnthn&amp;gt; Who harms 5 mugs that cannot frigth back!&lt;br /&gt;
&amp;lt;masak&amp;gt; My pary are with the cleaner.&lt;br /&gt;
&amp;lt;masak&amp;gt; &quot;Perl 6: poculum iacta est.&quot;&lt;/code&gt; &lt;/p&gt;&lt;p&gt;By now, Perl 6 has a 10-year history. I thought I'd spend the rest of the blog
post recounting it from (mostly) my perspective. With this I hope I will
manage to convey not only the actual sequence of events, but also some of my
enthusiasm about the project, and why I think Jon Orwant's broken mug kicked
off one of the coolest projects in modern programming language history.&lt;/p&gt;&lt;p&gt; &lt;b&gt;The early years&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Perhaps you've heard about &lt;strong&gt;the RFC process&lt;/strong&gt;. This was right at
the beginning of Perl 6's life, when even Larry Wall wasn't sure which
direction to take Perl 6, and a system was created wherein people could send
in their proposals for language features. Something on the order of 20 or 30
RFCs were excpected before the closing date.&lt;/p&gt;&lt;p&gt;361 RFCs were sent in.&lt;/p&gt;&lt;p&gt;Not only were they many more than expected; they were all over the map,
mutually inconsistent, and overall each of them advocated one feature without
much concern for the rest of the language. Had we somehow decided to go right
ahead and just make a language of all those RFCs, we probably would have ended
up with something very much like this famous &lt;a href=&quot;http://www.axis-of-aevil.net/archives/img/2003_08/p6_cover.jpg&quot;&gt;parody
of Perl 6&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;There was also little concern for &lt;em&gt;how&lt;/em&gt; the proposed features would be
added. Mark-Jason Dominus wrote in his &lt;a href=&quot;http://www.perl.com/pub/2000/11/perl6rfc.html&quot;&gt;Critique of the Perl 6 RFC Process&lt;/a&gt;
how a large part of the RFCs neglected to consider the implementation of the
proposed features:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;p&gt;It leads to a who-will-bell-the-cat syndrome, in which people propose
all sorts of impossible features and then have extensive discussions about the
minutiae of these things that will never be implemented in any form. [...] It
distracts attention from concrete implementation discussion about the real
possible tradeoffs. [...] Finally, on a personal note, I found this flippancy
annoying. There are a lot of people around who do have some understanding of
the Perl internals.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;In the end, Larry Wall took on the work of triaging the RFCs and distilling
them into a coherent whole. He did this in the form of
&lt;strong&gt;Apocalypses&lt;/strong&gt;, which collected the RFCs in different categories
and commented on them one by one. The RFCs were either accepted with different
amounts of caveats, or rejected. The Apocalypse numbers were based on
different chapters in the Camel book; for example, chapter 3 of that book
describes operators, so Apocalypse 3 talks about operators in Perl 6.&lt;/p&gt;&lt;p&gt;Here are all the Apocalypses that were published:&lt;/p&gt;&lt;ul&gt; &lt;li&gt;Apocalypse 1, May 2001&lt;/li&gt;&lt;li&gt;Apocalypse 2, May 2001&lt;/li&gt;&lt;li&gt;Apocalypse 3, Oct 2001&lt;/li&gt;&lt;li&gt;Apocalypse 4, Jan 2002&lt;/li&gt;&lt;li&gt;Apocalypse 5, Jun 2002&lt;/li&gt;&lt;li&gt;Apocalypse 6, Mar 2003&lt;/li&gt;&lt;li&gt;Apocalypse 12, Apr 2004&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In other words, the whole period 2001-2004 can be seen as the period when Perl
6 was still being distilled from the various wishes people had about it.&lt;/p&gt;&lt;p&gt;Along with the Apocalypses were published same-numbered
&lt;strong&gt;Exegeses&lt;/strong&gt;, by Damian Conway who also had a central role in
designing Perl 6. Where the Apocalypses were geared towards explaining
language decisions for and against features, the Exegeses set out to showcase
the new combinations of features, and to explain to Perl 5 programmers the
improvements introduced in Perl 6.&lt;/p&gt;&lt;p&gt;Reading the Exegeses today, what's especially noticeable is the sense of Perl
6 as a variant of Perl 5. Sure there are lots of little tweaks and changes,
but as Damian notes after writing a rather elaborate script in E02, &quot;In fact,
that's only 40 characters (out of 1779) from being pure Perl 5. And almost all
of those differences are @'s instead of $'s at the start of array element
look-ups. 98% backwards compatibility even without an automatic p52p6
translator...pretty slick!&quot;.&lt;/p&gt;&lt;p&gt;Not much remains of that idea today; if you'd step into the channel and ask
&quot;is Perl 6 like Perl 5?&quot;, we'd tell you that while the general goals and ideas
can still be discerned, the syntax is so different that it's probably better
to start learning it than try to code Perl 6 like one would code Perl 5.&lt;/p&gt;&lt;p&gt;In 2004, the Apocalypses were summarized down into &lt;strong&gt;Synopses&lt;/strong&gt;,
which contained the decisions from the Apocalypses without all the explanatory
monologue. The Synopses would form a specification for Perl 6 the language,
and were directed towards language implementors. They're fairly dense, but
still a good read for anyone seriously interested in the language. The synopses
are still normative and kept up-to-date. At the time of writing, I count 33
synoptic documents at &lt;a href=&quot;http://perlcabal.org/syn/&quot;&gt;perlcabal.org&lt;/a&gt;.
Synopses 2 through 6 tend to be fairly stable, although changes still occur.
The remainder of the synopses are still drafts for the most part, awaiting more
feedback from implementations and language use.&lt;/p&gt;&lt;p&gt;During all this, efforts to start implementing Perl 6 were planned, started
and abandoned. Already before the mug throwing and the RFCs, Chip Salzenberg
started developing a project code-named &lt;strong&gt;Topaz&lt;/strong&gt; in C++, which
was slated to grow into Perl 6. The Topaz project, a rewrite of Perl 5
internals, was eventually abandoned. &lt;a href=&quot;http://irclog.perlgeek.de/perl6/2010-04-27#i_2270627&quot;&gt;I asked Larry&lt;/a&gt;
why, and he replied that &quot;reimplementing insanity is insane&quot;. (Meaning
&quot;don't try to extend the Perl 5 internals into Perl 6&quot;.)&lt;/p&gt;&lt;p&gt;There was also a one-week exploration project called
&lt;strong&gt;Sapphire&lt;/strong&gt;; another rewrite of Perl 5 internals in September
2000, shortly after the announcement of Perl 6, Sapphire was mostly intended
to be a sort of tracer bullet to learn things about an eventual real
implementation.&lt;/p&gt;&lt;p&gt;Finally, &lt;strong&gt;Parrot&lt;/strong&gt; was a fledgling virtual machine created with
the express purpose to be good at running dynamic languages; especially Perl
6, the dynamickest language of the bunch. &lt;strong&gt;Ponie&lt;/strong&gt; was an
attempt to drag the Perl 5 internals, kicking and screaming, into the Parrot
Virtual Machine and have them run there. The Ponie project, as can be read &lt;a href=&quot;http://www.nntp.perl.org/group/perl.ponie.dev/2006/08/msg487.html&quot;&gt;here&lt;/a&gt;
suffered from a too-low bus number as well as Parrot's relative immaturity;
Ponie was ultimately &quot;put out to pasture&quot; in 2006. An early implementation of Perl 6 on Parrot was also developed at this time, but by 2004 it had also &lt;a href=&quot;https://svn.parrot.org/parrot/tags/RELEASE_0_3_1/languages/perl6/README&quot;&gt;proved to be unworkable&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As someone on the outside looking in, I knew of Parrot, but not of the other
projects. I didn't know about the Perl 6 project that already existed on
Parrot, only about the Apocalypses and the Exegeses, all of which I had read
with interest. What happened now?  Would this programming language ever become
a reality? No-one seemed to know.  And nothing exciting seemed to happen.&lt;/p&gt;&lt;p&gt;In early 2005, a certain A. Tang made an entrance, posting a short &lt;a href=&quot;http://www.mail-archive.com/perl6-all@perl.org/msg45008.html&quot;&gt;announcement&lt;/a&gt;
on the perl6-all list of a &quot;side-effect-free subset of Perl6&quot;. (Notice the
parallels between the tone of this email and Linus Torvald's famous &quot;nothing
serious like GNU&quot; announcement.) Before I knew it, the side-effect-free subset
of Perl 6 had mutated into something called &lt;strong&gt;Pugs&lt;/strong&gt;, a
full-fledged implementation.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Pugs: The golden age&lt;/b&gt; &lt;/p&gt;&lt;p&gt;I remember stumbling into the #perl6 channel on freenode, still fairly dazed
by the fact that someone was taking the Synopses and implementing them. Add to
this that Audrey Tang turned out to be a frighteningly productive hacker with a
magnetic personality which drew other people into the project like nothing I
or many others had ever seen. Being on the #perl6 channel was like standing
close to the eye of a hurricane; things just magically happened, either
because Audrey had just landed another set of commits, or because someone had
started a cool side project and was hacking on that, all the while bringing
interesting ideas and thoughts into the channel.&lt;/p&gt;&lt;p&gt;And we were all running (an early version of) Perl 6! Operators, subs,
classes, operator overloading... one by one, the cool features we had
anticipated started working. We introduced bots to be able to run Perl 6 code
right in the channel. Audrey threw out commit rights to the Pugs repository to
anyone who made as much as a peep about possible improvements. And it worked!
Hundreds of people were given commit-bits, and rather than seeing a massive
amount of vandalism like you would on a wiki, we saw a great number of these
people contributing constructively to the project. The slogan at that time was
to &quot;trust the anarchy&quot;, a seriously scary notion. A happy Audrey stood in the
middle of it all, guiding the various efforts along, blogging almost daily,
contributing insane amounts of code herself, and injecting steam into an
ever-more concrete Perl 6 community.&lt;/p&gt;&lt;p&gt;Pugs is written in Haskell, and many of the cultural traits at the beginning
came from the Haskell culture. Pugs hackers went by the moniker
&quot;lambda-camels&quot;. There was an unusually high amount of references to
comp.sci. papers, and books about Haskell, and esoteric books about
programming in general. A representative list can still be found in Pugs' &lt;a href=&quot;http://svn.pugscode.org/pugs/READTHEM&quot;&gt;READTHEM&lt;/a&gt; file. The humor was
intelligent and often riffed off of some computer topic or other.&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;audreyt&amp;gt; Alias_: my eyeglasses has style=&quot;border: none&quot;&lt;br /&gt;
&amp;lt;Alias_&amp;gt; doesn't matter&lt;br /&gt;
&amp;lt;Alias_&amp;gt; optical edge cases at the boundaries create border: solid 1px #99999&lt;br /&gt;
&amp;lt;audreyt&amp;gt; true&lt;br /&gt;
&amp;lt;audreyt&amp;gt; though it's more like ridged in my case&lt;br /&gt;
* audreyt sighs at the general geekiness&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;audreyt&amp;gt; apparently malaire++ is to blame&lt;br /&gt;
&amp;lt;audreyt&amp;gt; I mean, to praise&lt;br /&gt;
&amp;lt;audreyt&amp;gt; or to annotate&lt;/code&gt; &lt;/p&gt;&lt;p&gt;The predominant interjection was &quot;woot!&quot;. The predominant user of the
interjection &quot;woot!&quot; was Audrey. Karma points were the new currency, and bots
roamed the channel keeping track of the karma points, or handing them out while
emitting real-time commit messages.&lt;/p&gt;&lt;p&gt;Let me be clear about one thing: at that point on the #perl6 channel, I was a
groupie. I didn't contribute significantly to Pugs, or to the discussion
around the Synopses or the language itself. I did try my best to contribute to
the jokes.&lt;/p&gt;&lt;p&gt;In March 2005, I had made enough silly noise to get a commit bit:&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;autrijus&amp;gt; welcome aboard!&lt;br /&gt;
&amp;lt;masak&amp;gt; thx. i could hardly sleep last night because of pugs :)&lt;br /&gt;
&amp;lt;autrijus&amp;gt; all excited?&lt;br /&gt;
&amp;lt;masak&amp;gt; overly so&lt;br /&gt;
&amp;lt;autrijus&amp;gt; I know that feeling :)))&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Audrey kept up a high development tempo, often leading to jokes about her productivity:&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;autrijus&amp;gt; I'll brb -- shower &amp;amp;&lt;br /&gt;
&amp;lt;geoffb&amp;gt; So the rumors of autrijus ircing in the shower appear to be&lt;br /&gt;
         false . . . .&lt;br /&gt;
&amp;lt;geoffb&amp;gt; or maybe he just lurks, with the laptop right outside the curtain.&lt;br /&gt;
&amp;lt;autrijus&amp;gt; yup.&lt;br /&gt;
&amp;lt;autrijus&amp;gt; that's usually the case.&lt;br /&gt;
&amp;lt;autrijus&amp;gt; to avoid damaging the keyboard I usually type with a toothbrush&lt;br /&gt;
           or so.&lt;br /&gt;
&amp;lt;geoffb&amp;gt; LOL&lt;/code&gt; &lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;Juerd&amp;gt; Every *book* about Perl 6 is outdated.&lt;br /&gt;
&amp;lt;Juerd&amp;gt; They are outdated two hours after they are pressed.&lt;br /&gt;
&amp;lt;Juerd&amp;gt; By the time they are in stores, they are a month behind&lt;br /&gt;
&amp;lt;Juerd&amp;gt; And by the time you buy and read them, an entire perl 6&lt;br /&gt;
        interpreter was written by autrijus :)&lt;br /&gt;
&amp;lt;mauke&amp;gt; while he was sleeping!&lt;br /&gt;
&amp;lt;castaway&amp;gt; autrijus sleeps?&lt;br /&gt;
&amp;lt;nothingmuch&amp;gt; castaway: sometimes he claims that&lt;br /&gt;
* castaway doesnt believe it&lt;br /&gt;
&amp;lt;mauke&amp;gt; maybe his computer has a neural interface and he codes in his dreams&lt;br /&gt;
&amp;lt;castaway&amp;gt; this would not surprise me :)&lt;br /&gt;
&amp;lt;Juerd&amp;gt; castaway: Well, he sometimes says he's off to bed, and then after a&lt;br /&gt;
        few hours you see a huge commit in the logs. So I don't&lt;br /&gt;
        believe it :)&lt;br /&gt;
&amp;lt;castaway&amp;gt; hehe&lt;br /&gt;
&amp;lt;castaway&amp;gt; from what I figure, he sleeps only in max. 30 min chunks,&lt;br /&gt;
           or something&lt;br /&gt;
&amp;lt;Juerd&amp;gt; I think he hyperthreads&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Audrey was once found saying &quot;People think I'm this awesomely great coder, but
it's really Haskell and Parsec [a parser combinator library for Haskell] that
do all the magic&quot;. I didn't see people stop commenting on Audrey's prolificacy
because of that, however.&lt;/p&gt;&lt;p&gt;Somewhere in 2006, Larry Wall joined the channel. He never really left.&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;avar&amp;gt; ?eval &amp;lt;good fast cheap&amp;gt;.pick(2)&lt;br /&gt;
&amp;lt;evalbot_r16148&amp;gt; (&quot;good&quot;, &quot;cheap&quot;)&lt;br /&gt;
&amp;lt;TimToady&amp;gt; that's us all right...&lt;/code&gt; &lt;/p&gt;&lt;p&gt;We did lose Audrey, however. After her &lt;a href=&quot;http://pugs.blogs.com/audrey/2005/12/runtime_typecas.html&quot;&gt;gender
change&lt;/a&gt;, she continued work at an unabated pace; but then she was hit by a
serious hepatitis infection, and disappeared in 2007 in the middle of a tough
refactor of Pugs, never to return. Pugs ground to a halt. The channel became a
lot quieter after she was gone.&lt;/p&gt;&lt;p&gt;Pugs was (and is) still around, but it had stopped evolving, and it wasn't a
full Perl 6 implementation yet. The community still existed, but the central
person to hold it together was manifestly missing. Not knowing what the future
would hold, I longed for more Pugs.&lt;/p&gt;&lt;p&gt;(The reason for Audrey's disappearance didn't surface until two years later,
when she made a tentative &lt;a href=&quot;http://pugs.blogs.com/audrey/2009/08/why-such-me.html&quot;&gt;blog post&lt;/a&gt;
about it.)&lt;/p&gt;&lt;p&gt; &lt;b&gt;Rakudo: The silver age&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Pugs sort of let the genie out of the bottle. Once Audrey had created a &quot;rogue&quot;
project that just took off and increasingly embodied the Perl 6 idea, several
other people started making &lt;strong&gt;&quot;little&quot; implementations&lt;/strong&gt;, too.
Between 2005 and now, about a dozen &quot;little&quot; implementations sprang into
existence, several of which are still active today. Their respective goals
range from exploring to actually implementing the whole language. I call them
&quot;little&quot; mainly because they have few developers and a small user base.&lt;/p&gt;&lt;p&gt;While Pugs arrived with a bang and went dark just as quickly, work continued on
implementing Perl 6 on top of Parrot.  Progress came much more slowly here,
because Parrot was an immature platform and needed a toolchain and compiler
ecosystem in order to build Perl 6.  Starting in 2005, Patrick Michaud began
writing a grammar engine (PGE) and compiler toolkit (PCT) for Parrot.  These
eventually led to a fledgling Perl 6 implementation in 2007, which in early
2008 was given the name &quot;&lt;strong&gt;Rakudo&lt;/strong&gt; Perl 6&quot;. To be honest, I didn't pay much
attention to it before it got the Rakudo name.&lt;/p&gt;&lt;p&gt;Patrick had a vision that a Perl 6 implementation needs to have &lt;a href=&quot;http://www.mail-archive.com/perl6-internals@perl.org/msg23564.html&quot;&gt;a
decent Perl 6 grammar engine&lt;/a&gt; at its foundation, followed by a good
compiler-building toolchain. Once those bits were in place, Patrick turned to
the actual Perl 6 compiler and runtime. An intrepid guy named Jonathan
Worthington had in an unguarded moment promised Patrick to implement junctions
(only to realize that junctions required multi-dispatch, which required the
type system, which required much of the OO system to work...).&lt;/p&gt;&lt;p&gt;Together, Patrick and Jonathan put in feature after feature during the first
half of 2008.&lt;/p&gt;&lt;p&gt;Things were happening again. It didn't look playfully effortless like with
Audrey and Pugs; the features I picked up and tried out invariably broke. But
things were happening again. Between Pugs, a relatively featureful project
which no longer responded to pings, and Rakudo, a slow-moving but active
project which could one day be made to do the things Pugs did, I gradually
turned my attention to Rakudo.&lt;/p&gt;&lt;p&gt;The summer of 2008 is a bit of a blur. We (viklund and I) wrote a wiki engine
in the not-yet-housebroken Rakudo. It was just a wacky idea we had. If we
succeeded in any sense of the word, we said, we'd go to YAPC::EU and present
it all in a lightning talk.&lt;/p&gt;&lt;p&gt;Well, we eventually made it, and we went to YAPC::EU, and we thrilled at the
audience reaction upon hearing the news of someone writing a web app in Perl
6. But, um... the corners we cut on the way there. The workarounds for missing
features we invented. The bugs we discovered. And it wasn't like we could just
pop in on #perl6 and haul out some failing piece of code from our &lt;em&gt;secret
project&lt;/em&gt;. No; the code had to be scrubbed clean of all wiki-ness first. It
was during this time I learned the value of golfing bug reports.&lt;/p&gt;&lt;p&gt;I submitted many bug reports that summer. All of them scrubbed. It became a
bit of a thing, like when little kid starts collecting bottle caps. And it
wasn't like Rakudo had a shortage of bugs. For a while, it felt like Rakudo
was mostly &lt;em&gt;built&lt;/em&gt; out of bugs. This is not meant to be a slight
towards Patrick and Jonathan; they were, and are, doing an excellent job.
But every project needs to be tested out in the field, and no-one had done
that until viklund and I came along. I made field-testing and bug reporting
into a sport, going round in a never-ending cycle of doing something new
with Rakudo, seeing it break, and submitting a bug ticket about it.&lt;/p&gt;&lt;p&gt;It felt pretty good to be not so much of a groupie any more, and more of a
contributor. Since then I've written a lot of Perl 6 code, and even gotten
a Rakudo commit-bit... but I suspect I will remain &quot;the guy who submits all
the bugs&quot; for a long time hence.&lt;/p&gt;&lt;p&gt;The current cultural references seem to lean heavily on lolcat references,
exotic smilies, and other contemporary internet memes. Makes for a
light-hearted atmosphere, and the contrast between lolcats and compiler guts is
often quite refreshing.&lt;/p&gt;&lt;p&gt; &lt;code&gt;&amp;lt;pmichaud&amp;gt; good morning, #perl6&lt;br /&gt;
&amp;lt;jnthn&amp;gt; morning, pmichaud&lt;br /&gt;
&amp;lt;PerlJam&amp;gt; greetings pm&lt;br /&gt;
&amp;lt;colomon&amp;gt; o/&lt;br /&gt;
&amp;lt;mathw&amp;gt; o/ pmichaud&lt;br /&gt;
&amp;lt;moritz_&amp;gt; /o/&lt;br /&gt;
&amp;lt;mathw&amp;gt; \o\&lt;br /&gt;
&amp;lt;jnthn&amp;gt; \o/ |\o/| o&amp;lt; /o\&lt;br /&gt;
&amp;lt;jnthn&amp;gt; ;-)&lt;br /&gt;
&amp;lt;mathw&amp;gt; aaaaargh&lt;br /&gt;
* mathw	hides&lt;br /&gt;
&amp;lt;okeCay&amp;gt; o/\o !&lt;/code&gt; &lt;/p&gt;&lt;p&gt;As Rakudo keeps maturing, the Synopses change with it. This is scary to some.
How can one start learning a language that keeps changing?  Why won't the
specification keep still? I can only speak for myself on this issue: I wouldn't
want the specification to be &quot;locked down&quot; or &quot;frozen&quot;, not as long as the
changes going into it are ever-smaller adjustments, most of them responses to
insights gained from implementations like Rakudo. On the one hand, the Perl 6
specification changes more than for any other language I know; on the other
hand, it's becoming more stable by the day. We call it a kind of &quot;whirlpool
development&quot;, where later steps in the process are allowed to affect earlier
ones, but things are successively centering on one single point.&lt;/p&gt;&lt;p&gt;IRC can be quite a brusque and unforgiving place, but the #perl6 channel has
a reputation as one of the kindest places on the Net. A huge amount of time
is spent answering newcomers' questions, helping sort out people's syntax
errors, clarifying language terms and design decisions to outsiders and to
ourselves, reviewing code, reviewing each other's blog posts, and generally
making people feel welcome and cared for on the channel. #perl6 almost never
sleeps entirely nowadays, since it has active participants from all over
the globe. While we do feel that we have a really cool language to showcase
to the world, we're also quite proud over the quality of the Perl 6 culture.&lt;/p&gt;&lt;p&gt;The story with Rakudo since 2008 is that it's slowly established itself as the
front-runner among implementations, even surpassing Pugs in most areas. Rakudo
now has most of the operators and control structures in place, excellent
regexes and grammars (thanks, Patrick!), excellent OO and multi dispatch (thanks, Jonathan!), and
many other very solid features. There are many other smaller implementations
which help drive the spec and scout the solution domain in various ways; but
Rakudo is the one with the most person-tuits put into it by far nowadays. The
list of contributors in the monthly release announcement usually lands at a
couple dozen people. Perl 6 is again arriving a little more every day. Life is
good. I'm still submitting about one rakudobug a day, but the things submitted
are increasingly more high-level and less and less about glaring omissions.&lt;/p&gt;&lt;p&gt;The action in the past year has been a pretty huge refactor, first of the
grammar subsystem, but then of various other subparts that needed ripping out
and rewriting. Inwardly, this has been known as a number of smaller projects
all being part of a big Rakudo refactor. Outwardly, it has been known as the
imminent release of Rakudo Star.&lt;/p&gt;&lt;p&gt; &lt;b&gt;Rakudo Star: Perl 6 takes off&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Ok, so this part of history hasn't happened yet. But it's about to. On July
29, the Rakudo team is releasing &lt;strong&gt;Rakudo Star&lt;/strong&gt;, the first
distribution of Rakudo Perl, a Perl 6 implementation. (Info links &lt;a href=&quot;http://use.perl.org/~pmichaud/journal/39411&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;http://use.perl.org/~pmichaud/journal/39424&quot;&gt;here&lt;/a&gt;, and &lt;a href=&quot;http://use.perl.org/~pmichaud/journal/40407&quot;&gt;here&lt;/a&gt;.)&lt;/p&gt;&lt;p&gt;I find it quite fitting that 10 years and a couple of days after the Jon
Orwant mug that started it all, the Perl 6 people come forth and say &quot;Here. We
made this, and it's at a first stage of ready. We've been tinkering with it
for quite some time, fixed a lot of bugs and polished the pearl to a relative
shine. We'd like you to try it out and make something cool with it.&quot;&lt;/p&gt;&lt;p&gt;I, and many people with me, have been excited about this porcelain descendant
for many years now. It's time to let a bigger circle of people in, and let
them get excited as well.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Fixes…and feeds</title>
		<link href="http://6guts.wordpress.com/2010/07/18/fixes-and-feeds/"/>
		<id>http://6guts.wordpress.com/?p=29</id>
		<updated>2010-07-18T03:01:08+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;It’s less than two weeks to Rakudo * now. I’ve been putting most my coding efforts of late – which have been somewhat limited by hotter temperatures than I like and a little RSI – into trying to deal with some of the bugs in RT that will cause people most annoyance. Of course, Rakudo * will have bugs – it’s a viewing point on the way up the Perl 6 mountain. However, I’ve been looking at some of perhaps the most irritating ones…&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A failed multi-method dispatch not even telling you the name of the method you failed to dispatch to, let alone what type it was on or even a list of possible candidates that would match given the right arguments&lt;/li&gt;
&lt;li&gt;Lexical sub calls from attribute initializers not working&lt;/li&gt;
&lt;li&gt;Horribly cryptic errors if you mistype an operator category or use a trait that there exists no handler for&lt;/li&gt;
&lt;li&gt;Custom operator declarations being useless in pre-compiled code&lt;/li&gt;
&lt;li&gt;No mkdir/chdir/way to get a directory listing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of which are things I’ve now fixed. I’ve also dug into working on pls, the module installer, to get it working on Win32. It isn’t there yet, but it’s closer. I’m optimistic that I’ll have that fixed up in time for R*.&lt;/p&gt;
&lt;p&gt;Many others have been working hard on Rakudo too, of course. pmichaud++ has been dominating the commit list with an epic amount of patches of late doing such things as fixing closures and improving our REPL. masak++ has been continuing to work away at his GSoC project to give us binary IO and Buf support. colomon++ has continued his great work on numerics. moritz++ has been doing lots of stuff on the built-in types and functions. lue++ got Rakudo supporting binding again. I remember back to the days when Rakudo had so many less contributors, and I longed for more. It’s great that the team has grown – and continues to grow.&lt;/p&gt;
&lt;p&gt;Of course, a little work on some more features is hard to resist, and recent list refactors by pmichaud++ made getting a first very basic cut of feed operators in place relatively low hanging fruit (the full blown thing is rather harder, mind). So I dug in and did it, and now you can re-write things like:&lt;/p&gt;
&lt;pre&gt;my @foo = 0,5,2,4,1,3;
my @sorted-squares = sort map { $_ ** 2 }, @foo;
say @sorted-squares.perl;&lt;/pre&gt;
&lt;p&gt;Using feed operators as:&lt;/p&gt;
&lt;pre&gt;my @foo = 0,5,2,4,1,3;
@foo ==&amp;gt; map { $_ ** 2 }
     ==&amp;gt; sort
     ==&amp;gt; my @sorted-squares;
say @sorted-squares.perl;&lt;/pre&gt;
&lt;p&gt;Which reads nicely, and lets you write the steps in the order they occur. You can also install “taps” which capture the state at the current step along the pipeline:&lt;/p&gt;
&lt;pre&gt;my @foo = 0,5,2,4,1,3;
@foo ==&amp;gt; map { $_ ** 2 }
     ==&amp;gt; my @unsorted-squares
     ==&amp;gt; sort
     ==&amp;gt; my @sorted-squares;
say @unsorted-squares.perl;
say @sorted-squares.perl;
&lt;/pre&gt;
&lt;p&gt;Which produces the output:&lt;/p&gt;
&lt;pre&gt;[0, 25, 4, 16, 1, 9]
[0, 1, 4, 9, 16, 25]&lt;/pre&gt;
&lt;p&gt;The &amp;lt;== operator does the same in the other direction, by the way. Of course, the spec says a lot more about feed operators than these basics that I’ve implemented here. But I imagine this covers a lot of use cases – and of course few bits of the spec survive an implementation attempt without some tweaks, so it’s nice to have got the convergence ball rolling on another little bit of it. Plus it’s another “ooh shiny” for R*.&lt;/p&gt;
&lt;p&gt;And with the temperature now somewhat more realistic for sleeping in, I’ll go and get some rest. :-)&lt;/p&gt;
&lt;br /&gt; Tagged: &lt;a href=&quot;http://6guts.wordpress.com/tag/bug-fixes/&quot;&gt;bug fixes&lt;/a&gt;, &lt;a href=&quot;http://6guts.wordpress.com/tag/feeds/&quot;&gt;feeds&lt;/a&gt;, &lt;a href=&quot;http://6guts.wordpress.com/tag/rakudo/&quot;&gt;rakudo&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/6guts.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/6guts.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/6guts.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/6guts.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/6guts.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/6guts.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/6guts.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/6guts.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/6guts.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/6guts.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/6guts.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/6guts.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/6guts.wordpress.com/29/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/6guts.wordpress.com/29/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=6guts.wordpress.com&amp;amp;blog=14597269&amp;amp;post=29&amp;amp;subd=6guts&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>jnthnwrthngtn</name>
			<uri>http://6guts.wordpress.com</uri>
		</author>
		<source>
			<title type="html">6guts</title>
			<subtitle type="html">Tales of Perl 6 guts hacking</subtitle>
			<link rel="self" href="http://6guts.wordpress.com/feed/"/>
			<id>http://6guts.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Last Post</title>
		<link href="http://use.perl.org/~JonathanWorthington/journal/40450?from=rss"/>
		<id>http://use.perl.org/~JonathanWorthington/journal/40450?from=rss</id>
		<updated>2010-07-18T02:58:24+00:00</updated>
		<content type="html">&lt;p&gt;Well, on use.perl.org, anyway. I'd like to thank those who run this place for doing so, as it's been the place I've blogged about my Perl 6 stuff for the last couple of years. However, I've found the user experience of WordPress a lot more enjoyable - it was great for the Perl 6 Advent Calendar - and figure I'll blog more if I more enjoy doing so.&lt;/p&gt;&lt;p&gt;So, from now you'll be able to read my Rakudo news and other Perl 6 related ramblings from my &lt;a href=&quot;http://6guts.wordpress.com/&quot;&gt;shiny new blog&lt;/a&gt;. For those reading through Planet Six, no action required - I'll arrange for my new blog to be aggregated there.&lt;/p&gt;&lt;p&gt;See you &lt;a href=&quot;http://6guts.wordpress.com/&quot;&gt;over there&lt;/a&gt;.&lt;/p&gt;</content>
		<author>
			<name>JonathanWorthington</name>
			<uri>http://use.perl.org/~JonathanWorthington/journal/</uri>
		</author>
		<source>
			<title type="html">JonathanWorthington's Journal</title>
			<subtitle type="html">JonathanWorthington's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~JonathanWorthington/journal/rss"/>
			<id>http://use.perl.org/~JonathanWorthington/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Start Up Weekend and the technology they need</title>
		<link href="http://szabgab.com/blog/2010/07/start-up-weekend-tel-aviv-and-the-technology-they-need.html"/>
		<id>http://szabgab.com/blog/2010/07/start-up-weekend-tel-aviv-and-the-technology-they-need.html</id>
		<updated>2010-07-17T22:17:36+00:00</updated>
		<content type="html">&lt;p&gt;
Last week I participated on the &lt;a href=&quot;http://tel-aviv.startupweekend.org/&quot;&gt;Tel Aviv StartUp Weekend&lt;/a&gt;. 
There were about 150 participants who pitched 56 ideas. Then 16 of them got selected. By the 
end of the 50 hour marathon they each built a prototype and put together a business plan 
giving a 5 min presentation of their project.
&lt;/p&gt;
&lt;p&gt;
In order to allow observant Jews to participate the event was held during the week and 
not on Saturday. This might have skewed the people towards those who were so serious
that they were ready to take one day off from work in order to participate, 
or those who are self employed or even unemployed.
&lt;/p&gt;
&lt;p&gt;
The event took place at the Peres Peace House in Jaffa and among the 150 participants
there were about 15 Palestinians from east Jerusalem and from &lt;a href=&quot;http://en.wikipedia.org/wiki/Ramallah&quot;&gt;Ramallah&lt;/a&gt;,
which serves as the capital of the Palestinan Authority. This alone made it very interesting and I hope at least
some of the mixed teams will keep in contact later on.
&lt;/p&gt;
&lt;p&gt;
The event started by a few talks given by the sponsors and then everyone had the opportunity to give a 90 second 
pitch about any idea for a start-up. There were 56 pitches. Each one of them was also asked what kind of people
they want on their teams. I don't have the exact listing so I am writing this from memory.
Most of the people mentioned they need a designer and people who understand business development etc.
When talking about developers the mostly requested experinces were these:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Developers&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Facebook developer&lt;/li&gt;
&lt;li&gt;Drupal and/or PHP&lt;/li&gt;
&lt;li&gt;Django and/or Python&lt;/li&gt;
&lt;li&gt;Android meaning Java&lt;/li&gt;
&lt;li&gt;iPhone meaning Objective C&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
The technologies that were not mentioned were &lt;b&gt;Ruby&lt;/b&gt;, Ruby on Rails and &lt;b&gt;Perl&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
I personally tried to join two teams but I did not feel that I have a lot to contribute.
At least not in the areas where I claim to be an expert. In the teams where they wanted to build a 
back-end prototype there were usually at least 2 PHP or Python developers so there was no point
in trying to convince them to use Perl. Besides that, I am usually not good at the quick and dirty jobs.
&lt;/p&gt;
&lt;p&gt;
So I spent most of my time walking around trying to see what others are doing and showing an idea I have
to some people seeing what do they think. Maybe I can find a few people who might be interested in this
project.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Open source vs Start-up&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
While at the event I was wondering how many of the developers there are involved in the open source world?
I met a few people there whom I knew from earlier and they pointed at a few others I did not know who
are involved in open source projects. Some of them attending meetings as well some of them &quot;just&quot; coding.
None of them were Perl developers.
&lt;/p&gt;
&lt;p&gt;
Which brought me to the other question, &lt;b&gt;why are there so few start-ups using Perl?&lt;/b&gt;. 
Frankly I don't have a proof that this is indeed the case but it certainly seems so.
I belive most of the start-ups pick the languages based on what do the the entrepreneurs know.
&lt;/p&gt;
&lt;p&gt;
Are the Perl developers less of an entrepreneur-type than those using Python or PHP?
&lt;/p&gt;
&lt;p&gt;
Are the Python and PHP communities more forgiving (or even welcoming) to people who 
are self-employed or even entrepreneur wanting to build a large business?
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Start Up Weekend and the technology they need</title>
		<link href="http://szabgab.com/blog/2010/07/1279430256.html"/>
		<id>http://szabgab.com/blog/2010/07/1279430256.html</id>
		<updated>2010-07-17T22:17:36+00:00</updated>
		<content type="html">&lt;p&gt;
Last week I participated on the &lt;a href=&quot;http://tel-aviv.startupweekend.org/&quot;&gt;Tel Aviv StartUp Weekend&lt;/a&gt;. 
There were about 150 participants who pitched 56 ideas. Then 16 of them got selected. By the 
end of the 50 hour marathon they each built a prototype and put together a business plan 
giving a 5 min presentation of their project.
&lt;/p&gt;
&lt;p&gt;
In order to allow observant Jews to participate the event was held during the week and 
not on Saturday. This might have skewed the people towards those who were so serious
that they were ready to take one day off from work in order to participate, 
or those who are self employed or even unemployed.
&lt;/p&gt;
&lt;p&gt;
The event took place at the Peres Peace House in Jaffa and among the 150 participants
there were about 15 Palestinians from east Jerusalem and from &lt;a href=&quot;http://en.wikipedia.org/wiki/Ramallah&quot;&gt;Ramallah&lt;/a&gt;,
which serves as the capital of the Palestinan Authority. This alone made it very interesting and I hope at least
some of the mixed teams will keep in contact later on.
&lt;/p&gt;
&lt;p&gt;
The event started by a few talks given by the sponsors and then everyone had the opportunity to give a 90 second 
pitch about any idea for a start-up. There were 56 pitches. Each one of them was also asked what kind of people
they want on their teams. I don't have the exact listing so I am writing this from memory.
Most of the people mentioned they need a designer and people who understand business development etc.
When talking about developers the mostly requested experinces were these:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Developers&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Facebook developer&lt;/li&gt;
&lt;li&gt;Drupal and/or PHP&lt;/li&gt;
&lt;li&gt;Django and/or Python&lt;/li&gt;
&lt;li&gt;Android meaning Java&lt;/li&gt;
&lt;li&gt;iPhone meaning Objective C&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
The technologies that were not mentioned were &lt;b&gt;Ruby&lt;/b&gt;, Ruby on Rails and &lt;b&gt;Perl&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
I personally tried to join two teams but I did not feel that I have a lot to contribute.
At least not in the areas where I claim to be an expert. In the teams where they wanted to build a 
back-end prototype there were usually at least 2 PHP or Python developers so there was no point
in trying to convince them to use Perl. Besides that, I am usually not good at the quick and dirty jobs.
&lt;/p&gt;
&lt;p&gt;
So I spent most of my time walking around trying to see what others are doing and showing an idea I have
to some people seeing what do they think. Maybe I can find a few people who might be interested in this
project.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Open source vs Start-up&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
While at the event I was wondering how many of the developers there are involved in the open source world?
I met a few people there whom I knew from earlier and they pointed at a few others I did not know who
are involved in open source projects. Some of them attending meetings as well some of them &quot;just&quot; coding.
None of them were Perl developers.
&lt;/p&gt;
&lt;p&gt;
Which brought me to the other question, &lt;b&gt;why are there so few start-ups using Perl?&lt;/b&gt;. 
Frankly I don't have a proof that this is indeed the case but it certainly seems so.
I belive most of the start-ups pick the languages based on what do the the entrepreneurs know.
&lt;/p&gt;
&lt;p&gt;
Are the Perl developers less of an entrepreneur-type than those using Python or PHP?
&lt;/p&gt;
&lt;p&gt;
Are the Python and PHP communities more forgiving (or even welcoming) to people who 
are self-employed or even entrepreneur wanting to build a large business?
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">rand and srand</title>
		<link href="http://justrakudoit.wordpress.com/2010/07/16/rand-and-srand/"/>
		<id>http://justrakudoit.wordpress.com/?p=122</id>
		<updated>2010-07-16T13:29:01+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;This morning I bit the bullet and revamped &lt;code&gt;srand&lt;/code&gt; and &lt;code&gt;rand&lt;/code&gt;.  &lt;code&gt;srand&lt;/code&gt; now takes a &lt;code&gt;Real&lt;/code&gt; argument, as per the spec, though it casts it to &lt;code&gt;Int&lt;/code&gt; internally.  There is also a new version of &lt;code&gt;srand&lt;/code&gt; which takes an &lt;code&gt;Any&lt;/code&gt; argument and numifies it before calling &lt;code&gt;srand&lt;/code&gt; again.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;rand&lt;/code&gt; method was worked over to make it work like the other &lt;code&gt;Real&lt;/code&gt; methods do now: there’s a &lt;code&gt;Cool&lt;/code&gt; version that numifies its argument and calls the &lt;code&gt;rand&lt;/code&gt; method on that, a &lt;code&gt;Real&lt;/code&gt; version that calls &lt;code&gt;.Bridge&lt;/code&gt; on its argument and calls the &lt;code&gt;rand&lt;/code&gt; method on that, and a &lt;code&gt;Num&lt;/code&gt; version that does the actual work.  I also updated the spec to include the &lt;code&gt;rand&lt;/code&gt; method, since both the spectests and Rakudo used it, and it seemed to fit with our current way of doing things pretty well.&lt;/p&gt;
&lt;p&gt;I’m spectesting these changes as we speak.  Assuming no further issues — well, I think I need a little patch to make sure calling &lt;code&gt;srand&lt;/code&gt; or &lt;code&gt;rand&lt;/code&gt; on a &lt;code&gt;Complex&lt;/code&gt; doesn’t cause an infinite loop — I believe the only work remaining for the numeric grant is to tweak the spec a bit to talk about what is expected from &lt;code&gt;Numeric&lt;/code&gt; and &lt;code&gt;Real&lt;/code&gt; objects in terms of available operators.  As always, thanks to The Perl Foundation and Ian Hague for supporting this work.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/122/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/122/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/122/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/122/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/122/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/122/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/122/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/122/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/122/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/122/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/122/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/122/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/122/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/122/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=122&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Phasers are a blast: FIRST and LAST</title>
		<link href="http://use.perl.org/~masak/journal/40447?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40447?from=rss</id>
		<updated>2010-07-15T16:13:40+00:00</updated>
		<content type="html">&lt;p&gt;I started thinking about the &lt;code&gt;FIRST&lt;/code&gt; and &lt;code&gt;LAST&lt;/code&gt; phasers the other day, thanks to moritz++. My attention was on how to implement them in Yapsi, and my conclusions were mostly SIC, but they can be converted to Perl 6 for public view.&lt;/p&gt;&lt;p&gt;For those who haven't kept up with the latest Perl 6 terminology, &quot;phasers&quot; are what we call those all-caps blocks which fire at different &lt;em&gt;phases&lt;/em&gt; during program execution. Perl 5's &lt;code&gt;perldoc perlmod&lt;/code&gt; simply calls them &quot;specially named code blocks&quot;, but in Perl 6 it's been decided to call them &quot;phasers&quot;.&lt;/p&gt;&lt;p&gt;So much for phasers. What do the &lt;code&gt;FIRST&lt;/code&gt; and &lt;code&gt;LAST&lt;/code&gt; phasers do? They don't exist in Perl 5. S04 describes them thus:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
FIRST {...}       at loop initialization time, before any ENTER&lt;br /&gt;
 LAST {...}       at loop termination time, after any LEAVE&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;(There's a &lt;code&gt;NEXT&lt;/code&gt; phasers too, which I'm not going to tackle today. The &lt;code&gt;ENTER&lt;/code&gt; and &lt;code&gt;LEAVE&lt;/code&gt; phasers are what they sound like; they trigger at block entrance and exit, respectively.)&lt;/p&gt;&lt;p&gt;Here's some code using these.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my @a = 1, 2, 3;&lt;br /&gt;
for @a -&amp;gt; $item {&lt;br /&gt;
    FIRST { say &quot;OH HAI&quot; }&lt;br /&gt;
    say $item;&lt;br /&gt;
    LAST { say &quot;LOL DONE&quot; }&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;The code, when run, should print the following:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
OH HAI&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
LOL DONE&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;(At the time of writing, no Perl 6 implementation implements the &lt;code&gt;FIRST&lt;/code&gt; and &lt;code&gt;LAST&lt;/code&gt; phasers yet.)&lt;/p&gt;&lt;p&gt;The goal of this post is &lt;em&gt;transforming&lt;/em&gt; the phasers into code using more primitive constructs, but which still produces the above results. Oh, and it should work not only in this case, but in general.&lt;/p&gt;&lt;p&gt;Here's a first attempt. (Phaser-ful code to the left, rewritten code to the right.) It doesn't work.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my @a = 1, 2, 3;              my @a = 1, 2, 3;&lt;br /&gt;
                              say &quot;OH HAI&quot;;&lt;br /&gt;
for @a -&amp;gt; $item {             for @a -&amp;gt; $item {&lt;br /&gt;
    FIRST { say &quot;OH HAI&quot; }&lt;br /&gt;
    say $item;                    say $item;&lt;br /&gt;
    LAST { say &quot;LOL DONE&quot; }&lt;br /&gt;
}                             }&lt;br /&gt;
                              say &quot;LOL DONE&quot;;&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;More exactly, it does produce the desired output, but it doesn't work in general; it fails when &lt;code&gt;@a&lt;/code&gt; is empty:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my @a;                        my @a;&lt;br /&gt;
                              say &quot;OH HAI&quot;;&lt;br /&gt;
for @a -&amp;gt; $item {             for @a -&amp;gt; $item {&lt;br /&gt;
    FIRST { say &quot;OH HAI&quot; }&lt;br /&gt;
    say $item;                    say $item;&lt;br /&gt;
    LAST { say &quot;LOL DONE&quot; }&lt;br /&gt;
}                             }&lt;br /&gt;
                              say &quot;LOL DONE&quot;;&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;This code would still produce &lt;code&gt;&quot;OH HAI\nLOL DONE\n&quot;&lt;/code&gt;, which is wrong, because there is no first and last iteration for the empty &lt;code&gt;@a&lt;/code&gt; array.&lt;/p&gt;&lt;p&gt;Ok, we say. No worries; a bit more ad hoc, but we can detect for emptiness. No problem.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my @a;                        my @a;&lt;br /&gt;
                              my $HAS_ELEMS = ?@a;&lt;br /&gt;
                              if $HAS_ELEMS {&lt;br /&gt;
                                  say &quot;OH HAI&quot;;&lt;br /&gt;
                              }&lt;br /&gt;
for @a -&amp;gt; $item {             for @a -&amp;gt; $item {&lt;br /&gt;
    FIRST { say &quot;OH HAI&quot; }&lt;br /&gt;
    say $item;                    say $item;&lt;br /&gt;
    LAST { say &quot;LOL DONE&quot; }&lt;br /&gt;
}                             }&lt;br /&gt;
                              if $HAS_ELEMS {&lt;br /&gt;
                                  say &quot;LOL DONE&quot;;&lt;br /&gt;
                              }&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;That works for an empty list, but it fails to work when the &lt;code&gt;FIRST&lt;/code&gt; block accesses variables that only exist within the &lt;code&gt;for&lt;/code&gt; loop:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my @a = 1, 2, 3;              my @a = 1, 2, 3;&lt;br /&gt;
                              my $HAS_ELEMS = ?@a;&lt;br /&gt;
                              if $HAS_ELEMS {&lt;br /&gt;
                                  $x # BZZT PARSE ERROR&lt;br /&gt;
for @a -&amp;gt; $item {&lt;br /&gt;
    my $x;&lt;br /&gt;
    FIRST { $x = 42 }&lt;br /&gt;
    say $item, $x;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;So. Back to the drawing-board. Two seemingly opposing forces constrain our problem: we need to put the rewritten &lt;code&gt;FIRST&lt;/code&gt; block &lt;em&gt;outside&lt;/em&gt; the &lt;code&gt;for&lt;/code&gt; loop, because we only want it to execute once; but we also need to put it &lt;em&gt;inside&lt;/em&gt; the &lt;code&gt;for&lt;/code&gt; loop, so that it can have access to the same lexical environment. Is there a compromise somewhere in there?&lt;/p&gt;&lt;p&gt;Yes. We put the &lt;code&gt;FIRST&lt;/code&gt; block inside the &lt;code&gt;for&lt;/code&gt; loop, but then we keep track of whether we've already executed it once, with a special variable hidden in the surrounding scope:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my @a = 1, 2, 3;              my @a = 1, 2, 3;&lt;br /&gt;
                              my $FIRST_PHASER_HAS_RUN = False;&lt;br /&gt;
for @a -&amp;gt; $item {             for @a -&amp;gt; $item {&lt;br /&gt;
    my $x;                        my $x;&lt;br /&gt;
                                  unless $FIRST_PHASER_HAS_RUN {&lt;br /&gt;
    FIRST { $x = 42 }                 $x = 42;&lt;br /&gt;
                                      $FIRST_PHASER_HAS_RUN = True;&lt;br /&gt;
                                  }&lt;br /&gt;
    say $item, $x;                say $item, $x;&lt;br /&gt;
}                             }&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Now it all works. This is the general way to make the &lt;code&gt;FIRST&lt;/code&gt; behave according to spec. In the presence of several loops within the same block, one can re-use the same variable for all of the loops, just resetting it before each one. Explicitly setting to &lt;code&gt;False&lt;/code&gt; even the first time is quite important, in case someone ever implements the &lt;code&gt;goto&lt;/code&gt; statement.&lt;/p&gt;&lt;p&gt;With the &lt;code&gt;LAST&lt;/code&gt; phaser, we encounter exactly the same dilemma as with the &lt;code&gt;FIRST&lt;/code&gt; loop. The &lt;code&gt;LAST&lt;/code&gt; phaser has to be both inside and outside the block; inside because it has to have access to the loop block's variables, and outside because... well, because in general one doesn't know which iteration was the last one until it has already run.&lt;/p&gt;&lt;p&gt;At one point I had the idea to put the &lt;code&gt;LAST&lt;/code&gt; block at the end of the loop block, checking the loop condition just before the placement of the &lt;code&gt;LAST&lt;/code&gt; block, possibly saving it somewhere so it doesn't have to be re-evaluated. But the sad truth there's no realistic way to evaluate the loop condition from within the loop block; what if the expression contains a variable which is shadowed by another variable inside the loop block? There's just no way to make that fly.&lt;/p&gt;&lt;p&gt;The whole situation with the &lt;code&gt;LAST&lt;/code&gt; block really looks hopeless... until one remembers about closures:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
my @a = 1, 2, 3;              my @a = 1, 2, 3;&lt;br /&gt;
                              my $LAST_PHASER;&lt;br /&gt;
                              my $LOOP_HAS_RUN = False;&lt;br /&gt;
for @a -&amp;gt; $item {             for @a -&amp;gt; $item {&lt;br /&gt;
    my $x = &quot;LOL DONE&quot;;           my $x = &quot;LOL DONE&quot;;&lt;br /&gt;
    LAST { say $x }               $LAST_PHASER = { say $x };&lt;br /&gt;
                                  $LOOP_HAS_RUN = True;&lt;br /&gt;
}                             }&lt;br /&gt;
                              if $LOOP_HAS_RUN {&lt;br /&gt;
                                  $LAST_PHASER();&lt;br /&gt;
                              }&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;So in every iteration, we save away a closure &lt;em&gt;just in case&lt;/em&gt; that particular iteration turns out to be the last one. Then we execute the last value assigned to the closure, provided the loop ever run. Sneaky, huh?&lt;/p&gt;&lt;p&gt;So that works in the general case. Of course, a clever optimizer which can detect with certainty that the loop will run at least once and that neither phaser uses loop-specific lexicals is perfectly entitled to rewrite the &lt;code&gt;FIRST&lt;/code&gt; and &lt;code&gt;LAST&lt;/code&gt; phasers to our first attempt. But the above rewritings work in the general case.&lt;/p&gt;&lt;p&gt;In explaining this to a colleague, a case of possible confusion involving the &lt;code&gt;FIRST&lt;/code&gt; phaser was uncovered:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
for 1, 2, 3 {&lt;br /&gt;
    my $x = 42;&lt;br /&gt;
    FIRST { say $x }&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;One might perhaps expect this code to print &lt;code&gt;&quot;42\n&quot;&lt;/code&gt;, but in fact it prints &lt;code&gt;&quot;Any()&quot;&lt;/code&gt;. The reason is simple: whereas the lexical &lt;code&gt;$x&lt;/code&gt; is reachable throughout the whole &lt;code&gt;for&lt;/code&gt; loop, the &lt;em&gt;assignment&lt;/em&gt; of &lt;code&gt;42&lt;/code&gt; to it won't occur until &lt;em&gt;after&lt;/em&gt; the &lt;code&gt;FIRST&lt;/code&gt; block has executed. That's what &lt;code&gt;FIRST&lt;/code&gt; blocks do, they execute first. Nevertheless, some people might expect assignments to be treated specially in some way, not counting as &quot;real code&quot; or whatever. But they are, and thus that's the result. In general, reading from freshly declared lexical variables in a &lt;code&gt;FIRST&lt;/code&gt; block won't do you much good.&lt;/p&gt;&lt;p&gt;Lastly, there's this wording in S04:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;p&gt; &lt;code&gt;FIRST&lt;/code&gt;, &lt;code&gt;NEXT&lt;/code&gt;, and &lt;code&gt;LAST&lt;/code&gt; are meaningful only within the lexical scope of a loop, and may occur only at the top level of such a loop block.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;I read that as saying that these kinds of blocks should be &lt;em&gt;illegal&lt;/em&gt; if they are found in a block which isn't a loop block. STD.pm6 doesn't enforce this yet; it probably should.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Trig Tests</title>
		<link href="http://justrakudoit.wordpress.com/2010/07/14/trig-tests-2/"/>
		<id>http://justrakudoit.wordpress.com/?p=118</id>
		<updated>2010-07-14T21:21:55+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Overhauling the trig tests turned out to be much more epic than I had intended.  Guess that’s one of the hazards of writing the test generating code in Perl 6 while Rakudo is still under heavy development.&lt;/p&gt;
&lt;p&gt;The old test code was very, very thorough in testing each configuration.  Basically, we looped through a list of angles, and tested each angle with every possible way it could be called for each type we wanted to test.  So say the angle is 45 degrees.  Then for the Num type, we’d call &lt;code&gt;45.Num.sin(Degrees)&lt;/code&gt;, &lt;code&gt;sin(45.Num, Degrees)&lt;/code&gt;, and &lt;code&gt;sin(:x(45.Num), Degrees)&lt;/code&gt;, and then we’d call the same for the equivalent of 45 in Radians, Gradians, and Circles.  Then we’d start it all over again using Rat instead of Num.  And so on and so forth.&lt;/p&gt;
&lt;p&gt;In practice, any implementation is likely to redispatch the trig functions to two basic sets of methods, one for reals and one for complex.  So that’s exactly what the tests do now (leaving out the complex case because it is long:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;for TrigTest::cosines() -&amp;gt; $angle
{
    my $desired-result = $angle.result;

    # Num.cos tests -- very thorough
    is_approx($angle.num(Radians).cos, $desired-result,
              &quot;Num.cos - {$angle.num(Radians)} default&quot;);
    for TrigTest::official_bases() -&amp;gt; $base {
        is_approx($angle.num($base).cos($base), $desired-result,
                  &quot;Num.cos - {$angle.num($base)} $base&quot;);
    }
}
&lt;/pre&gt;
&lt;p&gt;Then, instead of trying to exhaustively test the rest of the cases, we try to generate one test for each case, and leave it at that.  For instance, here’s the Rat tests for cos:&lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;# Rat tests
is_approx((-0.785398163404734).Rat(1e-9).cos, 0.707106781186548, &quot;Rat.cos - -0.785398163404734&quot;);
is_approx((0).Rat(1e-9).cos(Circles), 1, &quot;Rat.cos(Circles) - 0&quot;);
is_approx((0.785398163404734).Rat(1e-9).cos(:base(Radians)), 0.707106781186548, &quot;Rat.cos(:base(Radians)) - 0.785398163404734&quot;);
is_approx(cos((1.57079632680947).Rat(1e-9)), 0, &quot;cos(Rat) - 1.57079632680947&quot;);
is_approx(cos((135).Rat(1e-9), Degrees), -0.707106781186548, &quot;cos(Rat, Degrees) - 135&quot;);
is_approx(cos(:x((3.14159265361894).Rat(1e-9))), -1, &quot;cos(:x(Rat)) - 3.14159265361894&quot;);
is_approx(cos(:x((250).Rat(1e-9)), :base(Gradians)), -0.707106781186548, &quot;cos(:x(Rat), :base(Gradians)) - 250&quot;);
&lt;/pre&gt;
&lt;p&gt;The use of &lt;code&gt;.Rat(1e-9)&lt;/code&gt; is to ensure we have a Rat argument — longer decimal numbers may become Nums otherwise.  This tests an additional case (&lt;code&gt;Rat.cos(:base(Radians))&lt;/code&gt;) that was never actually tested before.  Despite that, the number of Rat tests overall goes from something like 160 to 7.&lt;/p&gt;
&lt;p&gt;That’s good, because I added three more types to be tested.  Two represent generic &lt;code&gt;Cool&lt;/code&gt; types: &lt;code&gt;Str&lt;/code&gt; and &lt;code&gt;NotComplex&lt;/code&gt;.  &lt;code&gt;Str&lt;/code&gt; is used to test real numbers in a non-&lt;code&gt;Numeric&lt;/code&gt; &lt;code&gt;Cool&lt;/code&gt; type.  &lt;code&gt;NotComplex&lt;/code&gt; is a non-&lt;code&gt;Numeric&lt;/code&gt; &lt;code&gt;Cool&lt;/code&gt; type which returns a &lt;code&gt;Complex&lt;/code&gt; which you call &lt;code&gt;.Numeric&lt;/code&gt; on it.  The final type, &lt;code&gt;DifferentReal&lt;/code&gt;, is a &lt;code&gt;Real&lt;/code&gt; type which is not built-in.&lt;/p&gt;
&lt;p&gt;Much to my surprise, I actually turned up a couple of bugs in Rakudo’s trig implementation when I tried this testing approach with &lt;code&gt;atan2&lt;/code&gt;, the oddball trig function which normally takes two real arguments.  First, we were not being generous enough on what the second argument would accept, which was easily corrected.  Second, our fake enum standing in for &lt;code&gt;TrigBase&lt;/code&gt; looks exactly like an &lt;code&gt;Int&lt;/code&gt; to Rakudo.  So &lt;code&gt;2.atan2(Degrees)&lt;/code&gt; is indistinguishable from &lt;code&gt;2.atan2(1)&lt;/code&gt;, which is definitely not what the user wants.  Luckily that’s a pretty silly way to call &lt;code&gt;atan2&lt;/code&gt; anyway.&lt;/p&gt;
&lt;p&gt;The process of getting this to work turned up a few Rakudo bugs in the non-trig code, which have been reported.  I won’t go into the details here.&lt;/p&gt;
&lt;p&gt;By my reckoning, this means there is only one thing left on my list for the numeric grant, srand and rand.  I will try to finish them off tomorrow.  Thanks to The Perl Foundation and Ian Hague for supporting this work.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/justrakudoit.wordpress.com/118/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/justrakudoit.wordpress.com/118/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/justrakudoit.wordpress.com/118/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/justrakudoit.wordpress.com/118/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/justrakudoit.wordpress.com/118/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/justrakudoit.wordpress.com/118/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/justrakudoit.wordpress.com/118/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/justrakudoit.wordpress.com/118/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/justrakudoit.wordpress.com/118/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/justrakudoit.wordpress.com/118/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/justrakudoit.wordpress.com/118/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/justrakudoit.wordpress.com/118/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/justrakudoit.wordpress.com/118/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/justrakudoit.wordpress.com/118/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=justrakudoit.wordpress.com&amp;amp;blog=12219098&amp;amp;post=118&amp;amp;subd=justrakudoit&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>colomon</name>
			<uri>http://justrakudoit.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Just Rakudo It</title>
			<subtitle type="html">I Never Metaop I Didn't Like</subtitle>
			<link rel="self" href="http://justrakudoit.wordpress.com/feed/"/>
			<id>http://justrakudoit.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">This Week's Contribution to Perl 6 Week 9: Implement Hash.pick for Rakudo</title>
		<link href="http://perlgeek.de/blog-en/perl-6/contribute-now-hash-pick.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/contribute-now-hash-pick.html</id>
		<updated>2010-07-13T22:22:47+00:00</updated>
		<content type="html">&lt;p&gt;For this week's contribution to Perl 6 we ask you to implement the
&lt;code&gt;Hash.pick&lt;/code&gt; method (which does a weighted random selection) for
Rakudo.&lt;/p&gt;

&lt;p&gt;(&lt;a href=&quot;http://perlgeek.de/blog-en/perl-6/contribute-now-announce.html&quot;&gt;Introduction
    to this series of challenges&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;Background&lt;/h2&gt;

&lt;p&gt;In Perl 6 the &lt;code&gt;List&lt;/code&gt; class has a method called &lt;code&gt;pick&lt;/code&gt;,
which randomly selects one item from a list. It has a few more options
too:&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;synSpecial&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;a b c&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;       &lt;span class=&quot;synComment&quot;&gt;# pick one random element&lt;/span&gt;
&lt;span class=&quot;synSpecial&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;a b c&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;(&lt;span class=&quot;synConstant&quot;&gt;2&lt;/span&gt;)&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;synComment&quot;&gt;# pick two distinct, random elements&lt;/span&gt;
&lt;span class=&quot;synSpecial&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;a b c&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;(&lt;span class=&quot;synConstant&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;replace&lt;/span&gt;)&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;synComment&quot;&gt;# pick two random elements, it's ok&lt;/span&gt;
                           &lt;span class=&quot;synComment&quot;&gt;# if they are the same&lt;/span&gt;
&lt;span class=&quot;synSpecial&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;a b c&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;(&lt;span class=&quot;synStatement&quot;&gt;*&lt;/span&gt;)&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;synComment&quot;&gt;# return a random permutation of the elements&lt;/span&gt;
&lt;span class=&quot;synSpecial&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;a b c&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;(&lt;span class=&quot;synStatement&quot;&gt;*,&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;replace&lt;/span&gt;)&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;synComment&quot;&gt;# infinite, random stream of elements&lt;/span&gt;
&lt;/pre&gt;

&lt;p&gt;This is already &lt;a href=&quot;http://github.com/rakudo/rakudo/blob/master/src/core/Any-list.pm#L165&quot;&gt;implemented
through several multi methods in Rakudo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now the specification &lt;a href=&quot;http://perlcabal.org/syn/S32/Containers.html#Bag&quot;&gt;describes such a
method for hashes too&lt;/a&gt; (actually it talks about Bags, but Rakudo doesn't
have Bags yet. Pretend it says &quot;Hash&quot; instead). It assumes that each value in
the hash is numeric, and that the value is a weight that determines the
probability of picking one value. For example&lt;/p&gt;

&lt;pre&gt;{&lt;span class=&quot;synConstant&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;2&lt;/span&gt;}&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;synComment&quot;&gt;# returns 'a' with probability 1/3&lt;/span&gt;
                        &lt;span class=&quot;synComment&quot;&gt;# and 'b' with probability 2/3&lt;/span&gt;

{&lt;span class=&quot;synConstant&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;2&lt;/span&gt;}&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;(&lt;span class=&quot;synStatement&quot;&gt;*&lt;/span&gt;)&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;synComment&quot;&gt;# &amp;lt;a b b&amp;gt; with probability 1/3&lt;/span&gt;
                           &lt;span class=&quot;synComment&quot;&gt;# &amp;lt;b a b&amp;gt; with probability 1/3&lt;/span&gt;
                           &lt;span class=&quot;synComment&quot;&gt;# &amp;lt;b b a&amp;gt; with probability 1/3&lt;/span&gt;
{&lt;span class=&quot;synConstant&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;0.5&lt;/span&gt;}&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;(&lt;span class=&quot;synStatement&quot;&gt;*&lt;/span&gt;) &lt;span class=&quot;synComment&quot;&gt;# dies, because the weights aren't all integers&lt;/span&gt;
{&lt;span class=&quot;synConstant&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;0.5&lt;/span&gt;}&lt;span class=&quot;synStatement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;synIdentifier&quot;&gt;pick&lt;/span&gt;(&lt;span class=&quot;synStatement&quot;&gt;*,&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;replace&lt;/span&gt;)  &lt;span class=&quot;synComment&quot;&gt;# ok &lt;/span&gt;
&lt;/pre&gt;



&lt;h2&gt;What you can do&lt;/h2&gt;

&lt;p&gt;Implement Hash.pick. It's ok if your patch doesn't cover all cases. It
would be nice if it supported non-integer weights.&lt;/p&gt;

&lt;p&gt;Hint: this could be done by storing a list of accumulated weights, and a
list of keys.&lt;/p&gt;

&lt;pre&gt;{&lt;span class=&quot;synConstant&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;2.5&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt;}

&lt;span class=&quot;synComment&quot;&gt;# could translate to &lt;/span&gt;
&lt;span class=&quot;synSpecial&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;synIdentifier&quot;&gt;@keys&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&lt;/span&gt; (&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;synConstant&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;synSpecial&quot;&gt;'&lt;/span&gt;)&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;synSpecial&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;synIdentifier&quot;&gt;@accumulated_weights&lt;/span&gt; &lt;span class=&quot;synStatement&quot;&gt;=&lt;/span&gt; (&lt;span class=&quot;synConstant&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;3.5&lt;/span&gt;&lt;span class=&quot;synStatement&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;synConstant&quot;&gt;4.5&lt;/span&gt;)&lt;span class=&quot;synStatement&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;synComment&quot;&gt;# now pick a random number between 0 and 4.5,&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;# find the next-highest index in @accumulated_weights&lt;/span&gt;
&lt;span class=&quot;synComment&quot;&gt;# with a binary search, and then use that to obtain the key.&lt;/span&gt;
&lt;/pre&gt;

&lt;p&gt;Of course other schemes are fine too.&lt;/p&gt;

&lt;p&gt;Second hint: because it takes quite some time to recompile Rakudo, it is 
probably easier to implement the actual logic in a function
in a normal source file first, and only later move it into src/core/Hash.pm.&lt;/p&gt;

&lt;h2&gt;Submission&lt;/h2&gt;

&lt;p&gt;Please submit your source code to the &lt;a href=&quot;mailto:perl6-compiler@perl.org&quot;&gt;perl6-compiler@perl.org&lt;/a&gt; mailing
list (and put moritz@faui2k3.org on CC,
because the mailing list sometimes lack quite a bit).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; there's one submission on the perl6-compiler
mailing list already, which looks pretty good.&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Want to write shiny SVG graphics with Perl 6? Port Scruffy!</title>
		<link href="http://perlgeek.de/blog-en/perl-6/want-to-write-shiny-graphics.html"/>
		<id>http://perlgeek.de/blog-en/perl-6/want-to-write-shiny-graphics.html</id>
		<updated>2010-07-12T22:43:27+00:00</updated>
		<content type="html">&lt;p&gt;First let my apologize for waiting so long to come up with a new 
&lt;a href=&quot;http://perlgeek.de/blog-en/perl-6/contribute-now-announce.html&quot;&gt;&quot;weekly&quot;
    Perl 6 challenge&lt;/a&gt; - I'm running out of ideas, and the one I have left needs
more time to prepare.&lt;/p&gt;

&lt;p&gt;Instead I want to motivate you to help porting the ruby &lt;a href=&quot;http://scruffy.rubyforge.org/&quot;&gt;scruffy charting library&lt;/a&gt; to Perl 6.
It can generate &lt;a href=&quot;http://replay.waybackmachine.org/20080625015853/http://scruffy.rubyforge.org/&quot;&gt;shiny
SVG graphics&lt;/a&gt; (they are currently broken on their main website, hence the
waybackmachine link).&lt;/p&gt;


&lt;p&gt;There's already an &lt;a href=&quot;http://github.com/moritz/tufte/&quot;&gt;initial
version Perl 6 port called &quot;tufte&quot;&lt;/a&gt;, but it's not running yet. It needs your
help. If you know a little ruby, and want to learn some more Perl 6, join
#perl6, ask for a commit bit, and translate some ruby code into Perl 6. And in
the end you'll be rewarded with nice SVG charts :-).&lt;/p&gt;</content>
		<author>
			<name>Moritz Lenz</name>
			<uri>http://perlgeek.de/blog-en/</uri>
		</author>
		<source>
			<title type="html">Perlgeek.de</title>
			<subtitle type="html">Perl and Programming Blog.</subtitle>
			<link rel="self" href="http://perlgeek.de/blog-en/perl-6/index.rss"/>
			<id>http://perlgeek.de/blog-en/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Iterating your way to happiness with Perl 6</title>
		<link href="http://use.perl.org/~masak/journal/40442?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40442?from=rss</id>
		<updated>2010-07-11T21:55:01+00:00</updated>
		<content type="html">&lt;p&gt;I thought I'd have an easy time today, just regurgitating what &lt;a href=&quot;http://perlcabal.org/syn/S04.html&quot;&gt;S04&lt;/a&gt; says about &quot;Loop statements&quot;. Perl 5 already got this part pretty right already. Actually, even C got it pretty right. So what new does Perl 6 have to offer? That's what this post is about.&lt;/p&gt;&lt;p&gt;So, nothing much has changed about the &lt;code&gt;while&lt;/code&gt; and &lt;code&gt;until&lt;/code&gt; loops that we know and love.&lt;/p&gt;&lt;p&gt; &lt;code&gt;
while EXPR { ... }&lt;br /&gt;
until EXPR { ... }&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Then there's the kind of loop when you want to test the condition *after* the block has run, rather than before. In Perl 5, that looks like this:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
do { ... } while EXPR;&lt;br /&gt;
do { ... } until EXPR;&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;This construct tends to cause fresh Perl programmers a lot of grief, since &lt;code&gt;do&lt;/code&gt; isn't really a loop construct. There's some wording about this in &lt;a href=&quot;http://perldoc.perl.org/perlsyn.html&quot;&gt;perldoc perlsyn&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;p&gt;Note also that the loop control statements described later will NOT work in this construct, because modifiers don’t take loop labels.  Sorry.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Perl 6 solves this by&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;recognizing and disallowing &lt;code&gt;while&lt;/code&gt; and &lt;code&gt;until&lt;/code&gt; after &lt;code&gt;do&lt;/code&gt; blocks, and&lt;/li&gt;&lt;li&gt;introducing the &lt;code&gt;repeat&lt;/code&gt; block.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So now you write it like this instead:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
repeat { ... } while EXPR;&lt;br /&gt;
repeat { ... } until EXPR;&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;And you get two bonus features from this: first, since the &lt;code&gt;while&lt;/code&gt; or &lt;code&gt;until&lt;/code&gt; is mandatory, you can put it on its own line. Generally, closing line-ending curlies act like they have implicit semicolons after them in Perl 6, but here the parser is smart enough to expect a &lt;code&gt;while&lt;/code&gt; or &lt;code&gt;until&lt;/code&gt;, so it doesn't put one in.&lt;/p&gt;&lt;p&gt;Second, you're allowed to put the condition up front if you want:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
repeat while EXPR { ... }&lt;br /&gt;
repeat until EXPR { ... }&lt;br /&gt;
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Even though the condition is &lt;em&gt;before&lt;/em&gt; the loop here, it'll still not be run until &lt;em&gt;after&lt;/em&gt; each iteration, because it's a &lt;code&gt;repeat&lt;/code&gt; loop, and they work like that.&lt;/p&gt;&lt;p&gt;Then there's the loop construct that loops forever, aptly named &lt;code&gt;loop&lt;/code&gt;:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
loop { ... }
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;In C, we'd have that as &lt;code&gt;for (;;) { ... }&lt;/code&gt;. And, symmetrically, you can also write it like this in Perl 6:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
loop (;;) { ... }
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;Or, more generally, you can do any C-style for loop, if you just spell it &lt;code&gt;loop&lt;/code&gt;:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
loop (EXPR; EXPR; EXPR) { ... }
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;And what was known alternately in Perl 5 as &lt;code&gt;for&lt;/code&gt; and &lt;code&gt;foreach&lt;/code&gt; becomes just &lt;code&gt;for&lt;/code&gt; in Perl 6.&lt;/p&gt;&lt;p&gt;The syntax for &lt;code&gt;for&lt;/code&gt; in Perl 6 is what you'd expect:&lt;/p&gt;&lt;p&gt; &lt;code&gt;
for EXPR { ... }
&lt;/code&gt; &lt;/p&gt;&lt;p&gt;But it packs a lot more power underneath. Or rather, the whole &lt;em&gt;language&lt;/em&gt; is geared towards packing &lt;code&gt;for&lt;/code&gt; with a lot more power. Some examples:&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;If you want to name the item you're currently looping over, just prefix the block with &lt;code&gt;-&amp;gt; $a&lt;/code&gt;. (If you don't, you'll find the item in &lt;code&gt;$_&lt;/code&gt;, as usual.)&lt;/li&gt;&lt;li&gt;If you want to loop two items at a time, prefix the block with &lt;code&gt;-&amp;gt; $a, $b&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Neither of the above are special syntaxes belonging to the &lt;code&gt;for&lt;/code&gt; construct as such; rather, the &lt;code&gt;-&amp;gt;&lt;/code&gt; arrows belong to the block, making it, in the prevailing terminology,  a &quot;pointy block&quot;. In fact, &lt;em&gt;all&lt;/em&gt; of the loop constructs I've brought up (except the C-style loop) can be given pointy blocks; the expression will then be bound to the variable and usable from within the block. You can do it with &lt;code&gt;if&lt;/code&gt; statements, too! It's quite useful.&lt;/li&gt;&lt;li&gt;If you want to loop over two lists simultaneously, you can use the &lt;code&gt;infix:&amp;lt;Z&amp;gt;&lt;/code&gt; operator to interleave the lists. Loop one item at a time, and you'll get alternating elements from the two lists. Loop two at a time, and &lt;code&gt;$a&lt;/code&gt; (or whatever) will always be from the first list, and &lt;code&gt;$b&lt;/code&gt; from the second. Gone are the days when you had to do manual trickery with indexes and stuff because the &lt;code&gt;for&lt;/code&gt; loop wasn't powerful enough.&lt;/li&gt;&lt;li&gt;You can even eliminate nested loops sometimes with the &lt;code&gt;infix:&amp;lt;X&amp;gt;&lt;/code&gt; operator, which does a Cartesian product (known in SQL circles as a &quot;cross join&quot;) of two lists. So if you planned to do &lt;code&gt;for @a { for @b { ... } }&lt;/code&gt; anyway, you might as well do &lt;code&gt;for @a X @b { ... }&lt;/code&gt; and save yourself one level of indentation.&lt;/li&gt;&lt;li&gt;All of the above is lazy, so with a sensible Perl 6 implementation, there's no huge memory waste from building up all these big lists; it's all generated on-the-fly. (This, incidentally, means that we also read files with &lt;code&gt;for&lt;/code&gt; loops in Perl 6, rather than with a magical &lt;code&gt;while&lt;/code&gt; construct as in Perl 5.)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That's it for today. I forgot to mention the looping construct that only loops over &lt;em&gt;one&lt;/em&gt; item... but you can look that one up yourself. Oh, and Perl 5.10 also has it.&lt;/p&gt;&lt;p&gt;Actually, I got to thinking about all this, since I figured out the other day how to do the &lt;code&gt;FIRST&lt;/code&gt; and &lt;code&gt;LAST&lt;/code&gt; phasers in Yapsi. But this blog post felt like a natural precursor to the one I wanted to write. Hopefully soon. 哈哈&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Weeks 6 and 7 of GSoC work on Buf -- roundtrip</title>
		<link href="http://use.perl.org/~masak/journal/40440?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40440?from=rss</id>
		<updated>2010-07-09T23:25:12+00:00</updated>
		<content type="html">&lt;p&gt; &lt;em&gt;Warning: this blog post doesn't contain any puns at all. It's just a boring update about my progress. If you don't believe me, just go ahead and read it. I dare you.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;Been working on file I/O and &lt;code&gt;Buf&lt;/code&gt;s lately. It's tough work, but I'm now at a point where things run. Some highlights:&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;I &lt;a href=&quot;http://irclog.perlgeek.de/parrot/2010-07-04#i_2513924&quot;&gt;asked on Parrot&lt;/a&gt; how to write binary data. Got enough help to get me started coding an &lt;code&gt;IO.write&lt;/code&gt; method.&lt;/li&gt;&lt;li&gt;I realized that I didn't like at all how the IO spec described &lt;code&gt;IO.read&lt;/code&gt; and &lt;code&gt;IO.write&lt;/code&gt;. So I &lt;a href=&quot;http://perlcabal.org/svn/pugs/revision/?rev=31543&quot;&gt;rewrote&lt;/a&gt; it.&lt;/li&gt;&lt;li&gt;Having got the &lt;code&gt;IO.write&lt;/code&gt; method working, I wrote an &lt;code&gt;IO.read&lt;/code&gt; method along the same lines. &lt;a href=&quot;http://github.com/rakudo/rakudo/commit/692aa15f2538858028934b8e26910199cc5fdc53&quot;&gt;Here they are&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now, these new methods obviously write and read bytes to and from files, but the tests indicate that things don't properly round-trip yet. Part of that is because &lt;a href=&quot;http://svn.pugscode.org/pugs/t/spec/S16-filehandles/io.t&quot;&gt;the tests&lt;/a&gt; want the example string &quot;föö&quot; to encode as iso-8859-1, but there's no logic that does that yet. My slightly sleepy brain tells me there's more to the story though, or the string wouldn't come back garbled as &quot;fÃ¶&quot;. (Interesting how that somehow &lt;em&gt;feels&lt;/em&gt; like a small piece of &lt;a href=&quot;http://en.wikipedia.org/wiki/Mojibake&quot;&gt;mojibake&lt;/a&gt;, before the brain even takes in the individual characters.)&lt;/p&gt;&lt;p&gt;Another nice highlight was my question about &lt;a href=&quot;http://irclog.perlgeek.de/perl6/2010-07-09#i_2534120&quot;&gt;how &lt;code&gt;Buf&lt;/code&gt;s should stringify&lt;/a&gt;, which &lt;a href=&quot;http://irclog.perlgeek.de/perl6/2010-07-09#i_2535805&quot;&gt;TimToady just answered&lt;/a&gt; on #perl6. That should be a smop to implement.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">:st(1) Post</title>
		<link href="http://6guts.wordpress.com/2010/07/09/st1-post/"/>
		<id>http://6guts.wordpress.com/?p=12</id>
		<updated>2010-07-08T23:40:15+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;So, welcome. This is where I’ll be writing about my Perl 6 hacking now, instead of on my &lt;a href=&quot;http://use.perl.org/~JonathanWorthington/journal/&quot;&gt;use.perl.org journal&lt;/a&gt;. I very much enjoyed using WordPress when we did the Perl 6 advent calendar, and figure that if I have something I like using, then I’m likely to enjoy blogging more and thus do more of it. So, I made the leap.&lt;/p&gt;
&lt;p&gt;Having the blog here also gives me a few more possibilities. I’ll probably add some various other pages here at some point soon (e.g. listing interesting papers I read in the course of doing Perl 6 implementation work). Ooh, and I can even post exciting images. Like this one of my desk.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-13&quot; height=&quot;225&quot; src=&quot;http://6guts.files.wordpress.com/2010/07/img_1319.jpg?w=300&amp;amp;h=225&quot; title=&quot;My workspace...on a bad day&quot; width=&quot;300&quot; /&gt;Well, it’s not like that every day. :-) Anyways, with this meta-post over, I’ll try and have something actually interesting up here in a little while.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/6guts.wordpress.com/12/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/6guts.wordpress.com/12/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/6guts.wordpress.com/12/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/6guts.wordpress.com/12/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/6guts.wordpress.com/12/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/6guts.wordpress.com/12/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/6guts.wordpress.com/12/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/6guts.wordpress.com/12/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/6guts.wordpress.com/12/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/6guts.wordpress.com/12/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/6guts.wordpress.com/12/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/6guts.wordpress.com/12/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/6guts.wordpress.com/12/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/6guts.wordpress.com/12/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=6guts.wordpress.com&amp;amp;blog=14597269&amp;amp;post=12&amp;amp;subd=6guts&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>jnthnwrthngtn</name>
			<uri>http://6guts.wordpress.com</uri>
		</author>
		<source>
			<title type="html">6guts</title>
			<subtitle type="html">Tales of Perl 6 guts hacking</subtitle>
			<link rel="self" href="http://6guts.wordpress.com/feed/"/>
			<id>http://6guts.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 and Perl 5 training classes around YAPC::EU in Pisa</title>
		<link href="http://szabgab.com/blog/2010/07/perl6-and-perl5-training-classes-around-yapc-eu-in-pisa.html"/>
		<id>http://szabgab.com/blog/2010/07/perl6-and-perl5-training-classes-around-yapc-eu-in-pisa.html</id>
		<updated>2010-07-08T17:40:18+00:00</updated>
		<content type="html">&lt;p&gt;
Just a reminder that there are going to be a number of 
&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/training_courses.html&quot;&gt;training courses&lt;/a&gt;
on the days before and after YAPC::EU. (2,3 and 7 August).
&lt;/p&gt;
&lt;p&gt;
The detailed list can be found on the web site of YAPC::Europe as linked above.
&lt;/p&gt;
&lt;p&gt;
Trainers include Dave Cross, Dave Rolsky, Matt S. Trout , Herbert Breunung, brian d foy
and myself. In order of apperance. Prices range between 150-220 Euro which are
way lower than the prices these people normally charge when they do 
corporate training. It's a bargain.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Rakudo * and Perl 6&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
My main interest is of course the Perl 6 training I am going to teach.
I want to making sure it gives something that is really interesting and worth the money.
&lt;/p&gt;
&lt;p&gt;
The timing is good as &lt;a href=&quot;http://rakudo.org/&quot;&gt;Rakudo * (a &quot;usable Perl 6&quot;)&lt;/a&gt;
will be relased on July 29, just a few days before YAPC::EU.
&lt;/p&gt;
&lt;p&gt;
There are going to be several Perl 6 related talks in the regular schedule:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2613&quot;&gt;Tim Bunce: ‎Database Access in Perl 6 and Parrot‎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2729&quot;&gt;Jonathan Worthington: ‎Perl 6 Signatures: The Full Story&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2840&quot;&gt;Martin Berends: ‎Perl 6 Database Interfacing‎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2927&quot;&gt;Patrick Michaud: ‎Not Quite Perl (NQP) - A lightweight Perl 6‎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2928&quot;&gt;Patrick Michaud: ‎Rakudo Star - A usable Perl 6 release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2949&quot;&gt;Moritz Lenz: ‎Perl 6 and The Real World&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I'll try to make sure that on one hand people who attended these talk will not get the same 
material twice on the other hand those who don't attend the Perl 6 related talks will not miss anything.
It will be an interesting exercise.
&lt;/p&gt;
&lt;p&gt;
I am also happy that &lt;a href=&quot;http://www.pmichaud.com/&quot;&gt;Patrick Michaud&lt;/a&gt;, the pumking and lead developer of Rakodo
will also be in the class. As in previous ocassions in Oslo and Lisbon I am sure it will be fun.
&lt;/p&gt;
&lt;p&gt;
If you are interested please &lt;a href=&quot;http://conferences.yapceurope.org/ye2010/training_courses.html&quot;&gt;register now&lt;/a&gt;.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Perl 6 and Perl 5 training classes around YAPC::EU in Pisa</title>
		<link href="http://szabgab.com/blog/2010/07/1278636018.html"/>
		<id>http://szabgab.com/blog/2010/07/1278636018.html</id>
		<updated>2010-07-08T17:40:18+00:00</updated>
		<content type="html">&lt;p&gt;
Just a reminder that there are going to be a number of 
&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/training_courses.html&quot;&gt;training courses&lt;/a&gt;
on the days before and after YAPC::EU. (2,3 and 7 August).
&lt;/p&gt;
&lt;p&gt;
The detailed list can be found on the web site of YAPC::Europe as linked above.
&lt;/p&gt;
&lt;p&gt;
Trainers include Dave Cross, Dave Rolsky, Matt S. Trout , Herbert Breunung, brian d foy
and myself. In order of apperance. Prices range between 150-220 Euro which are
way lower than the prices these people normally charge when they do 
corporate training. It's a bargain.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Rakudo * and Perl 6&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
My main interest is of course the Perl 6 training I am going to teach.
I want to making sure it gives something that is really interesting and worth the money.
&lt;/p&gt;
&lt;p&gt;
The timing is good as &lt;a href=&quot;http://rakudo.org/&quot;&gt;Rakudo * (a &quot;usable Perl 6&quot;)&lt;/a&gt;
will be relased on July 29, just a few days before YAPC::EU.
&lt;/p&gt;
&lt;p&gt;
There are going to be several Perl 6 related talks in the regular schedule:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2613&quot;&gt;Tim Bunce: ‎Database Access in Perl 6 and Parrot‎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2729&quot;&gt;Jonathan Worthington: ‎Perl 6 Signatures: The Full Story&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2840&quot;&gt;Martin Berends: ‎Perl 6 Database Interfacing‎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2927&quot;&gt;Patrick Michaud: ‎Not Quite Perl (NQP) - A lightweight Perl 6‎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2928&quot;&gt;Patrick Michaud: ‎Rakudo Star - A usable Perl 6 release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conferences.yapceurope.org/ye2010/talk/2949&quot;&gt;Moritz Lenz: ‎Perl 6 and The Real World&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I'll try to make sure that on one hand people who attended these talk will not get the same 
material twice on the other hand those who don't attend the Perl 6 related talks will not miss anything.
It will be an interesting exercise.
&lt;/p&gt;
&lt;p&gt;
I am also happy that &lt;a href=&quot;http://www.pmichaud.com/&quot;&gt;Patrick Michaud&lt;/a&gt;, the pumking and lead developer of Rakodo
will also be in the class. As in previous ocassions in Oslo and Lisbon I am sure it will be fun.
&lt;/p&gt;
&lt;p&gt;
If you are interested please &lt;a href=&quot;http://conferences.yapceurope.org/ye2010/training_courses.html&quot;&gt;register now&lt;/a&gt;.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/Perl%206.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">How other languages do it?</title>
		<link href="http://szabgab.com/blog/2010/07/1278567919.html"/>
		<id>http://szabgab.com/blog/2010/07/1278567919.html</id>
		<updated>2010-07-07T22:45:19+00:00</updated>
		<content type="html">&lt;p&gt;
Some people asked how communities of other languages deal with the issues I raised in my 
&lt;a href=&quot;http://news.perlfoundation.org/2010/06/hague-grant-application-perl-e.html&quot;&gt;grant proposal&lt;/a&gt;
Unfortunatelly it seems that some not all the comments submitted to that blog reach Karen for approval.
&lt;/p&gt;
&lt;p&gt;
Specifically I have submitted this one already three times and she has not seen it yet. If you have submitted
any comment there, please check if it has appeared and if not, please post it somewhere else. Maybe
in your blot or as a response to this blog.
&lt;/p&gt;
&lt;p&gt;
Now to the other languages:
&lt;/p&gt;
&lt;p&gt;
As far as I can tell the &lt;b&gt;PHP&lt;/b&gt; community does not have any Foundation 
(but it has Zend behind it). &lt;b&gt;Ruby&lt;/b&gt; seem to have a hardly working 
&lt;a href=&quot;http://www.ruby-assn.org/en/&quot;&gt;Ruby Association&lt;/a&gt;. 
Both of these languages are used by lots of small companies making money 
directly from the use of the language or platforms built on the language.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Lua&lt;/b&gt; has a 
&lt;a&gt;corporate sponsorship program&lt;/a&gt; 
but I don't see a lot of details about it. As far as I can tell it is mostly 
supported by the Pontifical Catholic University of Rio de Janeiro in Brazil. 
See &lt;a href=&quot;http://www.lua.org/about.html&quot;&gt;About Lua&lt;/a&gt; for links.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Python&lt;/b&gt; have the 
&lt;a href=&quot;http://www.python.org/psf/&quot;&gt;Python Software Foundation&lt;/a&gt;
that I analyzed in &quot;&lt;a href=&quot;http://szabgab.com/blog/2010/05/1273870026.html&quot;&gt;Python Software Foundation&lt;/a&gt;&quot; a bit a few weeks ago. As 
you can see Allison Randal is on the board of PSF and she is also on t
he board of TPF so maybe she can tell us a few words on how this works 
at the Python Foundation. There are also quite a number of small
companies using Python as part of their core business and as far 
as I know Google also directly supports it.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Parrot&lt;/b&gt; also has a 
&lt;a href=&quot;http://www.parrot.org/foundation&quot;&gt;Parrot Foundation&lt;/a&gt;
with an
&lt;a href=&quot;http://www.parrot.org/foundation/advisory_board&quot;&gt;Advisory board&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I don't see hundreds of individuals and small companies making money using 
&lt;b&gt;Perl&lt;/b&gt;. There are a few but as far as I can tell it is mostly used in 
large companies and many people are using it as part of the toolset not as the
main tool.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">First contact with companies regarding the Perl Ecosystem group</title>
		<link href="http://szabgab.com/blog/2010/07/1278364716.html"/>
		<id>http://szabgab.com/blog/2010/07/1278364716.html</id>
		<updated>2010-07-05T14:18:36+00:00</updated>
		<content type="html">&lt;p&gt;
Creating the initial list of potential members &quot;&lt;a href=&quot;http://szabgab.com/blog/2010/07/1278364681.html&quot;&gt;List of potential members of the TPF Ecosystem group or Advisory board&lt;/a&gt;&quot; was the easy part.
I just listed the names of the companies and the source where I got the names from. 
Either a person, or a link to a web site or a link to a job offer on jobs.perl.org.
&lt;/p&gt;
&lt;p&gt;
In some cases I already have direct contact to a CTO or some other manager as we
met on one of the previous events or as Renee Baecker or one of my other friends
introduced me.
&lt;/p&gt;
&lt;p&gt;
For now I'll keep in touch with those but I think I won't get in touch 
with other companies until I understand that TPF would be ok by receiving
money. Yeah that sounds strange but right now it seems they don't know what
to do with the money they have.
&lt;/p&gt;
&lt;p&gt;
So what happens, when I start building the contacts?
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Direct contacts&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
In the case where I got the information from a person directly I can try to ask that
person to introduce me to their CTO, CIO, VP RnD or even the CEO, for smaller companies.
In some cases they can do that. In others I'll will need to look for alternative routes.
&lt;/p&gt;
&lt;p&gt;
For companies that have already sponsored a Perl event I'll ask the event organizer
to help me get introduced. For companies that are clients of some of the training
companies I hope we can use the already existing contacts.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Without personal contact&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
The difficult part will be the companies that are listed on jobs.perl.org. 
I prefer not to cold call them as that is hard and usually leads to quick rejection.
Sending an e-mail to the address on the job offer would probably not work well either.
They are looking for CVs there. I guess trying to get in touch with them that way will
lead to nowhere in the good case and backfire in the bad case.
&lt;/p&gt;
&lt;p&gt;
So there I'll need to work harder and find someone who already works there. For that
there are two good tools. &lt;a href=&quot;http://www.linkedin.com/&quot;&gt;LinkedIn&lt;/a&gt; and 
&lt;a href=&quot;http://www.xing.com/&quot;&gt;Xing&lt;/a&gt; which is a more German focused service.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;The first contact&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I don't think contacting a CTO or an HR manager with &quot;give some money to TPF&quot; will work well.
I'll first need to prepare some description of what does TPF and the Perl community 
do now and ask the person on the other end if we can help them somehow in their use of Perl.
The text itself will need to be refined over time and there might be different 
versions depending the job description of the recipient or the size of the company.
&lt;/p&gt;
&lt;p&gt;
In the description of what TPF does and what we are planning to do with the money I'll
probably include a lot more than just the promotional part. TPF provides grants for
development of Perl 5, CPAN modules and Perl 6. I'll probably will need to put together
a list of sucessful projects and a list of projects that could be done. Or could be done
faster if there was money for a grant.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Getting support from the community&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Alberto commented on my &lt;a href=&quot;http://szabgab.com/blog/news.perlfoundation.org/2010/06/hague-grant-application-perl-e.html&quot;&gt;grant requests&lt;/a&gt;
that it is too egocentric. My point was to show that I'll do the hard work.
&lt;/p&gt;
&lt;p&gt;
With that said, my understand is that while there needs to be a lot of organizational work behind this
it is &lt;b&gt;critical&lt;/b&gt; for the success of the project that the Perl community will embrace it. It is critical
that people will raise their hands &lt;i&gt;we also use Perl a lot&lt;/i&gt; and help me get in touch with the managers so we 
can build a business level contact as well.
&lt;/p&gt;
&lt;p&gt;
IMHO it is also critical that a growing number of people in the Perl community will help in promoting
Perl just by going to various events and talk about it. Either in formal presentations or at a Perl booth.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">List of potential members of the TPF Ecosystem group or Advisory board</title>
		<link href="http://szabgab.com/blog/2010/07/1278364681.html"/>
		<id>http://szabgab.com/blog/2010/07/1278364681.html</id>
		<updated>2010-07-05T14:18:01+00:00</updated>
		<content type="html">&lt;p&gt;
In &quot;&lt;a href=&quot;http://szabgab.com/blog/2010/06/1277638618.html&quot;&gt;Grant request for fund-raising and promotional activities&lt;/a&gt;&quot; I wrote about the need to create a list of 100 companies that would be the first
prospects to contact regarding membership in the TPF Ecosystem Group or Advisory Board. 
If TPF decides to set that up.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Source of company names&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Several people contacted me and sent me names of companies and I also looked at a number of 
obvious places. Just within a day or so I had a list of 200 companies. (but I got distracted
by some of the comments on my grant proposal so I only blog about this now)
&lt;/p&gt;
&lt;p&gt;
The most obvious companies are those that have been sponsoring one or more of the Perl 
related events in the last 2-3 years or that gave money direcly to TPF. The former are
listed on the web sites of the events. The latter - to some extent - are listed on the
web site of TPF.
&lt;/p&gt;
&lt;p&gt;
Then there are also the companies that make money using some Perl related product. e.g. 
&lt;a href=&quot;http://www.webgui.org/&quot;&gt;WebGUI&lt;/a&gt;,
&lt;a href=&quot;http://bricolagecms.org/&quot;&gt;Bricolage&lt;/a&gt;,
&lt;a href=&quot;http://www.bugzilla.org/&quot;&gt;Bugzilla&lt;/a&gt;, 
&lt;a href=&quot;http://bestpractical.com/rt/&quot;&gt;RT&lt;/a&gt;, 
and &lt;a href=&quot;http://otrs.org/&quot;&gt;OTRS&lt;/a&gt;. For most of these products there are several
companies providing services based on the product.
&lt;/p&gt;
&lt;p&gt;
The biggest source of companies is of course &lt;a href=&quot;http://jobs.perl.org/&quot;&gt;jobs.perl.org&lt;/a&gt;.
Companies that look for Perl developers obviously use Perl. Some of those might be 
even interested in helping Perl development financially.
&lt;/p&gt;
&lt;p&gt;
There is another great source and that's the list of clients of the various 
Perl training companies. I have not harvested those lists yet as I already 
had twice as many as I was planning for and I think it would be better to
do it in cooperation with the relevant training company.
&lt;/p&gt;
&lt;p&gt;
There are many other places to look for companies, I think there 
must be a few thousands that might be relevant at some level but we have 
to focus on the ones that are most likely to see the benefit.
&lt;/p&gt;
&lt;p&gt;
The companies that are already involved in the Perl community to some level and
the companies that need Perl developers NOW.
&lt;/p&gt;
&lt;p&gt;
I don't make the list public as it already contains contact info 
of a few people but it will be part of the CRM database of TPF. 
If they think it is important to start doing active fund-raising.
If they are ready to pay for the time spent doing it and if they find 
me suitable for that job.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Looking for Perl Ecosystem leader and event goer in the US and elsewhere</title>
		<link href="http://szabgab.com/blog/2010/07/1278296071.html"/>
		<id>http://szabgab.com/blog/2010/07/1278296071.html</id>
		<updated>2010-07-04T19:14:31+00:00</updated>
		<content type="html">&lt;p&gt;
The comment of Alberto about my
&lt;a href=&quot;http://news.perlfoundation.org/2010/06/hague-grant-application-perl-e.html&quot;&gt;grant proposal&lt;/a&gt;
was very disturbing to me for a few days but finally I managed to catch him online today and we had a chat.
&lt;/p&gt;
&lt;p&gt;
One of the things that came out that is that I should clarify my intent:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Events&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I hope that within 1-2 years the Perl community will have a presence on 30-50 non-perl 
events every year. Not only would that be physically impossible for me to attend all 
of them, it would also be very expensive and in some cases useless. So my plan was 
to participate on a few of them (along with several volunteers) and try to get 
others on the other events.
&lt;/p&gt;
&lt;p&gt;
My plan was that I kick start the activity and then hand it over to others, closer 
to the various places and people who speak the local dialect. Those local leaders would do 
the local organization. They would also be compensated for their time just as I do.
&lt;/p&gt;
&lt;p&gt;
As time passes more and more events will be organized by local volunteers
and then we can probably stop paying for the central organizers.
We can already see that people get organized to setup Perl presence on various events
such as Devconf Russia and OSWC in Malaga, Spain. Jay Hannah also started to organize
people to go to the Central Iowa Software Symposium and to Infotec in Omaha, NE. 
Not to mention Renee Baecker who organizes Perl presence on a number of events in
Germany and Switzerland.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;Fund-raising&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I don't think we can do fund-raising in such a distributed way but there could 
be country or area specific people who are responsible for the fund-raising in
their own country or area. They would also be paid for their time.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h2&gt;The search&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
I did not want to start with looking for more people for more &quot;leaders&quot; for this as 
we don't have the money to pay them but in the discussion Alberto suggested I should 
clarify this and ask if anyone would be interested?
&lt;/p&gt;
&lt;p&gt;
Even if we cannot yet start it in such a split way we could discuss things and 
we could plan some things ahead.
&lt;/p&gt;
&lt;p&gt;
I am writing this thinking about someone in the US, but if people from 
other areas or countries are interested please just substitute the name 
of your country.
&lt;/p&gt;
&lt;p&gt;
I have slightly mixed the requirements of the &quot;event organizer&quot; and the &quot;fund-raiser&quot;
but I still think about them as a mixture.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Enthusiastic about this who belives that we can actually raise the funds and spend them on Perl.&lt;/li&gt;
&lt;li&gt;Thinks that the Perl community needs more promotion&lt;/li&gt;
&lt;li&gt;Lives in the target area to make traveling cheaper.&lt;/li&gt;
&lt;li&gt;The conference organizer needs to be able to participate on many events.&lt;/li&gt;
&lt;li&gt;S/he needs to be able to &quot;work the floor&quot;. Not only sitting behind the booth.&lt;/li&gt;
&lt;li&gt;The fund raiser needs to be able to allocate at least one day a week (compensated). 
Not a few ours in the evenings as a large part of the work needs to be done in business 
hours talking to CTOs and alike&lt;/li&gt;
&lt;li&gt;The person needs to be able to take the risk. If we cannot raise money we won't be paid.&lt;/li&gt;
&lt;li&gt;We need a commitment of at least 6 months, even if the compensation is low due to lack of success
in fund-raising.&lt;/li&gt;
&lt;li&gt;Be able to talk to Python developers when they start their anti-Perl FUD, without punching them in the face.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
That's it for now. So if you are interested, please reply to this post and/or e-mail me or ping me on IRC.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">List of upcoming tech events</title>
		<link href="http://szabgab.com/blog/2010/07/1278279056.html"/>
		<id>http://szabgab.com/blog/2010/07/1278279056.html</id>
		<updated>2010-07-04T14:30:56+00:00</updated>
		<content type="html">&lt;p&gt;
In &quot;&lt;a href=&quot;http://szabgab.com/blog/2010/06/1277638618.html&quot;&gt;Grant request for fund-raising and promotional activities&lt;/a&gt;&quot; I mentioned I'll go over the list of tech 
&lt;a href=&quot;http://www.socialtext.net/perl5/index.cgi?events&quot;&gt;events&lt;/a&gt; and try to refresh them. Unfortunatelly only 2 or 3
people made any changes to the wiki since then but today in the morning I went over the list. It took me about 4 hours 
and as I can see I'll need to do this at least once a month as there are many events that are not yet scheduled for next year.
&lt;/p&gt;
&lt;p&gt;
In addition I signed up to the mailing lists of several &lt;a href=&quot;http://www.pm.org/&quot;&gt;Perl Monger&lt;/a&gt; groups and 
sent them messages listing all the events that are near to where they group is located. To some value if &quot;near&quot;.
&lt;/p&gt;
&lt;p&gt;
From one of the replies I learned that there is going to be a Perl track at
&lt;a href=&quot;http://www.opensourceworldconference.com/malaga10/&quot;&gt;Software Libre Open Source World Conference in Malaga&lt;/a&gt;
That looks nice.
&lt;/p&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gabor Szabo</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://szabgab.com/blog/szabgab.rss"/>
			<id>http://szabgab.com</id>
			<rights type="html">Copyright 2002-2010, Gabor Szabo</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-us">Dreaming in mixins</title>
		<link href="http://use.perl.org/~masak/journal/40434?from=rss"/>
		<id>http://use.perl.org/~masak/journal/40434?from=rss</id>
		<updated>2010-07-04T01:28:38+00:00</updated>
		<content type="html">&lt;p&gt;Working with pls (a next-gen project installer for the Perl 6 ecosystem), I had a few classes with code like this:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;class POC::Tester does App::Pls::Tester {&lt;br /&gt;    method test($project --&amp;gt; Result) {&lt;br /&gt;        my $target-dir = &quot;cache/$project&amp;lt;name&amp;gt;&quot;;&lt;br /&gt;        if &quot;$target-dir/Makefile&quot; !~~ :e {&lt;br /&gt;            return failure;&lt;br /&gt;        }&lt;br /&gt;        unless run-logged( relative-to($target-dir, &quot;make test&quot;),&lt;br /&gt;                           :step('test'), :$project ) {&lt;br /&gt;            return failure;&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        return success;&lt;br /&gt;    }&lt;br /&gt;}&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;(&lt;code&gt;success&lt;/code&gt; and &lt;code&gt;failure&lt;/code&gt; are &lt;code&gt;Result&lt;/code&gt; enum values defined elsewhere. They felt like pleasant documentation, and when return type checking works, they'll even help catch errors!)&lt;/p&gt;&lt;p&gt;Now, I wanted to add super-simple progress diagnostics to this method. I wanted an &lt;code&gt;announce-start-of('test', $project);&lt;/code&gt; at the start of the module, and either an &lt;code&gt;announce-end-of('test', success);&lt;/code&gt; or an &lt;code&gt;announce-end-of('test', failure);&lt;/code&gt;, depending on the success or failure of the method.&lt;/p&gt;&lt;p&gt;I have a low threshold for boilerplate. After realizing that I'd have to manually add those calls in the beginning of the method, and before each &lt;code&gt;return&lt;/code&gt; — and not only in this method, but in several others — I thought &quot;man, I shouldn't have to tolerate this. This is Perl 6, it should be able to do better!&quot;&lt;/p&gt;&lt;p&gt;So I thought about what I really wanted to do. I wanted some sort of... method wrapper. Didn't really want a subclass, and a regular role wouldn't cut it (because class methods override same-named role methods).&lt;/p&gt;&lt;p&gt;Then it struck me: &lt;em&gt;mixins&lt;/em&gt;. Did those already work in Rakudo? Oh well, try it and see. So I created this role:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;role POC::TestAnnouncer {&lt;br /&gt;    method test($project --&amp;gt; Result) {&lt;br /&gt;        announce-start-of('test', $project&amp;amp;lt;name&amp;amp;gt;);&lt;br /&gt;        my $result = callsame;&lt;br /&gt;        announce-end-of('test', $result);&lt;br /&gt;        return $result;&lt;br /&gt;    }&lt;br /&gt;}&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;And then, later:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;POC::Tester.new() does POC::TestAnnouncer&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;And it worked! On the first attempt! jnthn++!&lt;/p&gt;&lt;p&gt;(If you're wondering what in the above method that does the wrapping — it's the &lt;code&gt;callsame&lt;/code&gt; call in the middle. It delegates back to the overridden method. Note that with this tactic, I get to write my &lt;code&gt;announce-start-of&lt;/code&gt; and &lt;code&gt;announce-end-of&lt;/code&gt; calls &lt;em&gt;exactly once&lt;/em&gt;. I don't have to go hunting for all the various places in the original code where a &lt;code&gt;return&lt;/code&gt; is made.)&lt;/p&gt;&lt;p&gt;I guess this counts as using mixins to do Aspect-Oriented Programming. This way of working certainly makes the code less &lt;a href=&quot;http://en.wikipedia.org/wiki/Aspect-oriented_programming#Motivation_and_basic_concepts&quot;&gt;scattered and tangled&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So, in &lt;a href=&quot;http://github.com/masak/proto/blob/4396d9b6c6eca4c9a0d1e9da7ac90903c4ea528c/proof-of-concept&quot;&gt;this file&lt;/a&gt;, I currently have a veritable curry of dependency injection, behavior-adding roles, lexical subs inside methods, AOP-esque mixins, and a &lt;code&gt;MAIN&lt;/code&gt; sub. They mix together to create something really tasty. And it all runs, today, under Rakudo HEAD.&lt;/p&gt;&lt;p&gt;As jnthn said earlier today, it's pretty cool that a script of 400 LoC, together with a 230-LoC module, make up a whole working installer. With so little code, it almost doesn't feel like coding.&lt;/p&gt;</content>
		<author>
			<name>masak</name>
			<uri>http://use.perl.org/~masak/journal/</uri>
		</author>
		<source>
			<title type="html">masak's Journal</title>
			<subtitle type="html">masak's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~masak/journal/rss"/>
			<id>http://use.perl.org/~masak/journal/</id>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	</entry>

</feed>
