[Openmcl-devel] [Re: MOP Question: structure of Lambda list for direct-slot-definition-class]

rm at fabula.de rm at fabula.de
Wed Feb 23 04:17:51 PST 2005


On Wed, Feb 23, 2005 at 04:39:33AM -0700, Gary Byers wrote:
> 
> >  [snip]
> > 
> > while i agree that this (listifying multiple values) is what the mop
> > says i don't think it's the best way to do things.
> >

While i don't think the AMOP way of handling things is the best way of
dealing with the problem i'd hate to have to conditionalize my code for
OpenMCL. 
> 
> I don't believe that you're missing anything (if you are, I'm missing
> it, too.)
> 
> I think that ideally I'd like to have some way of saying that a given
> slot-option can appear at most once (as is true of some of the predefined
> options) and that the associated value should be provided as is (well,
> quoted), or that an option can appear multiple times and have the values
> canonicalized into a list.

Yes, i agree with that. Zhe question is: _where_ does such a syntax check
occur? The problem i reported was with {direct|effective}-slot-definition-class
whose purpose, imhu, is to detect the class used for a slot. In my understanding
the initargs are passed to this function only to detect whether the slot needs
to have a special slot definition at all - this usually seems to be done by
"tagging" the slot with a special init-arg so one can test simply with
a (getf initargs :persistant-slot) or something similar. (In my example
i _extend_ the functionality of clsql so i not only need to test for the
presence of a slot initarg (:db-kind in my case) but also need to test
the _value_ of that initarg).
I think the syntax check for initargs belongs to the instantiation of the
corresponding slot-definition class.

> I agree that what the spec actually says (as reinforced by the example
> in Figure 5.2) seems to be inferior to what I thought it said: option
> values aren't canonicalized consistently, but that's a function of
> the syntax of the call and not an attribute of the option itself (so
> both cases have to be handled for every non-standard option, to the
> extent that that's even possible.)
> 
> Implementing what the spec says would introduce an incompatible change
> (and would, as you point out, likely make it hard to reliably validate
> non-standard slot-option values.)  That's -almost- a compelling argument
> against fixing it, but I'm not sure that it's quite compelling enough.

I don't see why this should make valdation esp. hard. Just don't try to do
it in {direct|effective}-slot-definition-class which is, afaiu not meant for
this task.

> I do think that it may be worth considering having some way of requesting
> the current non-compliant-but-more-consistent behavior (e.g., if
> *DEFCLASS-ALWAYS-LISTIFIES-NON-STANDARD-SLOT-OPTION-VALUES* is true
> at macroexpand time ...).  I keep thinking that the real solution is to
> have something like:
> 
> (define-slot-option-behavior :value-type :at-most-once-and-single-value)
> (define-slot-option-behavior :foreign-reader :allow-multiple-and-listify)
> 
> [The intent would be to define behavior that'd (a) take effect at
>  DEFCLASS  macroexpand time and (b) be a global attribute of the symbol used
>  as a slot option initarg.  If this could be reasonably implemented and
>  used, I'd be less concerned about what the default behavior was.]

Didn't LispWorks have a (non-AMOP) process-a-slot-option which seems like the
right place to do such syntax checks.

 Cheers RalfD

> 
> 
> 



More information about the Openmcl-devel mailing list