Older blog entries for JoeNotCharles (starting at number 2)

Wonderful timing - just after I got all excited in my last post, Mark Hahn announced Prothon, a prototype-based language closely based on Python.

Pros: they advertise a better interpreter (but why not just use the same terp for Python?), no rough edges like the __init__ problem.

Cons: not actually Python compatible, so you can't use existing class libraries.

I imagine I'll look quickly at it, say, "Very nice," and then keep using Python. Because this is pre-alpha, and Python works now. And hacking with metaclasses is fun!

Fun with Python

A. M. Kuchling, in rec.arts.int-fiction, just showed me a really neat Python trick which he attributed to Michael Hudson. But first, some background:

I use a special-purpose language called Inform to write interactive fiction. It's sort of a hybrid between standard class-based and prototype-based OO languages - there's a shorthand to create a single object and add properties and methods to it, but if you want to create a bunch of identical objects you still need to create a class for them. It's very handy for world modelling. Most of the specialized IF languages use the same scheme.

I've been thinking for a while about using a standard language - Python or Ruby, by preference - since every IF language has annoyances and weirdnesses. This involves writing a standard library for world-modelling, which is a big job. There are already a few for Python, but they're really cumbersome compared to the Inform standard library, because creating a new object with a few specialized behaviours always involves both a new class and a new object.

Behold - prototyped Python (direct from amk's post)! Now we get to see how well the whitespace survives it's trip through HTML and back:

Wow. The answer to that is "not at all". The <pre> tag appears to do precisely nothing.

Instead, the code is on my Wiki page at work. To summarize: it lets you say "class SpecialRoom(Room)" and get both a class SpecialRoom and an instance (also conveniently named SpecialRoom) automatically.

This still has a few weirdnesses. Unlike a true prototype-based language, there are still classes and objects, so you can't directly say "issubclass(SpecialRoom, Room)" - you need to "issubclass(SpecialRoom.__class__, Room.__class__)". I'll need to experiment and read up some more to find out exactly how the class and the instance differ, and decide how to make it more seamless (or even if it's worth it). This also can't handle dynamically creating objects, which can be handled by adding a clone() method:

def clone(self): class anon(self): pass return anon

Except I'm not sure exactly where to put this. I tried initializing it in Prototype.__new__, which works fine but apparently isn't correct - that's what Prototype.__init__ is for, except it's not actually getting called in the above code.

Still, this is lots of fun! Massive new project, here I come...

First post!

Anyone else find the list of project relationships is a bit limited? (At least, it's not defined as well as the Certifications.) I just listed myself as a "Helper" on SWIG, even though all I've really contributed are a few minor patches. I've been using it quite a bit now at work - including digging into the massive and complex support libraries - and I figure I know as much about it as anyone who isn't one of the core developers by now. (Now I will go in on Monday and be proved entirely wrong about that.) But there's really no way to list myself as "Observer" or "Interested Follower" or "Available to help you if you're having problems with it", which is really what I want to say.

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!