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

Re: issue CONSTANT-CIRCULAR-COMPILATION, version 4



    Date: Wed, 25 Jan 89 17:47:05 PST
    From: cperdue@Sun.COM (Cris Perdue)

    This discussion, with an extra push from Jeff's last note, is pushing
    us toward a DECLARATION about non-circular constants to help the
    compiler/loader operate more efficiently.  Agreed?

You don't see me agreeing.

There is no evolved way to name a piece of data, other than a variable,
so it's a bit hard to declare it. If it's gotten as far as being in a
variable, it's probably not being dumped. The constants being dumped are
generally anonymous. Somehow the idea of doing

 (DEFUN FOO ()				(DEFUN FOO ()
   (LET ((X '#1=(A . #1#)))	 or	  (LET ((X #1=3))
     (DECLARE (CIRCULAR #1#))		    (DECLARE (NON-CIRCULAR #1#))
     ...))				    ...))

doesn't appeal to me.

Or maybe you only meant to say:

 (DEFUN FOO ()
   (DECLARE (HAS-NO-CIRCULAR-CONSTANTS))
   (LOOP (FOO)))

but how do you know that (LOOP (FOO)) doesn't expand into

 (BLOCK NIL (MAPCAR #'(LAMBDA (#:IGNORE) (FOO)) '#1=(A . #1#)))

? This would almost work if you required the LOOP expansion to be

 (LOCALLY 
   (DECLARE (WELL-YES-IT-REALLY-DOES-HAVE-CIRCULAR-CONSTANTS-AFTER-ALL))
   (BLOCK NIL (MAPCAR #'(LAMBDA (#:IGNORE) (FOO)) '#1=(A . #1#))))

but then suddenly the burden is on the person using these things to
declare them rather than the burden being on the person who wants speed
to declare something that gets it for him, and that's the part I want
to avoid [for internal consistency with, for example, numbers where
the basic model is simple and you add declarations to get a hairier
model but more efficiency].

I guess I don't see any way that declarations are going to do anything
but confuse matters even more.