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.