This file describes the main changes made to New S in the June, 1989 release,
relative to the original June, 1988 source code.
(In general, anything in what follows that you've never heard of, you
can probably ignore.)

- in general, there has been a lot of tuning done to try to make S more
  efficient, especially in memory usage.

- there is a new directory, $SHOME/contributed, that holds contributed
  software.  Right now this is a repository for the X and NeWS graphics
  functions and a command, K, that allows vi or emacs-like command-line
  editing.  The contributed directory may hold other things in the future.

- tty630 and tty5620 graphics functions are provided and always compiled.
  They work on all machines (but, if you want to download code into the
  terminal to set it up to do graphics, you have to have the appropriate
  development software).

- the pic graphics function is supported.

- a number of new machines are provided for in the installation
  process.

- the code compacts storage used in `for', `while' and `repeat' loops,
  by checking the growth (since the last compacting in this loop) at
  the bottom of each pass through the loop.
  There is now an option (see below) that controls when compacting occurs,
  and compacting now includes frame 1 and (in principle) frame 0.

- speaking of frame 0, the code now distinguishes frame 0 from the cache
  storage used for functions after they've been read in, and from really
  permanent storage.  When the cache is cleared out (e.g., after attaching
  or detaching a directory), the system reclaims the storage.
  When frame 0 accumulates a lot of lost space (from re-assigning to
  frame 0), the system tries to compact it, although this bit hasn't really
  been tested (it's hard to waste a lot of space in frame 0).

- there are several new options: `compact' for the size at which to compact
  in loops; `scrap' which decides how big something should be before the
  code makes it recoverable in assignments; `warn' which controls the
  action on warning message; `free' which turns on and off some of the
  memory recovery.  See the detailed documentation for options().
  The `compact' and `scrap' options are key to the memory management.  The
  default values (1e5 and 500) seem to work pretty well, but it may be that
  other hardware will need different values.

- there is a whole new way of allocating the C structures that hold the
  information about S vectors; this tries to be fast about allocating
  them but also to retrieve the space when they are not needed.  This is
  part of a two-prong effort to recover memory when a (re-)assignment
  occurs.  The other part is that if the data portion is bigger than the
  `scrap' option is allocated separately & can potentially be retrieved.

- there is new code to handle things like .Options, that affect code at
  the C level.  The idea is that functions should be able to set .Options,
  and even .Search.list, locally in their frame & have the changed values
  propogated downward, Lisp-like.  The model here is that the code gets
  values of .Options as if through a call to get with a new argument,
  `inherit', set.  More is likely to happen on this front.

- there has been some change to the code that handles "quick calls" --
  simple calls to internal functions that can bypass actually creating a
  frame for the function call -- in order to make fewer copies.  The code  
  that replaces subsets, etc. has also been changed to reduce copying.

- eval() can use an explicit list for the `local' argument and still
  work correctly and efficiently.  Much of the model-related calculation
  in the "Statistical Software in S" book will make heavy use of this idea.

- the .Program that runs everything now calls internal C code that
  simulates what the old .Program did (actually with a few improvements,
  for example, it doesn't print when an assignment follows a comment)
  and avoids some overhead in both time and space that the old .Program
  encountered.
