[Ecls-list] MOP status
Juan Jose Garcia-Ripoll
juanjose.garciaripoll at googlemail.com
Tue Apr 24 22:20:39 UTC 2012
The following list is based on a similar one in closer-to-mop, explaining
the problems in ECL which are solved by that library. It clarifies the
status of MOP-compliance as of today -- very few things remain to be fixed,
but a lot of testing is still required.
Fixed in git/CVS
- The functions ADD-DIRECT-METHOD and REMOVE-DIRECT-METHOD don't exist,
and thus are also not called.
- ADD-METHOD doesn't call FIND-METHOD or REMOVE-METHOD to remove
potentially replaced methods, but uses some internal implementation instead.
- SPECIALIZER-DIRECT-GENERIC-FUNCTIONS and SPECIALIZER-DIRECT-METHODS
don't exist, and thus are also not updated by ADD-METHOD and REMOVE-METHOD.
- VALIDATE-SUPERCLASS doesn't exist, and thus isn't called to determine
whether two classes in a direct superclass relationship have compatible
- COMPUTE-APPLICABLE-METHODS and COMPUTE-EFFECTIVE-METHOD are not
- COMPUTE-APPLICABLE-METHODS-USING-CLASSES doesn't exist.
- DEFMETHOD doesn't call GENERIC-FUNCTION-METHOD-CLASS or
- The dependent protocols for classes and generic functions are not
- EQL-SPECIALIZER, EQL-SPECIALIZER-OBJECT and INTERN-EQL-SPECIALIZER
don't exist. In ECL, eql specializers are lists not objects. I have
provided EQL-SPECIALIZER as a type (not as a class) and
EQL-SPECIALIZER-OBJECT and INTERN-EQL-SPECIALIZER to work on lists, and a
class EQL-SPECIALIZER* and corresponding EQL-SPECIALIZER-OBJECT* and
INTERN-EQL-SPECILAIZER* to soften the incompatibilities.
- EXTRACT-LAMBDA-LIST and EXTRACT-SPECIALIZER-NAMES don't exist.
- FIND-METHOD and REMOVE-METHOD are not generic functions.
- The function invocation protocol doesn't call
COMPUTE-APPLICABLE-METHODS, COMPUTE-APPLICABLE-METHODS-USING-CLASSES, and
- GENERIC-FUNCTION-DECLARATIONS doesn't exist.
- Generic functions cannot be empty when called.
- MAKE-METHOD-LAMBDA doesn't exist.
- The class METAOBJECT doesn't exist.
- The class SPECIALIZER doesn't exist.
- Method functions don't take parameters as specified in AMOP, but
instead just the parameters that the generic function receives.
- Method metaobjects are not initialized with :DOCUMENTATION.
- (SETF CLASS-NAME) and (SETF GENERIC-FUNCTION-NAME) are not implemented
by way of calling REINITIALIZE-INSTANCE.
To be fixed
- ADD-METHOD, REMOVE-METHOD, INITIALIZE-INSTANCE and
REINITIALIZE-INSTANCE do not determine a new discriminating function.
- Class initialization doesn't call READER-METHOD-CLASS and
WRITER-METHOD-CLASS for accessor methods. However, ECL merely delays
invocation of those two functions until a class is finalized, so this
shouldn't be a problem in practice.
- Class reinitialization does not remove direct subclasses that should
- COMPUTE-EFFECTIVE-METHOD returns a function object, not an effective
- DEFGENERIC does not call FIND-METHOD-COMBINATION.
- FIND-METHOD-COMBINATION doesn't exist.
- GENERIC-FUNCTION-METHOD-CLASS is not a generic function.
- Multiple slot options are not passed as lists to
- The automatically created accessor methods in DEFCLASS forms don't
call SLOT-VALUE-USING-CLASS and (SETF SLOT-VALUE-USING-CLASS).
- Subclasses of BUILT-IN-CLASS, CLASS, DIRECT-SLOT-DEFINITION,
FUNCALLABLE-STANDARD-CLASS, SLOT-DEFINITION, STANDARD-ACCESSOR-METHOD,
STANDARD-METHOD, STANDARD-READER-METHOD, STANDARD-SLOT-DEFINITION, and
STANDARD-WRITER-METHOD will inherit slots whose names are exported symbols
and/or accessible in the package common-lisp-user.
Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the ecl-devel