[asdf-devel] The issue at hand
Pascal Costanza
pc at p-cos.net
Sun Jan 26 01:36:36 UTC 2014
On 25 Jan 2014, at 23:29, Faré <fahree at gmail.com> wrote:
>> OK, will do. I will try to get all of the new operations written up,
>> but I don't believe I will have time until after the 31st (conference
>> deadlines, and end of contract dates mean that the ASDF manual has to
>> wait...).
>>
> Take your time. We're all impatient about it.
>
>> I do not yet the proposal. How can OPERATION keep the old semantics and
>> still be the root? There are 11 direct subclasses of OPERATION now, and
>> some fan out from there (e.g., a fair sized subgraph under BUNDLE-OP).
>> How is the overriding to be managed?
>>
> I suppose the trick is as follows:
> 1- move the crucial behavior of downward-operation, sideway-operation,
> selfward-operation, in separate defun's that are called by the
> respective defmethods.
> 2- have methods on operation that check whether the operation is
> a subtype of any of the three above or non-propagating-operation.
> If not — then apply the methods for all of them.
> 3- at instantiation-time, call the same detection function, and issue a WARNING.
> In six months or a year, it will be replaced by a CERROR, then an ERROR,
> at which point the defuns can be merged back into the respective defmethods.
>
> This way, people are warned now already, but ASDF keeps working,
> and we don't break either all the software in quicklisp until later.
>
> Congratulations to Anton V. for this clever suggestion.
You have to be careful: If anybody defines :around methods, you will get surprising results. This is why the CLOS MOP forbids user code to define methods on pre-defined metaclasses, where a very similar trick is used to bottom out the reflective tower - specified generic functions on standard-xyz classes test whether the class of the metaobject parameter is exactly standard-xyz or a subclass, and branch accordingly. You may want to specify similar restrictions on user code to prevent such surprises.
I also strongly advise against turning warnings into cerror or error. It just prevents working code from continuing to work, which is gratuitous IMHO.
Pascal
--
Pascal Costanza
The views expressed in this email are my own, and not those of my employer.
More information about the asdf-devel
mailing list