For reasons that can best be described as "obsessive compulsive", I've decided to port CLU to Parrot.
What is CLU?
An early sorta-OO language. It appeared in the late 70s, and was used as a teaching langauge in the early and mid 80s. It has "clusters", which are a set of operations that can be performed on an opaque data abstraction. (Like a class, but no inheritance, and slightly awkward syntax.)
A language with some interesting features. Parameterized types; parameterized procedures; iterators; parameterized iterators; exceptions.
It's a language I learned to program in once, so therefore it can never be allowed to die.
Why port to Parrot?
Clusters and exceptions will test bits of Parrot not heavily stressed yet.
While CLU iterators don't have to be implemented with coroutines, they can be. So that gets tested too.
It's strongly-typed, and Parrot should have at least one B&D language.
I never bothered taking the compiler course, so this is my chance to use the Dragon book in anger.
I get to play with Parse::RecDescent and Parrot.
Things I have:
A Perl6 grammar that looks like it might parse CLU. Useless until Perl6::Rules gets released.
A Parse::RecDescent grammar that parses the bits of CLU I've fed into it so far.
The outline of the parsetree cleanup code.
Vague ideas of how I'm going to do code emission. (I'm going to target IMCC.)
Things I need:
A set of parsing tests.
Finish the AST cleanup code.
Write the code generation.
Do I understand the current state of the calling conventions?
How is linking supposed to happen?
How out-of-date is Perl 6 Essentials already?
Implement the builtin types and the standard library (or at least enough of streams to print).