Dear lisper,
This archive contains an Amiga version of CLISP as of 30th May 1996. Please
see the files README (general description, installation), clisp.man (command
line switches, tooltypes, explanation of files) and impnotes.txt
(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 four distinct binary versions of CLISP. These will be referred
as *-high, *-low, *-00 and *-wide. Depending on your machine, you'll not be
able to run all of them on one machine.
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.
* 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.LSP, 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.
Changes: (_part_ of CHANGES.LOG)
User visible changes
--------------------
* REMOVE-METHOD didn't work.
Thanks to Roger Kehr <kehr@iti.informatik.th-darmstadt.de>
and Bruno Haible for the fix.
* Fixed a bug in the compiler: A (MULTIPLE-VALUE-SETQ vars valform)
or (MULTIPLE-VALUE-BIND vars valform ...) form was miscompiled if
valform is known to produce a single value.
Thanks to Bruno Haible and Paul Graham <pg@das.harvard.edu>.
* RENAME-FILE now does *not* result in an error if the destination
file already exists (unless the system call results in an error message).
* PROBE-FILE and TRUENAME will not issue error messages if given
directories.
* X3J13 vote <72> is implemented: all standard Common Lisp data objects
other than symbols and lists are self-evaluating.
Thanks to Pierpaolo Bernardi.
* X3J13 vote <40> is partially implemented: New macro WITH-STANDARD-IO-SYNTAX.
Thanks to Pierpaolo Bernardi.
* Some FORMAT fixes:
+ X3J13 vote <81> is implemented: The FORMAT ~:^ directive is more useful.
Warning: Old style "~:^" directives need to be converted to "~#:^".
+ X3J13 vote <82> is implemented: The FORMAT ~D, ~B, ~O, ~X, ~R directives
accept an optional comma-interval parameter.
+ X3J13 vote <84> is implemented: FORMAT ~C outputs characters with no bits
as if by WRITE-CHAR.
+ Handling of ~^ within the FORMAT ~? directive.
* New function FINALIZE. (FINALIZE object function) has the effect that
function will be called when object is being garbage collected.
* The initial value of *PACKAGE* can be specified by a command line option.
* Fixed a bug in the compiler which caused LOAD-TIME-VALUE forms to be
evaluated at compile time.
* Amiga version: SCREEN package is implemented. Thanks to Jörg Höhle.
* Fixed a CLOS bug which caused (DEFCLASS FOO (STANDARD-OBJECT) ()) and
(DEFINE-CONDITION FOO (CONDITION) ()) to signal errors.
* The DEFCONSTANT warning about redefinition of a constant is also inhibited
if the constant's new and old values are the same string (in the sense of
EQUAL). Thanks to Marcus Daniels.
* X3J13 vote <64> is implemented: New macro DESTRUCTURING-BIND.
* New function UNCOMPILE. (UNCOMPILE function-name) undoes the effect of
(COMPILE function-name) if the function's definition had been entered
in interpreted form.
* (LISP-IMPLEMENTATION-VERSION) returns a more precise version string.
* X3J13 votes <115> and <114> are implemented: an elaborate LOOP macro.
New macro LOOP-FINISH.
Warning: The scoping rules for the iteration variables are hairy. If a
FOR/AS initialisation form refers to an iteration variable of a subsequent
FOR/AS clause, the effects are implementation dependent!
* Fixed a bug in the debugger which caused the BACKTRACE commands to print
garbage if the current user interface language was not english.
* French support is now complete. Thanks to Jörg Höhle.
* The user interface language (english, german or french) can now be chosen
at startup time through a command line option. The constant *LANGUAGE* has
been removed, and its value has been removed from *FEATURES*. New macros
ENGLISH, DEUTSCH, FRANCAIS and LANGUAGE-CASE.
* New functions READ-CHAR-SEQUENCE, WRITE-CHAR-SEQUENCE, READ-BYTE-SEQUENCE,
WRITE-BYTE-SEQUENCE which perform fast block I/O.
* Errors of type FLOATING-POINT-UNDERFLOW are inhibited in floating point
computations (and zero is returned instead) during execution of the new
macro WITHOUT-FLOATING-POINT-UNDERFLOW.
* PROBE-FILE doesn't report an error any more if an intermediate directory
in the path doesn't exist. NIL is returned instead.
* The function INTERACTIVE-STREAM-P knows that if the terminal stream is
referring to a regular file (via input redirection) it is not interactive.
* There is a user programmable kind of streams, called generic streams.
New functions MAKE-GENERIC-STREAM, GENERIC-STREAM-CONTROLLER,
GENERIC-STREAM-P, GENERIC-STREAM-READ-CHAR, GENERIC-STREAM-READ-BYTE,
GENERIC-STREAM-LISTEN, GENERIC-STREAM-WRITE-CHAR, GENERIC-STREAM-WRITE-BYTE,
GENERIC-STREAM-WRITE-STRING, GENERIC-STREAM-CLEAR-INPUT,
GENERIC-STREAM-CLEAR-OUTPUT, GENERIC-STREAM-FINISH-OUTPUT,
GENERIC-STREAM-FORCE-OUTPUT, GENERIC-STREAM-CLOSE.
See impnotes.txt for details. Thanks to Marcus Daniels and Don Cohen.
* Fixed a bug in the terminal stream: If several consecutive READ-LINE
operations on the terminal stream were performed without any text
containing newlines being output between them, the prompt finally got
duplicated and then became longer and longer.
Installation
------------
* All non-Unix versions: Setting the local time zone should now be much
easier. 122 time zone names are supported.
Other modifications
-------------------
* Speed up compiled calls to FORMAT with literal control string by use of
FORMATTER.
* When a memory image is loaded, the terminal stream from the previous
session is closed.
* Copyright clarification.
* Miscellaneous documentation updates.
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.
Joerg.Hoehle@gmd.de
|