Recently in Parrot Category
Will Coleda has graphed up the state of the Parrot bug queue in Google Spreadsheets. I had no idea there was so much Tcl action going on.
Hooray for spreading the word! Patrick Michaud impressed this attendee at FOSDEM with his talk about Parrot and Rakudo Perl.
The next talk was about Perl 6. Patrick Michaud was a good speaker, and he could convey his enthousiasm about the (many) novelties of Perl 6 as opposed to 5. He also quickly described what they used for their implementation of Perl 6, Rakudo Perl: the Parrot virtual machine. This seemingly allows you to put together your dynamic language in about 4 hours. Might pick up Perl again sometime. (Emphasis mine -- Andy)
This kind of PR is invaluable as we pass the tipping point to getting Perl 6 and Rakudo Perl out the door. Thanks, Patrick.
Addendum: Here's some more good stuff reported:
The talk about Perl 6 was the most interesting for me. I didn’t really like Perl <5 primarily because of having too many ways to do the same in exactly the same way but with a different syntax. I knew that Perl 6 was a total and backwards incompatible redesign of the language, build on top of a generic and good virtual machine called Parrot. Parrot, which I hadn’t given a proper look yet, turned out to be a lot greater than expected. You write support for a new language in Parrot by writing in a subset of Perl 6, which with it’s new Regular Expressions and specializations (tokens: regex without backtracking, etc), was looking very suited for it.
Except for all the new syntactic very very sweet sugar (on which I won’t (yet) elaborate) they added in Perl 6, the greatest one (which is actually more of a Parrot thing) is being able to extend Perl during runtime: writing new parser rules. One application is being able to define ‘!’ as a faculty operator. I’m itching to play with it.
Ted Neward has written an article on the problems of scaling up projects based on dynamic languages:
While a dynamic language will usually take some kind of performance and memory hit when running on top of VMs that were designed for statically-typed languages, work on the DLR and the MLVM, as well as enhancements to the underlying platform that will be more beneficial to these dynamic language scenarios, will reduce that. Parrot may change that in time, but right now it sits at a 0.5 release and doesn't seem to be making huge inroads into reaching a 1.0 release that will be attractive to anyone outside of the "bleeding-edge" crowd.
Alas, he has to end with "Perl just sucks, period." Even as we work forward with Parrot and Perl 6, the continued public perception of Perl doesn't change. :-(
I've got so many little notes that don't warrant a full-blown story, so here's a link roundup:
- Perlcast interviews Curtis Poe about logic programming and Prolog. Is Fluffy a mammal?
- Adam Kennedy provides a mathematical proof that Perl is unparseable.
- chromatic is tracking down memory leaks in Parrot (but if you follow rakudo.org, you already know that).
- David Landgren has posted another of his marvelous Perl 5 Porters weekly mailing list summaries. If you want to know what's happening in Perl 5.10 (and 5.12) development, but can't handle the volume and/or high-level discussion, David's summaries are the place to go.
- Andy Armstrong has performed magic to let you instrument your Perl code with dtrace.
There, that feels much better now!
Bob Rogers, Parrot release manager for Parrot 0.5.2, announces...
On behalf of the Parrot team, I'm proud to announce Parrot 0.5.2 "P.e. nipalensis." Parrot is a virtual machine aimed at running all dynamic languages.
Parrot 0.5.2 can be obtained via CPAN (soon), or follow the download instructions at http://parrotcode.org/source.html. For those who would like to develop on Parrot, or help develop Parrot itself, we recommend using Subversion or SVK on the source code repository to get the latest and best Parrot code.
Parrot 0.5.2 Highlights:
- "make perl6" uses the new pbc_to_exe tool to build a Perl 6 executable. It's still a ways from being a finished implementation of Perl 6, but we're working on that. Come join us!
- Parrot now has a LOLCODE implementation! Not an "enterprise-class" computing language, you say? We don't expect anyone to use it for their next app, but at less than 500 lines of source code (and most of that in a subset of Perl 6), it demonstrates the power of the Parrot Compiler Toolkit. See lolcode.com for more.
Parrot 0.5.2 News
- Documentation + PDD27 (multiple dispatch) - debut of new design + Numerous small updates to glossary.pod, etc - Compiler Toolkit + NQP: optional, named, and named/required parameters + PIRC: cleanups + PAST: "defined-or" - Languages + New mk_language_shell.pl script creates language stubs + LOLCODE: new + Lua: various + Eclectus: start with support for local variables and procedures, use SXML as intermediate representation + Perl 6: list builtins, compiler directives, command-line options, etc. + "make perl6" now builds a Perl 6 executable + punie: more builtins, control structures, code refactoring + pynie: builtin stubs, more tests - Implementation + New "pbc_to_exe" utility turns bytecode to executables + New set_outer method for subs + Further configuration refactoring for testability + All functions now completely headerized + Concurrency: interpreter schedulers - Deprecations + DYNSELF (changes to SELF; SELF to STATICSELF) + METHOD (replaced by renaming PCCMETHOD) + pmcinfo op (superseded by 'inspect') + get_attr, set_attr, and 8 other vtable methods + See DEPRECATED.pod for details - Miscellaneous + Many bug fixes + Minor speed enhancements with UTF-8 string handling + Debian packaging + consting, attribute marking, warnings cleanup, memory leaks plugged ...
The next scheduled Parrot release will be five weeks from today, on 19 February 2008.
Thanks to all our contributors for making this possible, and our sponsors for supporting this project.
chromatic provides us with more insight into the Perl 6 process that's picking up steam. His original post ran here at oreillynet.com. I've edited it a bit to emphasize the goodies.
A running joke in the Perl 6 world is that we'll release a stable Perl 6.0.0 by Christmas. We just won't tell you which Christmas.
As many community-developed projects have noticed, long blocks of holidays can be very productive for contributors. Both Parrot and Perl 6 on Parrot have made a lot of visible progress in the past couple of weeks.
mod_parrot
Jeff Horwitz took over the maintainership of mod_parrot a while back and has steadily made progress. The new news is that he's writing a user's guide. The older news is that mod_parrot supports languages built on top of Parrot, including Perl 6 and Plumhead (PHP on Parrot).
make perl6 just works
In terms of code, I dusted off some proof of concept code that Jerry Gay and
I wrote several months ago, with advice from Nick Forrette, added one new
feature, and checked it in. The code is pbc_to_exe and it allows
you to build an executable named perl6 by typing make
perl6 (or make perl6.exe on Windows) once you have the
Parrot source tree configured on your machine.
The initial proof of concept took about two afternoons to write up; I wrote
the first version in Perl 5 and then Jerry and I translated it to PIR (Parrot's
native programming language). Then it sat for a few months, until someone
convinced me that the progress we've made would be much more accessible if we
could provide an executable file named perl6 with the compiler
linked in nicely. It took part of an afternoon to add the last missing piece
and put things in place. (For that, see downloading the Parrot source
code. Until the next stable Parrot release on 15 January, you need to
check out Parrot from source code.)
I'm proud of this little project in a sort of mortified way; it just writes
out a C file that wraps a tiny exectuable header around the PBC file and calls
a couple of functions in libparrot to run that code, much like the
parrot executable does (but without all of the latter's
command-line options). It may be the most useful code I've written in a while
though.
More developers, and Debian packaging
The biggest surprise to me is that, besides myself and Jerry, Francois Perrad, James Keenan, Patrick Michaud, Cosimo Streppone, Will Coleda, Curtis Poe, Bernhard Schmalhofer, Jason Porritt, and Andy Dougherty have all worked on this system in the past week. One small change -- one small feature representing perhaps an ideal day's worth of work -- inspired so much additional polish and evolution. That's not counting all of the other people who might now download and play with Perl 6 on Parrot. (It gets better too. Allison Randal and some of the other Parrot developers have resurrected the old Debian packages for Parrot, so Debian and derivatives will likely be able to install and run both Parrot and Perl 6 on Parrot after the next release.)
That's not the only interesting thing.
Parrot's new object system
The November and December 2007 Parrot releases were significant because each one added a major new feature. Parrot 0.5.0 introduced the new object system which we believe is capable of supporting all of Perl 6's OO features (and by extension, just about every OO system available in dynamic languages, though there's one design question remaining about the multi-dispatch system in CLOS). Parrot 0.5.1 includes the new Parrot Compiler Tools, which allow you to build compilers using, more or less, Perl 6.
LOLCODE in Parrot
Though most of my work in Parrot is fixing weird bugs and adding new features to the platform itself, it's been fun and a little scary to watch the development of LOLCODE on Parrot. Will Coleda started this on Wednesday, and the project has picked up contributions from Simon Cozens, Jerry Gay, Patrick Michaud, Klaas-Jan Stol, Bernhard Schmalhofer, James Keenan, and Stephen Weeks.
I know that you know that LOLCODE is a joke language, and I know that Simon Cozens is a smart guy who worked on Parrot several years ago and then retired from programming, but he wrote up his experiences in Parrot is really quite wonderful.
How to build a Parrot compiler
Patrick and I gave a talk at OSCON last year about building a Parrot compiler, and I repeatedly said that our goal is to make it possible for you to build a working compiler in an afternoon. You won't build a language as rich and powerful as Perl, Python, or Lua in an afternoon, but we hope to get all of the boilerplate out of the way in the first thirty seconds so you can spend four hours adding just the features you want. (The frosting part of this dessert is that you can bundle up your compiler into a cross-platform C program you can distribute as source code to compile and run on any machine which has libparrot installed.)
I think we're starting to succeed.
Parrot New Contributor Day
The next Parrot New Contributor Day is Saturday, 12 January 2008. Please join us in #parrot on irc.perl.org then or any time.
chromatic is an editor and technical evangelist at O'Reilly Media and has contributed to Perl 1, Perl 5, Perl 6 and Parrot.
Patrick Michaud has written up a huge recap of recent activity in Parrot and Perl 6 in the past few days. As Patrick points out, "there is a huge amount of activity taking place with Perl 6 and Parrot; in fact, most of what I've written about here has occurred in the [past] 72 hours." Highlights include:
- make perl6 target in Parrot
- Patrick added the "defined-or" operator and the @*ARGS array to the perl6 compiler
- Jonathan Worthington added a preliminary version of 'given'/'when'
- Jerry Gay has been adding radix conversions to perl6,
- Will Coleda is working on a web interface for high-priority RT tickets
- the Perl 6 wiki has also gotten received quite a bit of reorganization
All the Perl 6 and Parrot buzz brought Simon Cozens out of the woodwork. Simon's been involved with Perl 6 since the very beginning, but hasn't been worked on the project for a while. He's checked out the current status of Parrot and Perl 6, and he likes what he sees:
Here's hoping Simon sticks around for a while and helps keep this burst of Perl 6 energy going!There's a perl6 make target which builds Perl 6 binary, for heaven's sake, and it runs real live Perl 6 code. It's there, right now. [But] what excites me is the Parrot Compiler Toolkit.
[P]eople were saying that Perl 6 was going to be written in Perl 6, and I was, well, let's say, a little sceptical. But you know what? They've done it. I am astounded. It is lovely.
Perl 5.10 is now available from CPAN, and Parrot 0.5.1 will be available soon. Details in forthcoming article.
François Perrad has created the parrotwin32 project. He writes "This project supplies only binaries for Windows (setup.exe form) of the monthly releases. I hope that help Parrot end-users (on Windows) and promote the use of Parrot."
Richard Dice has announced that the Perl Foundation and Mozilla Foundation have joined to give Patrick Michaud a development grant to work on Perl 6 for four months. Patrick is already the Perl 6 compiler pumpking.
The goals are impressive:
- Have a Perl 6 on Parrot implementation that supports commonly-used Perl 6 constructs;
- Improvements to the Perl 6 test suite;
- Substantially complete the Parrot Compiler Toolkit, including documentation;
- Increased community participation in Perl 6 and Parrot development, including development efforts on other languages using Parrot and the Parrot Compiler Toolkit.
I'd like to thank TPF and Mozilla Foundation for doing this. I think this will be quite a boost in Perl 6 development, and it will be visible to everyone. When much of the Perl community, including Yours Truly, has doubts about Perl 6 ever seeing the light of day, this is exactly what is needed.