Last night luqui entered the zone, and cranked out a PIL to Perl 5 codegen interface. Stevan's Perl 6 object environment in Perl 5 is progressing nicely; today nothingmuch extended the codegen with PPI, so we can work with quasiquoting Perl 5 syntax trees instead of concatenating strings.
The upshot of all this is, in addition to GHC and Parrot, Perl 5 is going to be the third runtime that we can run Perl 6 on. Because the codegen and PIL representation are themselves written in Perl 6, we may recompile this:
use perl5:PPI; use Perl::Compiler::CodeGen::Perl5_PPI; # ...codegen from PIL to Perl5...
Into this Perl 5 code:
use PPI; use Perl6::Loader 'Perl::Compiler::CodeGen::Perl5_PPI'; # ...codegen from PIL to Perl5...and run it with the Perl 5 runtime. Perl 6's base types and the roles/class system are evaluated in Stevan's Perl6::MetaModel module to be released later this week; Coro and Perl6::Junction etc may be needed to simulate the more complex parts of the control flow.
At the Cabal meeting today, Allison mentioned that it would be nice to have the same set of PIR/PASM abstraction tree I'm using available as Parrot objects, so people targetting Parrot can generate their code in a more robust form, and said it would be nice to have it at OSCON time. Well, by tonight's dinner time I've hacked the Parrot objects emitter from any Haskell data structures to PIR objects. To make use of them in the stand-alone PIR, we'd just need to port the 100ish line of instance Emit defintions. We can also use the same Haskell-declarations-to-objects process to keep PIL's Haskell form and Perl 6 form in sync, which would ensure reusable macro and compiler code, which allows gradual porting of Haskell to Perl 6.
There's plenty of other news, for example the first templating system being developed on Pugs, but I really need to crash now after less than 3 hours of sleep last night. And I also got a 3hr talk on Tuesday, which I have zero slides prepared... ;-)