Short: Common Lisp, release 1998-08-30
Requires: OS 2.04 or newer
Author: haible@clisp.cons.org, hoehle@tzd.telekom.de
Uploader: hoehle@tzd.telekom.de

Dear lisper,

This archive contains an Amiga version of CLISP as of 30th August 1998. Please
see the files README (general description, installation), clisp.man (command
line switches, tooltypes, explanation of files) and impnotes.html
(differences between CLISP and the Common Lisp reference, extensions, ARexx
interface documentation). See also CHANGES.LOG if you are not a new user.
Aminet archive names have been shortened to fit the 20 characters limit.

Which version to choose
-----------------------

There may be five distinct binary versions of CLISP. These will be referred
as *-typ2, *-high, *-low, *-00 and *-wide.  You'll not be able to run all of
them on one machine.  The *-high, *-low and *-wide versions are of historical
interest now that the *-typ2 version exists that could even be compiled for
68000, thus running on every Amiga (great!).

o The *-typ2 version:

  + has been compiled for 68020 and higher, won't run on 68000 CPUs. It
    doesn't use the floating point coprocessor.

  + is able to deal with addresses from 0 to 0x7FFFFFFF, thus working on
    almost any system (anyone with memory above $80000000?) and with VMM.

o The *-high version:

  + has been compiled for 68020 and higher, won't run on 68000 CPUs. It
    doesn't use the floating point coprocessor.

  + is able to deal with addresses from 0 to 0x07FFFFFF, thus working on most
    A3000 and A4000 machines. GigaMem uses addresses between 0x20000000 and
    0x60000000. VMM uses adresses at 0x40000000. CLISP cannot run with
    that.  8% slower than the *-typ2 version on my A4000.

  * checks the memory it gets, reverting to MEMF_24BITDMA, like *-low.

