[comp.lang.lisp] Importance of REPLACA, REPLACD, and

wagner@iaoobelix.UUCP (07/15/87)

[ National lineeater week... ]

In some cases, list creation can be optimized not to create a number of single
conses but one large vector which comprises a piece of the entire list (this
technique is usually referred to as CDR-Coding). The Symbolics manuals will
probably give you some hints on that.

An alternative representation of arbitrary n-ary structures (i.e. structures
holding n components) is possible with closures. Closures provide a
well-defined interface to a somehow opaque data structure (see various LISP
introductions or the FranzLISP Manual for an explanation).

Juergen Wagner,		     (USENET) ...seismo!unido!iaoobel!wagner
("Gandalf")			 Fraunhofer Institute IAO, Stuttgart

larus@dill.Berkeley.EDU.berkeley.edu (James Larus) (07/17/87)

Luddy Harrison (of the Center for Supercomputing Research &
Development at the Univ. of Illinois) has done some very nice work on
using vector-like structures to store lists.  The purpose of this work
is to make fast, concurrent reduction operations possible on
multiprocessors.  It has other advantages in that certain common
operations, such as APPEND, become very fast and efficient.  It's main
disadvantage is that RPLACA and RPLACD are outlawed because they screw
up the structure-sharing.  Luddy argues that a lot of cases in which
these operations were previously necessary for efficiency reasons are
not as important, i.e., NCONC is unnecessary when APPEND is almost
constant-time.

There is a paper in the 1986 Parallel Processing Conf. and a couple of
tech. reports on this work.

/Jim

tdavis@athena.mit.edu (Timothy L. Davis) (07/17/87)

{}

I think the style & "readability" wins of "writing out the parse tree", which
is really what lisp syntax is all about, could be combined with less esoteric
data structures,  a la C's malloc() and free(), to produce VERY optimized
code. There should be no need for run-time garbage collection.

Does anyone know if it is possible to write a lisp (or SCHEME) 
pre-processor which will eliminate the need for garbage collection by 
inserting (free ..) in the approprate places?  A starting point would be
lexically-scoped Scheme, no side-effects, and no global or fluid bindings.

If that is too hard (or proven impossible), how about a pre-processor to add 
>most< of the needed (free ...) statements, so that the garbage collector need 
not hardly ever be called?  The compiler could even flag unfreeable variables
and let the programmer specify their disposal explicitly.

I know many of the lisp hackers out there may think I don't understand the lisp
philosophy; I do, but let's leave garbage collection to rapid prototyping,
and develop good compilers to automatically transform those prototypes into 
the products (software, parallel-ware, VLSI, etc.) of the future.

Tim Davis                tdavis@athena.mit.edu
60 Wadsworth #19A        ...mit-eddie!mit-athena!tdavis
Cambridge, MA 02142