Delays ...

I've been doing a lot less work than I had planned to. It's mostly my own fault, but such is life.

Basically, I ran out of money. Uni ended late, GSoC started early and the GSoC midterm was late this year. I had to borrow some and get a temporary full-time job for a couple of weeks. Now I have a part-time job (2 days a week), and I have the rest of the time free for GSoC work.

But not all is lost! Here's some puffins to make us all feel better:

A bunch of puffins on a rock

This rant is long overdue.

I may have said this before, but Parrot's Object/Class is unsuited to implementing a wide range of modern dynamic languages. It makes a ton of assumptions and manages to be worse for this purpose than Java's object system in most ways. It's just bad. The PMC/Object duality isn't helping either, although it is often the only way to implement particular behaviour. I'm still having some trouble with method calls and MRO.

6model is better. It's an actual MOP for a change. I'm not clear on the details, and the current dependency on NQP is not entirely to my liking, but it's much cleaner and appears to support the kinds of behaviour I need "natively". I'm happy that 6model (or similar) will move into parrot core at some point, but it's not an option for me right now.

PIR kinda sucks. It tries to be both a compilation target and reasonable to write by hand, and achieves neither very well. Some of its features help make one's compiler simpler (subs), but in general, it makes assumptions that I have to work around (.lexical or w/e it's called is plain wrong for Python). But you knew that.

IMCC is terrible: "syntax error ... somewhere". Really? I thought it was an easter egg when I first saw it. It isn't even capable of telling you where syntax errors are. Or it is if you indent your PIR just so. It must die, fast. But you knew that too.

NameSpaces and their associated instructions (get_*) are at the very least confusing. I can't figure out how to explicitly put things in the local/global namespaces at specific points in my program, and nowhere else. Either I'm missing something, or NameSpaces aren't right and I'll have to keep using plain hashes.

The tools aren't there yet. Rosella.Test is very useful, but it's not trivially integrated in a setup script. I think that's still not quite working in mine. Distutils itself isn't great. So much so, that I still have a setup.py script that compiles winxed and runs tests. A setup script should be small, plain and boring, just a bit of boilerplate, and that's simply not possible with parrot's Distutils at the moment. Perhaps I've been spoilt by more mature languages/ecosystems, but these issues have been significant obstacles for me.

It's not the end of the world, though. I wrote my own meta-object, improved the generated PIR and used hashes for scoping. I almost finished fixing the build/test system.

Next, I'll start implementing some of the harder bits in the compiler & object system. I'd rather get those out of the way first and focus on completeness later. For example, right now you can add numbers, but you can't subtract them. It would be trivial to implement, but it would take some time to implement all similar tiny little things.

Back to work now.