Enter my very first purely Perl 6 post. I’ve been working on the PIL implementation in Perl 6. PIL is an intermediate, retargetable semantics tree that represents the basic calculus of Perl 6. We compile Perl 6 into PIL, and then we can target PIL to whatver. PIL is very simple: only one page of Haskell, three pages of Perl 6.
I wrote up the Haskell PIL spec in Perl 6 and now I am writing a Perl 5 backend for PIL. The PIL tree I will hand generate for now, and it should be pretty easy to translate Pugs’s PIL tree to mine (they’re exactly equivalent barring language barrier structures), so that Pugs can be my parser. It’s going pretty well (and very quickly), but I have to implement all Perl 6 operations as subs in Perl 5. It is unlikely that I will be able to convert to “canonical Perl 5”. But that’s okay, as long as I can run most of Perl 6 in Perl 5, and can use what I generate seemlessly from Perl 5.
Meanwhile, we decided that Perl 6 is back to zero-deref instead of infinite-deref, just like Perl 5. This broke half of Pugs, so I’m “assisting” Autrijus in finding all the bugs it created (by writing correct code). The extremely large test suite is not working very well here, because many tests assumed infinite deref.
See my progress here: Perl-Compiler.