The Perl Journal April, 2005
Perl 5.9.2 was announced earlier this month and is available from CPAN. It's a development version, not intended for production environments; instead, it's designed to allow users to test out new features slated to appear in Perl 5.10. Core enhancements as described in the perldelta focus on Unicode, suidperl insecurities, and Malloc wrapping ("detecting attempts to assign pathologically large chunks of memory"). New modules include Autrijus Tang's encoding::warnings, "a module to emit warnings whenever an ASCII character string containing high-bit bytes is implicitly converted into UTF-8," and Richard Clamp's Module::CoreList, "a small, handy module that tells you what versions of core modules ship with any versions of Perl 5."
Under the hood, "the semantics of pack() and unpack() regarding UTF-8-encoded data has been changed. Processing is now by default character-per-character instead of byte-per-byte on the underlying encoding. Notably, code that used things like pack("a*", $string) to see through the encoding of string will now simply get back the original $string. Packed strings can also get upgraded during processing when you store upgraded characters. You can get the old behavior by using use bytes."
News on the Perl 6 front continues to be headlined by Pugs, Autrijus Tang's implementation of Perl 6 in Haskell, which has recently reached Version 6.2.1. That's not quite as advanced as it sounds: Under Pugs' naming scheme, which is based on 2*pi, the initial release was Version 6.0. But the 6.2 release, announced earlier this month, represented the project's first major milestone: "We are now reasonably confident that the basics of Perl 6 syntax and data structures are in place," Tang wrote in his online journal (http:// use.perl.org/~autrijus/journal/). "We already have an object/type system now, and the 6.2.x series will make them available on the language level, together with a full-fledged class system." The 6.2.1 release of Pugs concentrates on stability and performance, with rewritten Context and Type code, a new OO core, and call-by-values bindings.
Tang has also been working with Leopold Totsch to bring Pugs into concert with Parrot. The plan, as reported in Tang's journal: "The evaluator and three independent compiler backends will now work in concert. Perl 6 source code will still be parsed to Pugs AST (Abstract Syntax Tree). The current evaluator in Eval.hs becomes a compiler, generating a Parrot AST. Parrot AST will then be compiled into Haskell, or pretty-printed into IMC (Intermediate Code)...That means Pugs can still run Perl 6 by itself, but enhancement on it can then be shared with Parrot and other languages targeting IMC."
More good news for Parrot: The Perl Foundation has announced that NLnet (http://www.nlnet.nl/), a Netherlands-based nonprofit organization dedicated to advancing open-source networking technology, has pledged $70,000 to support Leopold Totsch and Chip Salzenberg in completing the first two Parrot development milestones. Leo has been pumpking of Parrot since 2003; Chip recently took over the duties of chief architect. Their work will complete the core of Parrot's grammar enginewhich requires a Perl 6 grammar to be developed and tested against sample Perl 6 codeand extend that engine to product Parrot AST. Details of the Parrot milestones are listed at http://www.perlfoundation.org/gc/ grants/2005-p6-proposal.html.
Continuing the momentum, Chip has announced his intention to keep Parrot on a monthly release schedule. He suggested that code freezes should take place on the first of the month, and test builds made on Darwin, x86 Linux, and Win32 platforms. 64-bit Sparc may also be included in the mix. At the time of this writing, however, no preparations were underway for a May release.
On a more nuts-and-bolts level, the Parrot code was migrated this month from CVS to Subversion: "It was mostly painless, thanks to cvs2svn, and having tested out all the infrastructure and tools with other projects," Robert Spier reported on the new perl.org infrastructure weblog, log.perl.org. The Parrot source code now lives at http://www.parrotcode.org/source.html.
While Pugs and Parrot prance ahead, Ponie has been plodding behind in the Perl parade. As Nicholas Clark wrote on the perl6-internals list: "For various internal and external reasons work has been pretty much stalled for quite a while. I'm pleased to announce that it's now able to restart, and that I'm going to be able to allocate about 1 to 1 1/2 days per week to it on average. There is now a detailed roadmap breaking down the tasks needed between here and a first release, with estimates of times. It's checked into CVS at the top level, and available online as http://opensource.fotango.com/software/ponie/plan."
As the Ponie Plan explains, "The purpose of Ponie is to provide source compatibility between Perl extensions written in C and XS with Parrot, and thereby allow many important existing CPAN modules to be used unchanged with Perl 6." The four major steps broadly outlined in the plan are to progressively refactor all of the Perl data structures into PMCs (Parrot Magic Cookies); to move Perl 5's op code for type polymorphism into PMC methods; to replace Perl 5's "magic" features and behavior with Parrot implementations; and finally to migrate the Perl interpreter onto the Parrot runloop.
The Marseilles Perl Mongers will be hosting the second French Perl Workshop in Marseilles on June 9th and 10th. It's "the occasion for people to meet and talk about Perlin French." See http:// conferences.mongueurs.net/fpw2005/ for details. The Second Austrian Perl Workshop (http://conferences.yapceurope.org/apw2005/) has been scheduled for the same days; it will take place in Vienna, and is organized around the theme of "using Perl." Autrijus Tang, Chip Salzenberg, and Leo Totsch will speak. Later in the month, the Pisa Perl Mongers will host the Second Italian Perl Workshop. It will be held at the Polo Fibonacci in the University of Pisa, on June 23rd and 24th; see http://www.perl.it/workshop/ for more. Lastly, YAPC::EU::2005 (to be held in Braga, Portugal, August 31-September 2) has issued a second call for papers. Details are at http://braga.yapceurope.org/index.cgi?CallForPapers.