Tuesday, August 25, 2009

Where We Are

So, I figured for a first "real" entry, I'd make a post about the status of Cardinal as it stands.

Cardinal started out (AFAICT) as more or less Rakudo with a Ruby-ish parser. Right now, Cardinal is still very much in an alpha state.

The parser is horrifically slow. A test suite of ~90 files takes about 7-8 minutes to parse on my laptop. Once parsed, the actual execution (running PIR files directly on Parrot) is about 30 seconds.

The compiler is, on top of that, still rather incomplete. Off the top of my head, I can say that: function calls without either arguments or parens don't work; exception handling might parse, but won't work; there's no support for symbols; multiple assignment doesn't work. I'm sure there's much more.

The basic library is starting to take shape, but the object model on master is still P6object. I've been writing a new one and implementing Object/Module/Class on the iss41 branch. Since there's nothing that this doesn't touch, I suspect this will go a long way towards making Cardinal more Ruby-like, and will help enable further quick pushes to bring things up to speed faster. I expect that I'll be able to get Exceptions working shortly afterwards, and implementing Ruby's Method Resolution Order as well.

But this isn't at all an attempt to make things look dire. We're moving along at a decent pace. Besides myself, there are two common commiters: joeri, who's been concentrating on the parser and making sure that Cardinal behaves like Ruby; and dtm, who's been working on the stdlib. We could always use a little more help (although it'll be easier to integrate more help once I've got the object model in place), but I think we're moving along okay.

Since I started on the project in early July, we've written about 3000 new lines of code. It might not seem like much, but that's roughly 30% of the current codebase.

(That number also doesn't reflect the 2000 or so lines I've written in the last week or so on the iss41 branch.)

No comments:

Post a Comment