[comp.lang.clos] CLOS SAVE OBJECT

john@LINUS.MITRE.ORG (05/07/91)

Is there some reason this stuff doesn't use MAKE-LOAD-FORM et al, as
defined in CLtL2?  The use of the two facilities is essentially the
same, except that MAKE-LOAD-FORM handles circularities, and allows the
user to extend the facility, for example, to deal with user-defined
metaclasses.

Also, given that CL compilers must handle "similarity as constants",
as defined in CLtL2, this functionality can be implemented completely
portably with a small amount of code.

AI.gadbois@MCC.COM (David Gadbois) (05/08/91)

    Date: Tue, 07 May 91 10:16:57 -0400
    From: john@linus.mitre.org

    Is there some reason this stuff doesn't use MAKE-LOAD-FORM et al, as
    defined in CLtL2?  The use of the two facilities is essentially the
    same, except that MAKE-LOAD-FORM handles circularities, and allows
    the user to extend the facility, for example, to deal with
    user-defined metaclasses.

One reason is that some of the major Common Lisp vendors have not gotten
around to implementing it.  As far as I know, only Symbolics (Genera
8.0.2) and Apple (MCL 2.0 beta) have it.  The other vendors we deal with
(Franz and Lucid) say they will have it "real soon now."

Also, the CLOS dumper presented prints out a character representation,
which may be advantageous in some situations.  I have not tried it, but
it looks like the output will be portable between implementations unlike
the results of MAKE-LOAD-FORMs.

    Also, given that CL compilers must handle "similarity as constants",
    as defined in CLtL2, this functionality can be implemented
    completely portably with a small amount of code.

I am a bit suspicious about what "similarity as constants" means for
structures and instances.  CLtLII (and the X3J13 relevant decisions) say
that they "obey their own rules," but it is not clear to me whether this
allows implementations to put objects constructed via MAKE-LOAD-FORM in
read-only areas.  The two implementations I have seen do not, but then
they really do not have such a notion.

--David Gadbois

jeff@aiai.edinburgh.ac.uk (Jeff Dalton) (05/08/91)

> Is there some reason this stuff doesn't use MAKE-LOAD-FORM et al, as
> defined in CLtL2?  The use of the two facilities is essentially the
> same, except that MAKE-LOAD-FORM handles circularities, and allows the
> user to extend the facility, for example, to deal with user-defined
> metaclasses.

Not all Common Lisps _have_ MAKE-LOAD-FORM.

> Also, given that CL compilers must handle "similarity as constants",
> as defined in CLtL2, this functionality can be implemented completely
> portably with a small amount of code.

CL compilers don't have to conform to CLtL II, and many of them
don't.  Some are planning to; others are not.  See page xiii:

   Until the day when an official ANSI Common Lisp standard
   emerges, the 1984 definition of Common Lisp will continue
   to be used widely.

It's unfortunate that this happens, but it's hard to avoid given
that work on the standard is still taking place.