Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
A MOP-Based Implementation for Method
Combinations
e ELS 2023 E
Didier Verna
EPITA / LRDE
didier@lrde.epita.fr
lrde/~didier
@didierverna didier.verna
in/didierverna
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Benets of Method Combinations
Bad: dispatch code mixed up with methods code
Class::method (...);
super.method (...);
(call-next-method ...)
Good: dispatch policy declared separately
(defgeneric func (...)
(:method-combination mc ...) ;; declaration
(:method (...) #| method-specific code only |#)
...)
I
Increased orthogonality / SoC
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 2/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Benets of Meta-Object Protocols
What
I
Expose a language’s implementation
I
For introspection / intercession
How
I
Standard classes available for sub-classing
or modication
I
Standard (generic) functions available for specialization
or modication
I
Homogeneous behavioral reection
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 3/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Except that…
I
method-combination: abstract class
I
define-method-combination: macro
That’s about it…
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 4/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Consequences
I
No portability to be hoped for
At least one implementation-specic sub-class
I
Missing / ill-designed existing protocols
E.g. find-method-combination / compute-effective-method
I
Unclear intended nature
Classes? Instances?
I
Unclear intended implementation
“contains information about both the type of method combination
and the arguments being used with that type”
I
Cf. 2018 paper
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 5/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Plan
Design
Examples
Implementation (Sbcl)
Extensibility
Performance
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 6/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Overview
1. The standard consistently speaks of “method combination types.
I
Method combinations should be reied as types^D^D^Dclasses.
I
Generic functions should instantiate those classes.
2. There are two “forms” of method combinations: short & long.
Note: the PCL hierarchy already reects that.
I
Method combinations “forms” should also be reied as classes.
I
We have two classes of (classes of) method combinations.
Summary
A method combination (class) is:
I
a short / long one (inheritance)
I
of the short / long kind (implementation)
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 7/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Method Combinations Hierarchy
method-combination
standard-method-combination
options
%…
short-method-combination long-method-combination
I
(defgeneric ... (:method-combination mc options) ...)
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 8/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Method Combination Types Hierarchy
method-combination-type
standard-method-combination-type
type-name
lambda-list
%…
short-method-combination-type
operator
identity-with-one-argument
long-method-combination-type
%…
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 9/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Plan
Design
Examples
Implementation (Sbcl)
Extensibility
Performance
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 10/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Example #1
Standard (Standard) Method Combination
standard-method-combination
options
standard-standard-method-combination
type-name: standard
lambda-list: nil
standard-method-combination-type
type-name
lambda-list
«instanceof»
*standard-method-combination*
options: nil
«instanceof»
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 11/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Example #2
Short Method Combinations
standard-method-combination
options
short-method-combination
standard-method-combination-type
type-name
lambda-list
short-method-combination-type
operator
identity-with-one-argument
anonymous
type-name: progn
lambda-list: (&optional (order :most-specific-first))
operator: progn
identity-with-one-argument: t
«instanceof»
mc1
options: nil
«instanceof»
mc2
options: (:most-specific-last)
«instanceof»
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 12/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Plan
Design
Examples
Implementation (Sbcl)
Extensibility
Performance
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 13/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Bootstrap
Early Method Combinations
standard-method-combination
options
short-method-combination
early-short-method-combination
type-name
operator
identity-with-one-argument
early-standard-method-combination
type-name
I
Two “early” method combinations: standard & or
I
Bootstrap uses them
I
Post-bootstrap conversion to the full architecture
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 14/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Protocol Additions
find-method-combination-type (name &optional (errorp t))
"Find a NAMEd method combination type.
If ERRORP (the default), throw an error if no such
method combination type is found.
Otherwise, return NIL."
find-method-combination* (name &optional options (errorp t))
"Find a method combination object for NAME and OPTIONS.
If ERRORP (the default), throw an error if no NAMEd
method combination type is found.
Otherwise, return NIL.
Note that when a NAMEd method combination type exists,
asking for a new set of (conformant) OPTIONS will
always instantiate the combination again, regardless
of the value of ERRORP."
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 15/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Plan
Design
Examples
Implementation (Sbcl)
Extensibility
Performance
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 16/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Sub-Classing Method Combinations (Types)
Short Form
(define-method-combination ...
:method-combination-class name
:method-combination-type-class name) ;; or (name initargs*)
Long Form
(define-method-combination ...
(:method-combination-class name)
(:method-combination-type-class name initargs*))
I
Remains standard-compliant
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 17/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Example: Medium MC Types
standard-method-combination-type
type-name
lambda-list
long-method-combination-type
medium-method-combination-type
operator
identity-with-one-argument
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 18/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Example: Medium MC Types
A macro…
(define-medium-method-combination-type my-progn
:operator progn :identity-with-one-argument t)
which expands to:
(define-method-combination myprogn (&optional (order :most-specific-first))
((around (:around))
(before (:before))
(primary () :order order :required t)
(after (:after)))
(:method-combination-type-class medium-method-combination-type
:operator progn :identity-with-one-argument t)
...)
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 19/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Plan
Design
Examples
Implementation (Sbcl)
Extensibility
Performance
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 20/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Performance
0
0.5
1
1.5
2
2.5
3
3.5
4
Short (10e7 iterations) Long (10e7 iterations)
(seconds)
Original
Fork
1
1
3
3
6
6
1
1
3
3
6
6
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 21/22
Introduction Design Examples Impl.
Ext.
Perfs
Conclusion
Conclusion
I
Method combination types reied
I
Standard-compliant implementation
I
Close to Pcl’s original design
I
Brings portable Mop-based extensibility to method combinations
I
Sbcl fork & examples available on GitHub
I
github/didierverna/sbcl/tree/method-combination-types
I
github/didierverna/els2023-method-combinations
I
A lot more details in the paper…
Thank you!
A MOP-Based Implementation for Method Combinations / ELS 2023 Didier Verna 22/22