*** Quoted from original distribution files ***


This tape contains a version of Standard ML for VAX/UNIX 4.2bsd as
it appears in the revised report after the standardisation meeting
in May 1985.  

Before using the system, you will need to perform the following steps:

 1) Alter the path in the file sml to point to the directory containing 
    the SML system.
 2) Create the abstract machine with the filename fam by renaming a file of 
    the form fam.machine, if you are running on a vax, sun, pyramid or gould.
    For any other machine, you will need to run the command 'make fam' in the 
    fam.src directory to create a fam file.
 3) Run the command 'sml sml.exp.backup < Configure.Heap' which should
    produce a file called sml.exp
 4) The system may then be invoked by executing the file sml .


Source files of the abstract machine are in the directory fam.src.


This version of Standard ML has a number of known deficiencies including...

 - The implementation of sharing of structures and types 
   may be flakey.

 - The exhaustiveness checking does not always report warnings when it
   should.  Furthermore, the algorithm used to check the patterns is
   exponential, although in many cases this is not a problem.  As a
   temporary measure, if you encounter a case where this checking takes 
   an excessive amount of time, the checking can be temporarily disabled 
   using the CheckMatch flag in the Debug variable, e.g.
      ...
      let val {CheckMatch,...} = Debug in CheckMatch := false end;
      < define function that causes the problem >
      let val {CheckMatch,...} = Debug in CheckMatch := true end;
      ...


All values in the environment are accessible from one of the structures
Pervasives or Extensions (these have been recursively 'opened').
Thus, nil may be referred to by any of nil, List.nil or Pervasives.List.nil
for example.

There are a few non-standard features that are available, 
including
 
   ExportML : string * string * string list -> unit
      This takes a file name, a banner message, and a list of files
      to load on start-up, and saves away the current state of the system
      in the file with the given file name.  Assuming that a saved state
      was placed in file fred.exp, then it may be restarted by
      executing "sml fred.exp".
      Any streams that were open when the export occurred will fail
      with the error "stream link lost" if used when the state
      is reimported.  'New' versions of std_in and std_out may be
      obtained by calling the function stdio: unit -> (instream * outstream).

   Print and Debug are variables that affect the underlying compiler.
   They are records, and the field names should indicate what most
   of the fields do.

   The basic I/O package is implemented, but not the extended I/O
   primitives.

   Equality types are supported, as is a derived form for record
   selection ( #a is a function that extracts the field a from a
   record).


Please report any other faults encountered to

      N. Rothwell
      Computer Science Department,
      Edinburgh University.

  UUCP: ... mcvax!ukc!{hwcs,kcl-cs,ucl-cs,edcaad}!cstvax!nick
  ARPA: nick%cstvax.ed@ucl-cs.arpa
  TEL:  +44 31 667 1081 ext. 2697

*** end of quotation ***










