The change of year is a good occasion to look back. Here I want to
reflect on the development of Perl 6, its compilers and ecosystem.
At the start of the year, masak's Perl 6 Coding Contest
continued from 2010, concluding in the announcement
of the winner. I must admit that I still haven't read all the books I
won :-)
Specification
2011 was a rather quiet year in terms of spec changes; they were a
mixture of responses to compiler writer and user feedback, and
some simplifications and cleanups.
Positional parameters used to be allowed to be called by name; this
feature is now gone. That both makes the signature binder simpler, and
removes accidental dependencies on names that weren't meant to be public.
Read the full justification
for more background.
A small change that illustrates the cleanup of old, p5-inherited features
was the change that made
&eval stop catching exceptions. There is really no good reason for it
to catch them, except Perl 5 legacy.
say now uses a different stringification than
print. The reasoning is that print is aimed at
computer-readable output, whereas say is often used for
debugging. As an example, undefined values stringify to the empty string
(and produce a warning), whereas say calls the .gist
method on the object to be said, which produces the type name on undefined
values.
An area that has been greatly solidified due to implementation progress is
Plain Old Documentation or Pod. Tadeusz Sośnierz' Google
Summer of Code project ironed out many wrinkles and inconsistencies, and
changed my perception of this part of the spec from "speculative" to "under
development".
Rakudo
Rakudo underwent a huge refactoring this year; it is now bootstrapped
by a new compiler called "nqp", and uses a new object model (nom).
It allows us to gain speed and memory advantages from gradual typing; for
example the mandelbrot
fractral generator used to take 18 minutes to run on a machine of mine,
and now takes less than 40 seconds. Speedups in other areas are not as big,
but there is still much room for improvement in the optimizer.
With the nom branch came support for different object representations. It
makes it possible to store object attributes in simple C-like structs, which
in turn makes it much easier and more convenient to interoperate with C
libraries.
Tadeusz' work on Pod gave Rakudo support for converting Pod to plain text
and HTML, and attach documentation objects to routines and other objects.
Rakudo now also has lazy lists, much better role handling, typed
exceptions for a few errors, the -n and -p command
line options, support for big integers, NFA-based support for proto regexes
and improvements to many built-in functions, methods and operators.
Niecza
It is hard to accurately summarize the development of Niecza in a few
sentences; instead of listing the many, many new features I should give
an impression on how it feels and felt for the user.
At the start of 2011, programming in niecza was a real adventure. Running
some random piece of Perl 6 code that worked with Rakudo rarely worked, most
of the time it hit a missing built-in, feature or bug.
Now it often just works, and usually much faster than in Rakudo. There are
still some missing features, but Stefan O'Rear and his fellow contributors
work tirelessly on catching up to Rakudo, and it some areas Niecza is clearly
ahead (for example Unicode support in regexes, and longest-token
matching).
Since Niecza is implemented on top of the Common Language Runtime (CLR)
(which means .NET or mono), it makes it easy to use existing CLR-based
libraries. Examples include an
interactive fractal generator and a small Tetris
game in Perl 6.
Perlito
Perlito aims to be a minimal compiler
with multiple backends, which can be used for embedding and experimenting with
Perl 6. It had several releases in 2011, and has interesting features like a
Javascript backend.
Ecosystem
The presence of two usable compilers (and in the case of Rakudo, two viable
but very different branches) has led to many questions about the different
compilers. The new Perl 6
Compiler Feature matrix tries to answer the questions about the state of
the implemented features in the compilers.
With Panda we now have a
module installer that actually works with Rakudo. It still has some lengths to
go in terms of stability and feature completeness, but it is fun to work
with.
The new Perl 6 Modules page gives
an overview of existing Perl 6 modules; we hope to evolve it into a real CPAN
equivalent.
Community
This year we had another Perl
6 Advent Calendar, with much positive feedback both from the Perl 6
community and the wider programming community.
We were also happy to welcome several new prolific contributors to the Perl
6 compilers and modules. The atmosphere in the community still feels relaxed,
friendly and productive -- I quite enjoy it.
The year ends like it started: with a Perl
6 Coding Contest. This is a good opportunity to dive into Perl 6, provide
feedback to compiler writers, and most of all have fun.