Saturday, March 31

natural language and its discontents

I just downloaded the fresh Linux binaries for Graham Nelson's Inform

. 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.