[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 88/8/1 PCL patches

    Date: Tue, 02 Aug 88 17:28:50 -0400
    From: kanderso@WILMA.BBN.COM

    Here are the remaining patches i've had to make to get the latest PCL
    to run through my test cases.

Thanks once again for your patches and help with PCL.  Here is the
current status of these patches with respect to my sources here.

    Basically they cover:

    1.  Jim Larus' performance improvements.

Looking through these, it looks like a lot of this can be achived by
changing the definitions of the %mumble functions in low.lisp as

(defmacro %logand (&rest args)
  (reduce-variadic-to-binary 'logand args 0 t 'fixnum))

(defmacro %logxor (&rest args)
  (reduce-variadic-to-binary 'logxor args 0 t 'fixnum))

(defmacro %+ (&rest args)
  (reduce-variadic-to-binary '+ args 0 t 'fixnum))

;;; This support function may be useful for ports which are redefining
;;; the primitive math and logic operations.
(defun reduce-variadic-to-binary
       (binary-op args default identity-with-one-argument-p type)
  (labels ((bin (args)
 	     (if (null (cdr args))
 		 `(the ,type ,(car args))
 		 `(the ,type (,binary-op (the ,type ,(car args))
					 ,(bin (cdr args)))))))
    (cond ((null args)
	   `(the ,type ,default))
	  ((and identity-with-one-argument-p
		(null (cdr args)))
	   `(the ,type ,(car args)))
	  (t (bin args)))))

I have done that in my sources here and this will be in the next release
of PCL.  In addition, it is necessary to fix a couple of things in
dcode, which I have also done.

    2.  Class redefinition infinite loop.

The next release of PCL will use a completely different underlying
mechanism for handling redefined classes.  The user behavior should
conform fully to 88-002R.  That is to say that when a class is
redefined, and the instances must be updated, the generic function 
update-instance-for-redefined-class will be called with arguments as

So this long-lingering class redefinition infinite loop problem will be

    3.  Angela Dappert-Farquhar's with-slots-internal--class and related

I don't understand quite what this does?

    4.  Eliminate need for class-direct-generic-functions.

This will be in the next release.  

    5.  Fix some differences between 7-1 and 7-2 debugger.

    I realize, you plan to rework some of these, but 2 & 3 are needed to
    make PCL useable now.

    ;;;-*-Mode:LISP; Package:(PCL LISP 1000); Base:10; Syntax:Common-lisp; Patch-File: Yes -*-

    ;;; Patches to "8/1/88 (beta) Laguna Seca PCL"
    ;;; Patches that must be made in the sources files are commented out here with
    ;;; "#+patched-in-sources".



    ? Why does make-parameter-references produce a warning?

make-parameter-references warns when it sees a redundant ignore
declaration in a defmethod.  Since defmethod is supposed to "reference"
all the arguments which have a specializer, an ignore declaration for
one of those arguments should be redundant.  Have you found a case where
it produces erroneous warnings?

    ? Can the logand's and logxor's in dcode be replaced by %logand and

This is done in the next release.  Actually there are no more calls to
either of these in dcode.  Instead, dcode calls a new facility called
cache-key-from-wrappers.  This is defined in vector lisp and only uses
%mumble functions.

    To Do:

    o mki -> make-instance.

In the next release, there will be an implementation of the
initialization protocol as defined in 88-002.  This will be part of a
two-step process geared towards getting rid of the old initialization
protocols and introducing the new one.  In the next release, the new
functions will be called:


In a subsequent release *make-instance and *initialize-instance will be
renamed to their real names.  Sometime in between, PCL will be converted
to use the new initialization protocol.

    o Remove extra defmethod print-object in methods.lisp


    o add ignore declarations to keep compiler quiet.

Done partially.  I will try to do the rest of these before the next

    o Fix iterate compiler problem in 7.1

For you to do since I don't have a 7.1.

    o extend Jim larus's fixnum patch to pair logand arguments for
      machines that only optimize binary arguments.

As mentioned above, I did this in low.lisp.


    o specializer (eql fred) works but (eql 'fred) as in CLOS doesn't.

This should work now.  What still is a problem is that eql methods don't
work too well with method combination.

    o supress lispm's redefinition warnings for setf methods.

Yes, I would like to see this fixed.  This is on my agenda of things to
do as part of a more intimate interface to setf from PCL.

    o C-E in debugger or M-. on a method can't find it unless it has
      been ZMAC'd

    o tracing methods doesn't work