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

Re: Compilation implications

> Probably it would be a better idea for MAKE-LOAD-FORM to return two
> values, where the first value is a form that will create the object and
> the second value is a form that will further initialize the object?
> This way the order of evaluation requirement is more explicit.  It's
> upward compatible since the second value can be NIL if you don't need
> it. 

Yes, that sounds good except for the problem of how to pass the object to
the second form.

>  ...  suppose we plug the object returned by
> the first form into the second form and do (schematically):
>          (WHEN form1.2
>            (EVAL (APPEND form1.2 (LIST (LIST 'QUOTE x1)))))

This reduces generality because the second form can't use optional
arguments, and it seems a little strange to say that the second value is a
form minus its last argument.  I wonder if it wouldn't look nicer to just
designate a variable name to indicate where the object is to be plugged in?

For example, we might do:

  (defmethod make-load-form ((object my-class))
    (values `(allocate-mine ...)
            `(init-mine * ...)))

where it is understood that the loader will bind * to the result of the
first form while evaluating the second.  This follows the convention that
* is the result of the previous evaluation, so doesn't introduce a new
name to remember.  Now that I think about it, I like this better than my
previous 4-value suggestion.

> Should I evolve the proposal I sent out the other day along these lines?

Yes, I would like to see that.