Nearly a year ago I wrote Getting Involved with Perl 6. There were quite some changes in
Perl 6 land in the mean time, so I thought I'd give you a little update - both
in terms of progress and how you could help today.

Pugs

pugs isn't actively developed anymore, due to
lack of contributors. The last commits to pugs itself were the attempt to
compile it with GHC 6.8.*, which actually broke the build.

If you happen to be an ambitious hacker with some Haskell background, feel
free to revive it. If not - bad luck.

The last revision known to build with GHC 6.6.1 is r19915 if you feel like compiling it first ;-)

Update: since writing this post audreyt actually fixed build and install via the cabal package manager (which is Haskell's CPAN-equivalent) with GHC 6.8.2. Details are in the INSTALL file in the pugs repository.

Parrot and Rakudo

Rakudo is actually quite fun to hack. I wrote a few small patches, and got
very good feedback from the other developers. It has solid testing (about 700
passing tests from the official test suite, plus a few sanity tests), and is
written in an interesting mix of languages: Perl 6 rules for the parser, NQP
("Not Quite Perl 6", a subset of Perl 6) for the parser actions, and PIR and C
for builtins. If you don't like one or more of these languages, you can still
find tasks that involve only one of them.

One of the next larger goals is to enable the writing of builtins in Perl 6
itself, so once that's done it will be even more fun to hack.

KindaPerl6 and smop

KindaPerl6, short kp6 is nearly bootstrapped, but it turns out that the
bootstrapped version is painfully slow. So ruoso started a new C based
"virtual machine" called
smop. Unlike parrot it is focused on meta object programming,
supporting natively different object systems and different representation for
objects of the same type.

Work on kp6 has temporary stalled, but now ruoso received a
grant
for advancing smop programming and using it as a kp6 backend.

ruoso would be happy about any contributor with some C knowledge,
or interest in the fundamentals about object oriented programming.

New Kids on the Block

Elf

Mitchell Charity has started another Perl 6 compiler called elf. It
is based on a ruby translation of the Perl 6 standard grammar STD.m, and
everything else is a bootstrapped Perl 6 compiler with a Perl 5 backend. Other
backends are being discussed too.

If you like hacking in <perl5 perl6 ruby>.pick(2), join #perl6
and poke mncharity or pmurias.

yap6

diakopter started yap6, "yet another perl 6" as an experiment in
recursive descent grammars (inspired by Dominus' "Higher Order Perl"),
towards mutable grammars for Perl 6.

It can't parse a very large subset of Perl 6 at the moment, but if you're
interested in continuation style parsing, this the project to get involved
with.

Other Projects

My area of largest contribution is currently the Perl 6 test
suite, which is converging towards an implementation independent, large (but
mostly tame) beast.

There's a
Google Summer of
Code project running to enhance and improve the test suite, but the task is
so vast that any additional help is appreciated, and we're in no danger of
running out of work for our gsoc student ;-)

There's also a non-technical project for helping Perl 6: Conrad Schneiker
took action
to raise
funds for Perl 6 development. I don't know if
the
recent success is based on his work, but in any case it is a very good thing
to do, and one that many programmers don't feel qualified or assigned to.

If you have buisness skill and some time to spare, this might be a good
place to help us. Check out the
fundraising
wiki page for more details.

P.S. I hope I didn't confuse too many names. People tend to use their nick
name on IRC and their real name on mailing lists, which sometimes makes it
hard to map these two if they are unrelated. If you are mentioned in this
meditation in the wrong way, please just /msg me, I'll fix it ;-)

Update: small typos, and a few additional details suggested by Auzon++

I read what I can find about Perl6 but get confused about all the different projects and how they relate to one another. Does KindaPerl6 use Rakudo? I hope that Perl6 won't be slower than Perl5 - one of the bad things about Ruby is the lack of speed.

Its also a bit worrying that there are so many projects - doesn't this dilute the efforts and slow down progress?

Then again, so little of the work is paid and open source tends to branch here and stall there. I'm grateful that people do find the time to push things forward.

Its also a bit worrying that there are so many projects - doesn't this dilute the efforts and slow down progress?

Yes and no. Many of these projects have a different focus, and thus they help exploring the specs in different directions. For example one of the design goals of kp6 was to get BEGIN blocks right, smop explores meta object programming, elf focuses on the grammar and parsing.

I don't know if progress was faster if all focused on the same implementation, but in the end everybody can decide what do to with their time.

I hope that Perl6 won't be slower than Perl5 - one of the bad things about Ruby is the lack of speed.

You have to be aware that there are two kinds of speed, one manifesting in short compilation time, the other in short run time.

I would be very surprised if any Perl 6 implementation could keep pace with perl 5's compilation. It's just blazingly fast due to some very evil hacks, for example it doesn't generate an abstract syntax tree. On the plus side some implementations (specifically rakudo) might implement precompilation of modules, which would somewhat reduce compilation time of a given script.

Regarding run time speed, I guess that an initial Perl 6 release will be slower than perl 5. That's because perl 5 has some years of optimizations behind it, which rakudo and other implementations will certainly lack.

But note that Perl 6 is designed with great care to allow many kinds of optimizations. For example the optional static types can allow some very radical optimizations - if some numbers are declared as Int, you can compile down infix:<+> to a single CPU instruction - you can't in perl 5, because you have to beware of overloading and tied variables, and because you can't declare any types.

Also note that rakudo compiles stuff (indirectly) to parrot byte code, and parrot has JIT which perl 5 lacks. Now with JIT you can do all kinds of clever optimizations that you simply can't in perl 5. Optimizations in parrot will benefit all high level languages running on it, so there's great incentive to implement them.