Hi,

OK, I can report a success: All my test cases run through now (almost, see 
below ;).

However, there are still some remaining bugs:

1) extract-specializer-names is not correct for eql specializers. Consider: 
(extract-specializer-names '((s (eql 's)))) => ((EQL S)). However, the result 
should be ((EQL 'S)), the quote should not be removed!

2) When an accessor method is initialized, it should be passed a 
:slot-definition argument to the slot it is supposed to access. This doesn't 
seem to happen.

3) When ADD-METHOD has to remove a method because of agreeing on specializers 
and qualifiers with the new method, it is specified to do so by invoking 
REMOVE-METHOD rather than by doing it by itself. However, this doesn't seem to 
be the case.

4) DEFMETHOD doesn't call MAKE-METHOD-LAMBDA to determine the method function 
body. [My guess is that this is not easy to change due to the deviation from 
the MOP specification in how method functions are called.]

5) (setf generic-function-name) is specified to invoke reinitialize-instance to 
do its job, rather than doing it by itself. However, this doesn't seem to be 
the case.

6) Many of the metaobject classes expose slots with names that are exported 
from some package or visible in CL-USER. This shouldn't be the case. (See 
"Restrictions on Implementations" in the MOP specification.)

Most of these should be very easy to fix (except for 4 probably). I could do 
most of them (except for 4 and 6) in Closer to MOP, but I guess it's better if 
you do them directly in ECL. Depending on how we agree, my internal development 
version of Closer to MOP for the next ECL is ready to be released. Please give 
me a sign when I should do that.

[I will skip support for the 12.7.1 because that is too much work and will be 
only of temporary value.]


Pascal


On 26 Nov 2012, at 23:35, Juan Jose Garcia-Ripoll 
<juanjose.garciarip...@gmail.com> wrote:

> On Mon, Nov 26, 2012 at 7:38 PM, Pascal Costanza <p...@p-cos.net> wrote:
> I don't think the HyperSpec allows for that interpretation. The entry for 
> slot-value is specific that slot-unbound is called when a slot is unbound, 
> and the entry for slot-unbound specifies that the default method signals an 
> error of type unbound-slot. There are no exceptions specified for unsafe 
> code. This is actually important, since the whole slot-unbound and 
> slot-missing protocols can be used to define reasonable semantics, for 
> example to define hash-table-based slots, and user code needs to be able to 
> rely on the correct workings of user-defined extensions here even for unsafe 
> code.
> 
> As I said, this optimization is taking place only for accessors over standard 
> classes. In any case I have deactivated it because again we run into the 
> eternal two problems that cannot be solved without dynamic recompilation:
> 
> 1) users might define methods with the same name over their own classes, even 
> for the accessors that are defined in the CL package.
> 
> 2) as discussed in the pro mailing list, it is a nightmare to determine the 
> actual class of an accessor argument -- the type declaration names only the 
> parent class, but user's subclasses might not fullfil the same contracts as 
> their parents.
> 
> It is really a nightmare trying to introduce any optimization with MOP around.
> 
> Juanjo
> 
> -- 
> Instituto de FĂ­sica Fundamental, CSIC
> c/ Serrano, 113b, Madrid 28006 (Spain) 
> http://juanjose.garciaripoll.googlepages.com

--
Pascal Costanza



------------------------------------------------------------------------------
Keep yourself connected to Go Parallel: 
DESIGN Expert tips on starting your parallel project right.
http://goparallel.sourceforge.net/
_______________________________________________
Ecls-list mailing list
Ecls-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ecls-list

Reply via email to