Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!uunet!husc6!think!barmar
From: barmar@think.COM (Barry Margolin)
Newsgroups: comp.lang.lisp
Subject: Re: lisp environments summary
Message-ID: <13253@think.UUCP>
Date: Tue, 8-Dec-87 22:18:01 EST
Article-I.D.: think.13253
Posted: Tue Dec  8 22:18:01 1987
Date-Received: Sun, 13-Dec-87 16:44:01 EST
References: <613@umbc3.UMD.EDU> <325@siemens.UUCP> <323@spar.SPAR.SLB.COM> <329@siemens.UUCP>
Sender: usenet@think.UUCP
Reply-To: barmar@sauron.UUCP (Barry Margolin)
Organization: Thinking Machines Corporation, Cambridge, MA
Lines: 52
Keywords: Interlisp, Editing, Files

In article <329@siemens.UUCP> steve@siemens.UUCP (Steve Clark) writes:
>  I maintain that the non-Interlisp systems are wrong, however.  It
>is clearly more advanced to treat a file as a database of definitions of
>functions, data, structures, etc. than to treat it as a string of characters
>that might have been typed at the keyboard.  However, since the rest of the
>world hasn't caught up yet, there are bound to be incompatibilities.

It would not be appropriate for a general-purpose Lisp standard to
require the Interlisp style of permanent storage of function
definitions.  This style requires that a function editor be built into
the Lisp system, and this may not be feasible or desirable in all
implementations and/or environments.  While many Common Lisp
implementations do include an editor, at least one notable one (Kyoto
Common Lisp) would have a hard time doing so.

I also wonder whether the Interlisp database is as powerful as the
Common Lisp LOAD style.  I'm not very familiar with Interlisp, so bear
with me.  A file to be loaded can contain other code besides
definitions and declarations; it can contain immediate code to be
executed.  Thus, the file LOAD-EVERYTHING.LISP could contain:

(load "first-thing")
(load "second-thing")
(load "third-thing")
(load "last-thing")

How is this done in Interlisp?  If there is a way to do it, then
what's the difference between that and LOAD?

The main thing that Common Lisp is missing is an easy way to save out
definitions that were defined interactively.  Common Lisp was designed
primarily by users of Maclisp and its descendents, and they presumed a
programming style built around text-file-based editor, so they didn't
include such a feature.  (Some implementations (e.g. MIT-derived Lisp
Machines) provide editor commands to insert interpreted definitions
into editor buffers, but this is beyond the scope of Common Lisp to
define.)

How does Interlisp know which definitions are important to save?  I
certainly wouldn't want it saving everything, since I constantly
create little temporary functions and variables while debugging.  If
the user has to save functions explicitly it seems like it would be
hard to make sure you don't miss some.  I'm sure these problems have
been solved, since I doubt Interlisp would have survived so long
without solutions, but I'm curious how.

---
Barry Margolin
Thinking Machines Corp.

barmar@think.com
seismo!think!barmar