Saturday, March 31

natural language and its discontents

I just downloaded the fresh Linux binaries for Graham Nelson's Inform 7. They come with a perfectly1 useless, broken text menu wrapper, but there seems to be no reason you couldn't use them for development.

No source, unfortunately - and though it's coming eventually, it seems unlikely to be released under a libre license. This is hardly ideal. I've tended to think of closed development tools roughly the way I think about credit card companies, automotive dealerships, and collection agencies ever since HyperCard and QBasic broke my heart. On the other hand, I don't really think of Graham Nelson or the interactive fiction community in general as a bunch of evil, rent collecting bastards. Also, it's not like there's any rent to collect. Writing textual IF, in this day and age, is like writing poetry - if you ain't doing it for love, you ain't doing it.

Anyway, the core idea of I7 is this: Write your adventure game declaratively in more-or-less plain English. This is an interesting idea, though I'm not sure it's a good one. Most of the programming languages I've ever seen with plain English claims have been somewhere on a continuum between "vaguely annoying" and "unmitigated disaster". HyperTalk to COBOL, roughly. Perl is a damned good tool, and it's certainly informed by linguistic ideas2, but it rarely looks anything like English.

Verbosity is one serious problem with this sort of thing. More importantly, though, it's almost as if the flexibility, ambiguity, and structural possibilities of natural languages cause some kind of massive impedance mismatch when you encounter a programming language that mimics them.3 It actually seems to be harder to build a correct structure in a context which suggests, falsely, that a human-parsable English sentence will be a valid, machine-parsable code fragment.

1 One even suspects deliberately - it's almost enough to motivate me to write a GUI.

2 Like the idea that Perl makes the simple things simple (which is true as long as you don't take multi-dimensional data structures or pain-free passing of parameters to be "simple"), this is part of the official propaganda. It seems to be true nonetheless, although it's not always an asset to the language. Sigils which change dependent on context are not the worst idea in the world, and there are clear precedents for this sort of thing in English, but after 8 or 9 years I still write @list[1] where I mean $list[1] all the time.

3 I stole this thought somewhere.