
The file March-92-PCL-2.tar.Z contains a new version of PCL.
This version contains full support for structure classes and many optimizations
which speed up PCL at run-time, and is closer than previous versions of PCL to 
the metaobject protocol specified in "The Art of the Metaobject Protocol", 
chapters 5 and 6, by Gregor Kiczales, Jim des Riveres, and Daniel G. Bobrow.
See the file notes.text for more details.



The file March-92-systems.tar.Z contains all the files in March-92-PCL-2.tar.Z,
as well as several other systems: CLX for X11R5, conditions (based on Kent Pitman's 
cond18.lisp; most of this is loaded only in KCL), and an extensible inspector
that supports multiple views of objects (which is invoked by calling INSPECT).

These systems are easily installable: all you need to do to compile and load
everything (if you are using Lucid CL or Allegro CL or AKCL) is load the top-level 
file system.lisp (it would probably work better if you start with a lisp that
does not already have these systems loaded).  If you are using CMU CL, you need 
to edit the top level file init.lisp and load that.  The tools subdirectory is 
for CMU CL users who want to save a world with all these systems in it.

There is also a file containing notes on how to use clue and clio with
March 92 PCL.


I have tested March-92-systems in Lucid's Sun Common Lisp version
4.0.1, CMU CL version 15e, and AKCL 609.  
[The test that I use is:
 (1) start up X somehow, and be sure the DISPLAY environment variable is set.
 (2) start lisp and load everything (by loading the file "system" or the file "init").
     (I ususally save the lisp image at this point.)
 (3) type: (inspect 'x), and try things a while.]

----------------------------------------------------------------------

Within system.lisp are some system distribution functions that can take the 
place of tar for distributing lisp software.  (A system distributed this way 
becomes one big file, that is installed just by loading into lisp.  system.lisp 
also includes software to compress, uuencode, and mail such distributions 
automatically, and the corresponding inverse operations.)


Also, system.lisp incorporates physical pathname support which (I believe) 
is compatible with CLtL2, with extensions for some useful directory operations.


If you ever need CLX windows to be CLOS objects, PCL always has to be
loaded before CLX.  But if you never need this (If you know that you
will not be using the inspecter, for example), you only need to exit
about 2 or 3 lines in clx/clx.lisp, comment out about 2 lines in sysdef.lisp,
and recompile CLX (It will probably be necessary to delete the .o files first.
See below.).


If you want to load or compile just a single system (plus whatever it 
depends upon, of course), load "init.lisp", answer No to the question, then
type (dsys::load-system 'your-system), or (dsys::compile-system 'your-system).  
This is set up so that it will not re-load or re-compile anything unnecessarily.
(It keeps track of the file-write-dates of all loaded files, and checks
them against the filesystem.  PCL is done differently, though.)
On the other hand, the system's idea of what things must be recompiled
is only as good as the declarations in the sysdef files, and I have them set
up in such a way that is fast rather than safe (this means that sometimes
files that should get recompiled will not be, and doesn't have anything to do 
with optimize proclamations.)  If there is a system that you will never use,
you can comment out the "(pushnew 'system-name *auto-load-systems*)" form 
in the file systems/system-name.lisp to avoid having it automatically loaded
when "system" is loaded.


If you want to compile things with a different optimize proclamation,
you might need to change dsys::*compile-system-proclamation*, or you might
need to edit the various sysdef files involved.


The inspector will get faster when I do the make-instance optimizations
I am currently thinking about.  I am not certain, but I think that
make-instance is the source of most of the delay  in the inspecter
between when you click the mouse and when you see the result.


If you use AKCL, when you load system.o, you will see that system.o
gets loaded twice.  The second time it is loaded with si:faslink using "-lc".
If you don't want it to load twice, you need to do more than just use
si:faslink yourself, I am not sure exactly what is necessary.