o The *-low Version:

  + has been compiled with a 68000 in mind. It can only deal with a 16MB
    address space ranging from 0 to 0x00FFFFFF. It clears the upper 8 bits of
    a 32 bit address before putting it on the bus and won't forget to check
    the memory it gets from the system.

  * checks whether AllocMem(MEMF_ANY) returns memory in the above range. If
    not, and if the CPU is not a 68000, it uses MEMF_24BITDMA (MEMF_CHIP on
    pre-2.0 machines) to ensure that it does not get memory outside the 16MB
    address range. DMA-able memory is a bit too hard a requirement, but there
    are no other flags.

  + can be made to run on a A3000 or A4000 by patching the executable to load
    the code and data hunks into CHIP memory (24BITDMA would suffice with
    >=2.0, but one can't say that easily in the load hunk structure). The
    supplied ratom.rexx ARexx script can do this for you, but you really
    don't want to run CLISP out of CHIP memory now that there is the *-high
    version.

o The *-00 version:

  + resembles the *-low version but has been compiled for a 68000 only. It
    doesn't need to clear the upper 8 bits, leading to faster execution on
    these machines (I measured 8% when compiling AFFI1.LISP, not that much).

  + removing german and french language support would make the executable
    size 14% smaller but not the image without new .fas files, so I
    refrained from doing so and maintained .fas file compatibility among all
    versions.

o The *-wide version:

  + has been compiled for 68020 and higher, won't run on 68000 CPUs. It
    doesn't use the floating point coprocessor.

  + is able to deal with any address and works fine with virtual
    memory (VMM) or configurations where memory is located above
    0x08000000 (e.g. CSA-Derringer 030). This has been achived at the
    cost of using 64-bit integers. This makes the executable and
    memory files very large and run-time longer (I measured a 40%
    increase in execution time compared to *-high).

o The Lisp-part of CLISP is in the CLisp-*-Part2 archive, e.g. the compiler
  source can be found there. The archive also contains the compiled Lisp
  files (with the .fas extension), enabling you to easily build your own
  lispinit.mem file. You can generate own lispinit.mem file by executing
  lisp.run -x (LOAD"init.fas")(SAVEINITMEM) in a shell, or call (SAVEINITMEM)
  directly when in your Lisp world.

o The complete CLISP source can be found in the clispsrc-<date>.tar.gz
  archive (see file ANNOUNCE). You need to have GNU-zip (gzip) and tar (or
  GNUtar) to be able to unpack it. I rearchived it for Aminet distribution
  into CLispsrc-<date>.lha.


Installation
------------

See amiga/INSTALL.


Notes
-----

o If you start (REXX-LOOP), the only exit is the exit-loop.cl ARexx
  script. I'd like comments and ideas for improvements of the ARexx
  interface. See also impnotes.html.

o CLISP always allocates its own stack (in private memory) and should
  not cause MungWall or Enforcer hits. This stack allocation feature
  may cause compatibility issues with future Amigas.

o The lisp.run executable contains symbolic information. Symbolic information
  will help you report bugs (if you find any, CLISP has been very stable).

o Hints for your config.lisp:
(defparameter *editor* "memacs")        ; Micro-Emacs editor
(defparameter *editor* "ced -keepio")   ; Cygnus ED (right?)


Changes: (_part_ of CHANGES.LOG in the source tree)

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* The 16 MB memory size limit on 32-bit machines is gone. No need for
  wide-mode binaries any more. The "makemake" option --with-wide is not
  supported any more. The command-line option -W is supported for backward
  compatibility, but will be removed in the future.

* New variables *WARN-ON-FLOATING-POINT-CONTAGION* and
  *FLOATING-POINT-CONTAGION-ANSI*.

* New function PROBE-DIRECTORY which tests for the existence of a directory.
  Suggested by many people.

* New FORMAT directives ~/ (ANSI standard) and ~! (a better alternative).

* ANSI CL variable *PRINT-RIGHT-MARGIN* is implemented.

* The functions WRITE and WRITE-TO-STRING take the :RIGHT-MARGIN key
  argument.

* Added AmigaOS support for the socket functions. It's not perfect, but
  sufficient for writing socket clients.
  Thanks to Jörg Höhle.

* X3J13 writeup <ENSURE-DIRECTORIES-EXIST> is implemented:
  New function ENSURE-DIRECTORIES-EXIST.
  Suggested by Pierpaolo Bernardi.

* X3J13 writeup <ISO-COMPATIBILITY:ADD-SUBSTRATE> is implemented:
  The macro DEFINE-SYMBOL-MACRO is now exported from package COMMON-LISP.
  Suggested by Pierpaolo Bernardi.

* X3J13 writeup <CONS-TYPE-SPECIFIER:ADD> is implemented:
  New type specifier (CONS car-type cdr-type).

* X3J13 writeup <JUN90-TRIVIAL-ISSUES:9> is implemented:
  New classes GENERIC-FUNCTION, STRUCTURE-OBJECT, CLASS, METHOD. Removed
  the type STRUCTURE.

* X3J13 writeup <SPECIAL-FORM-P-MISNOMER:RENAME> is implemented: New function
  SPECIAL-OPERATOR-P. The function SPECIAL-FORM-P still exists, but its use
  generates a compiler warning.

* Use of the deprecated functions GENTEMP and SET now generates a compiler
  warning.

* Many, many other X3J13 (ANSI CL) writeups.

* Fixed a bug in the LOOP macro: Forms containing REPEAT clauses were
  executed too often in the presence of FOR-= clauses.

* Don't warn anymore if someone modifies one of the standard generic
  functions of CL like PRINT-OBJECT and INITIALIZE-INSTANCE.

* Speed up I/O to *STANDARD-INPUT*, *STANDARD-OUTPUT* and *TERMINAL-IO*:
  If standard input is redirected from a file, the input side of *TERMINAL-IO*
  will be buffered. If standard output is redirected to a file, the output
  side of *TERMINAL-IO* will be buffered.

* Added a new type encoding scheme which allows all address ranges from
  0x00000000 to 0x7FFFFFFF to be used. This should make porting to some
  systems easier.

* X3J13 vote <150> is implemented: (READTABLE-CASE readtable) can now have
  the value :INVERT.

* MAKE-PACKAGE and IN-PACKAGE accept a keyword argument :CASE-SENSITIVE.
  Similarly, DEFPACKAGE accepts an option :CASE-SENSITIVE. When its value is
  non-NIL, the package will be case sensitive, i.e. the reader will not
  case-convert symbol names before looking them up or creating them in this
  package. The package names are still subject to (READTABLE-CASE *READTABLE*),
  though.

* New macro SPACE. (SPACE form) evaluates form and prints information about
  the memory allocations caused by this evaluation.

* DESCRIBE of a structure now displays the structure's slots.

* Reduced the number of conses allocated by calling APPLY on a function with
  both &KEY and &REST.
  Thanks to Jörg Höhle.

* (DRIBBLE filename) now appends to the given file instead of overwriting it.

* X3J13 vote <182> is now fully implemented: A LET/LET*/COMPILER-LET binding
  specification may now be a list of length 1, without initial value.
  Thanks to Gilbert Baumann <gilbert@ma2s2.mathematik.uni-karlsruhe.de>.

* X3J13 vote <78> is now fully implemented: FLET, LABELS, MACROLET establish
  an implicit BLOCK.

* X3J13 vote <100> is implemented: Hash tables with test function EQUALP.

* X3J13 vote <131> is partially implemented: #P reader macro for pathnames.

* DEFCLASS which changes a class is now allowed and generates a warning.
  Since UPDATE-INSTANCE-FOR-REDEFINED-CLASS is not supported, it is your
  responsibility to not use the old instances afterwards.
  Suggested by Brian Dennis <xjam@CS.Berkeley.EDU> and Tobias Kunze
  <tkunze@cmsgia.Stanford.EDU>.

* The TIME macro now outputs to *TRACE-OUTPUT* instead of *STANDARD-OUTPUT*.
  Thanks to Nathan Sidwell <nathan@bristol.st.com>.

* The EXIT-ON-ERROR macro now also exits when a Ctrl-C interrupt occurs.
  Thanks to Roger Kehr <kehr@iti.informatik.th-darmstadt.de>.

* New variable *LOAD-COMPILING*, which provides the default value for the
  :COMPILING keyword of function LOAD. The initial value of *LOAD-COMPILING*
  can be specified by a command line option.

* Fixed bugs in DEFSTRUCT, LOOP, CLOS and many other places.

* The read-eval-print loop now calls FORCE-OUTPUT after outputting the prompt.
  Thanks to Jörg Höhle <Joerg.Hoehle@gmd.de>.

* X3J13 vote <72> is conditionally implemented: Objects other than symbols,
  lists, numbers, characters, string, bit-vectors are now self-evaluating if
  *PACKAGE* uses the COMMON-LISP package.

* The package CLOS is now among the default use list of a new package.
  (USE-PACKAGE "CLOS") is not needed any more. To use PCL, you now need
  to (UNUSE-PACKAGE "CLOS") explicitly.

* The bytecode format is now platform independent. As a consequence,
  compiled functions can be printed readably when *PRINT-READABLY* = T.

* Built-in function objects (SUBRs) are now printed readably when
  *PRINT-READABLY* = T, instead of signalling an error.

* Socket streams are implemented. New functions SOCKET-SERVER,
  SOCKET-SERVER-CLOSE, SOCKET-SERVER-PORT, SOCKET-WAIT, SOCKET-ACCEPT,
  SOCKET-CONNECT, SOCKET-STREAM-HOST, SOCKET-STREAM-PORT, SOCKET-SERVICE-PORT,
  SOCKET-STREAM-PEER-HOST. See impnotes.html for details.
  Thanks to Marcus Daniels <marcus@sysc.pdx.edu> and
  Marco Ramoni <M.Ramoni@open.ac.uk>.

* Pipe streams now support binary I/O.

* MAKE-INSTANCE now also works for DEFSTRUCT classes, and DEFSTRUCT classes
  can now be subclassed via DEFCLASS with option :METACLASS STRUCTURE-CLASS.
  Suggested by Manuel Kolp <kolp@qant.ucl.ac.be>.

* APROPOS and DESCRIBE now tell you about symbols which name a type or class.


Enjoy and send me all sorts of comments, bug reports and suggestions. Please
mention your (LISP-IMPLEMENTATION-VERSION) and system (especially memory
location) configuration when doing so.

      Jörg Höhle.
hoehle@tzd.telekom.de

