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