Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!thunder.mcrcim.mcgill.edu!snorkelwacker.mit.edu!usc!sdd.hp.com!uakari.primate.wisc.edu!aplcen!aplcomm!uunet!mcsun!ukc!edcastle!aiai!jeff From: jeff@aiai.ed.ac.uk (Jeff Dalton) Newsgroups: comp.lang.lisp Subject: Re: Is this the end of the lisp wave? (core + penumbra) Message-ID: <3995@skye.ed.ac.uk> Date: 23 Jan 91 15:55:51 GMT References: <127724@linus.mitre.org> <5569@turquoise.UUCP> <3954@skye.ed.ac.uk> <3971@skye.ed.ac.uk> <4255@syma.sussex.ac.uk> Reply-To: jeff@aiai.UUCP (Jeff Dalton) Organization: AIAI, University of Edinburgh, Scotland Lines: 32 Re: It's true, Common Lisp has many features. But these features are often used to implement other features. In other words, a CL implementation has a very tangled call tree. It's hard to find portions of the language which could be removed. One reason why it may be hard to see some underlying simplicity in Common Lisp is that it is sometimes hidden by being "below" the level described in CLtL. Streams are perhaps the easiest example to dissect. The various stream types (broadcast-stream, echo-stream, etc) appear as pimitives, but only a few of them _have_ to be primitives. The others could be built up by defining new structures and extending the existing operations (read, print, etc) to recognize the new stream types. That would be a fairly straightforward thing to do if the stream operations were generic functions (as in CLOS). In implementation with a well-integrated CLOS, streams might even be implemented that way. However, when CL was defined there wasn't a standard object system and so most implementations have used internal object-like mechanisms of their own. Here we can see a break in the history leading to CL that has been partially repaired by the additions of CLOS. In (ITS) MacLisp, a number of stream operations were implemented using a simple object- like facility called "software file arrays" (SFAs). In Lisp Machine Lisp, it was done with Flavors. The reason the repair is partial is that CLOS was a sufficiently late addition that the stream operations were not specified as generic functions. They may be in particular implementations, but portable code can't rely on it. -- jd