Newsgroups: rec.games.int-fiction
Path: news.duke.edu!newsgate.duke.edu!nntp-out.monmouth.com!newspeer.monmouth.com!news.maxwell.syr.edu!newsfeed.stanford.edu!paloalto-snf1.gtei.net!news.gtei.net!enews.sgi.com!coop.net!world!buzzard
From: buzzard@world.std.com (Sean T Barrett)
Subject: Re: TADS vs INFORM suppert
Message-ID: <G5I3xo.D6z@world.std.com>
Date: Wed, 13 Dec 2000 10:03:24 GMT
References: <121220001141376800%rgillett@kc.rr.com> <2RwZ5.4894$TU6.514208@ptah.visi.com> <3a36a693$0$29571@senator-bedfellow.mit.edu> <wk1yvdt2tu.fsf@thecia.net>
Organization: The World Public Access UNIX, Brookline, MA
Lines: 41
Xref: news.duke.edu rec.games.int-fiction:59638

In article <wk1yvdt2tu.fsf@thecia.net>, Dan Schmidt  <dfan@thecia.net> wrote:
>wild_dj@mit.edu (Jake Wildstrom) writes:
[Inform]
>| Well, it's obviously a lumbering behemoth in a lot of
>| aspects. Fortunately almost none of them are relevant to IF. I'm
>| thinking of the woefully limited memory model, cumbersome string
>| handling, and lack of longints or floating points.
>
>The lumbering thing that gets me down is the big hack that is the
>library, which is of course extremely functional, but lies in an
>uncomfortable unstable equilibrium somewhere between object-oriented
>and procedural/flag styles, making modifying it somewhat of a pain.

I agree, the library is a big problem. Part of the problem is the
lack of full OO-ness, part of the problem is the prevelence of hackery
(which also foils extensibility).

My personal bugaboo is the failure to distinguish between parsing
and world model. You really really ought to separate the two out;
if there are two different commands which both produce the same
effect, then the only difference between them should be in the
parser. But to use an example that came up on r.a.i-f the other
day, not only is "before/after" on an object not called when
leaving the object, "react_after" gets called, and you can
check "noun" [somebody posted suggesting this], but noun can
be the object being left, or 0 if the *command* was "exit" or
something which had no direct object.

Things like react_before/react_after need to get triggered on
"world model changes" (object A is moving from location B to
location C"), not on the parser. Of course, the desire for
emulation-y commands (the vast majority of commands which do
nothing unless there's a custom override) prefers the current
model, so you need to strike some balance between the two,
and Inform only does that in a very few places ("give bob the apple"
is converted by the parser to be the same as "give apple to bob",
and "ask bob for apple" is converted to "bob, give apple to me";
similarly the handling of LetGo and Receive, although I'm not
sure they're totally consistent).

SeanB
