Method Combinators Conclusion Perfs Alt. MCs CGFs Combinators - - PowerPoint PPT Presentation

method combinators
SMART_READER_LITE
LIVE PREVIEW

Method Combinators Conclusion Perfs Alt. MCs CGFs Combinators - - PowerPoint PPT Presentation

Introduction Didier Verna google+ didier.verna @didierverna lrde/~didier didier@lrde.epita.fr EPITA / LRDE in/didierverna Issues Method Combinators Conclusion Perfs Alt. MCs CGFs Combinators SBCL e ELS 2018 E Introduction Issues


slide-1
SLIDE 1

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Method Combinators

e ELS 2018 E Didier Verna

EPITA / LRDE

didier@lrde.epita.fr

lrde/~didier @didierverna didier.verna google+ in/didierverna

slide-2
SLIDE 2

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Introduction

◮ CLOS improvements over mainstream object systems

◮ Multiple dispatch

Increased SOC: polymorphism / inheritance

◮ MOP

Homogeneous behavioral refmection

◮ Method combinations

Increased SOC: methods / dispatch

◮ Standardization drawbacks

◮ Method combinations underspecifjed

Considered not mature enough

◮ MOP only a later addition

Unclear or contradictory protocols

Method Combinators / ELS 2018 – Didier Verna 2/27

slide-3
SLIDE 3

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Plan

Method Combinations Issues The Case of SBCL Method Combinators Combined Generic Functions Alternative Combinators Performance

Method Combinators / ELS 2018 – Didier Verna 3/27

slide-4
SLIDE 4

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Plan

Method Combinations Issues The Case of SBCL Method Combinators Combined Generic Functions Alternative Combinators Performance

Method Combinators / ELS 2018 – Didier Verna 4/27

slide-5
SLIDE 5

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Orthogonality

Short combination example

(defgeneric details (human) (:method-combination append :most-specific-last) (:method append ((human human)) ...) (:method append ((employee employee)) ...))

◮ Problems

◮ Method qualifjcation required

Combination change impractical

◮ Except for the option

Inconsistent

◮ No :before or :after methods

No good reason

◮ Workaround: long method combinations

Method Combinators / ELS 2018 – Didier Verna 5/27

slide-6
SLIDE 6

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Structure

System classes

method-combination <unspecifjed> Abstract

◮ Portable specialization impossible

At least one implementation-specifjc (sub)class

◮ Unclear nature (classes vs. instances)

Mix of defjne / call-time parametrization

Method Combinators / ELS 2018 – Didier Verna 6/27

slide-7
SLIDE 7

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Protocols

Lookup (MOP)

find-method-combination gf name options

◮ “called to determine the combination object used by a

generic function”

◮ What are name and options for? ◮ Error behavior? ◮ There already is generic-function-method-combination Method Combinators / ELS 2018 – Didier Verna 7/27

slide-8
SLIDE 8

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Protocols (cont.)

Generic function invocation protocol (MOP)

compute-effective-method gf combination methods

◮ What is combination for? ◮ Caching policy unspecifjed

Contrary to applicable methods

Method Combinators / ELS 2018 – Didier Verna 8/27

slide-9
SLIDE 9

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Plan

Method Combinations Issues The Case of SBCL Method Combinators Combined Generic Functions Alternative Combinators Performance

Method Combinators / ELS 2018 – Didier Verna 9/27

slide-10
SLIDE 10

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Classes

Method combination classes hierarchy

standard-method-combination type-name

  • ptions

short-method-combination

  • perator

identity-with-one-argument long-method-combination function args-lambda-list ◮ options: use-time (:method-combination options) ◮ Below: defjne-time

Method Combinators / ELS 2018 – Didier Verna 10/27

slide-11
SLIDE 11

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Short Method Combinations

Creation

(define-method-combination name option*) (find-method-combination / / / gf (eql name) options) short combination object

◮ No global namespace

◮ One method combination object per generic function ◮ Redefjnitions don’t afgect existing generic functions

◮ find-method-combination = the expected or the specifjed

Method Combinators / ELS 2018 – Didier Verna 11/27

slide-12
SLIDE 12

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Long Method Combinations

Long method combination functions

*long-method-combination-functions* long-method-combination function args-lambda-list

◮ Similar behavior, one additional oddity

◮ Local method combination objects ◮ Global method combination functions Method Combinators / ELS 2018 – Didier Verna 12/27

slide-13
SLIDE 13

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Long Method Combinations (cont.)

Code

(define-method-combination my-progn () ((primary () :order :most-specific-first :required t)) `(progn ,@(mapcar (lambda (method) `(call-method ,method)) primary))) (defgeneric test (i) (:method-combination my-progn) (:method ((i number)) (print 'number)) (:method ((i fixnum)) (print 'fixnum)))

REPL

CL-USER> (test 1) FIXNUM NUMBER

Method Combinators / ELS 2018 – Didier Verna 13/27

slide-14
SLIDE 14

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Long Method Combinations (cont.)

Code

(define-method-combination my-progn () ((primary () :order :most-specific-last :required t)) `(progn ,@(mapcar (lambda (method) `(call-method ,method)) primary))) .

REPL

CL-USER> (test 1) FIXNUM NUMBER

Method Combinators / ELS 2018 – Didier Verna 13/27

slide-15
SLIDE 15

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Long Method Combinations (cont.)

Code

(defmethod test ((i float)) (print 'float)) .

REPL

CL-USER> (test 1.5) CL-USER> (test 1) NUMBER FIXNUM FLOAT NUMBER

Method Combinators / ELS 2018 – Didier Verna 13/27

slide-16
SLIDE 16

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Plan

Method Combinations Issues The Case of SBCL Method Combinators Combined Generic Functions Alternative Combinators Performance

Method Combinators / ELS 2018 – Didier Verna 14/27

slide-17
SLIDE 17

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Overview

Classes

method-combinator-mixin clients short-method-combination long-method-combination short-method-combinator long-method-combinator

◮ Stored in a global hash table ◮ [setf] find-method-combinator

Method Combinators / ELS 2018 – Didier Verna 15/27

slide-18
SLIDE 18

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Protocols

In 3 layers

define-[short|long]-method-combinator ensure-[short|long]-method-combinator ensure-[short|long]-method-combinator-using-class

Method Combinators / ELS 2018 – Didier Verna 16/27

slide-19
SLIDE 19

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Implementation (layer 3)

In 4 steps

defjne a regular combination retrieve it (find-method-combination) make it combinator (change-class) store it (setf find-method-combinator)

◮ Note: regular combination injection

Method Combinators / ELS 2018 – Didier Verna 17/27

slide-20
SLIDE 20

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Plan

Method Combinations Issues The Case of SBCL Method Combinators Combined Generic Functions Alternative Combinators Performance

Method Combinators / ELS 2018 – Didier Verna 18/27

slide-21
SLIDE 21

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Overview

Classes

standard-generic-function funcallable-standard-class combined-generic-function functions «instanceof»

Wrappers

(defcombined cgf (args...) (:method-combinator mc) ...)

Method Combinators / ELS 2018 – Didier Verna 19/27

slide-22
SLIDE 22

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Method Combinator Management

◮ Initialization

(defmethod find-method-combination (cgf-class-prototype ...) (find-method-combinator ...))

◮ Sanitation

(defmethod find-method-combination (cgf ...) (method-combinator cfg) #|or mismatch error|#)

◮ Updating

(change-method-combinator cgf method-combinator)

Method Combinators / ELS 2018 – Didier Verna 20/27

slide-23
SLIDE 23

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Client Maintenance

method-combinator-mixin clients cgf cgf cgf ◮ Client registration:

([re]initialize-instance cgf ...)

◮ Client updating:

(reinitialize-instance mc ...) (u-i-f-d-c mc ...)

New protocol

make-clients-obsolete update-combined-generic-function-for-redefined-method-combinator

Method Combinators / ELS 2018 – Didier Verna 21/27

slide-24
SLIDE 24

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Plan

Method Combinations Issues The Case of SBCL Method Combinators Combined Generic Functions Alternative Combinators Performance

Method Combinators / ELS 2018 – Didier Verna 22/27

slide-25
SLIDE 25

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Overview

◮ Idea: generic functions / combinators complete decoupling ◮ Use: = logical method combinations, selected methods etc. ◮ Note: already possible, but extremely costly

◮ 2 calls to reinitialize-instance

Protocols

(call-with-combinator (find-method-combinator 'combinator) #'func arg1 arg2 ...) (call/cb combinator func arg1 arg2 ...) #!combinator(func arg1 arg2 ...)

Method Combinators / ELS 2018 – Didier Verna 23/27

slide-26
SLIDE 26

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Optimization

combined-generic-function functions df df df ◮ Discriminating functions caches ◮ Client maintenance aware of them ◮ Cost

◮ First alternative call: as before ◮ Next: 1 or 2 hashtable lookups

◮ Warning: discriminating functions must close over all caches!

Method Combinators / ELS 2018 – Didier Verna 24/27

slide-27
SLIDE 27

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Plan

Method Combinations Issues The Case of SBCL Method Combinators Combined Generic Functions Alternative Combinators Performance

Method Combinators / ELS 2018 – Didier Verna 25/27

slide-28
SLIDE 28

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Performance

1 2 3 4 5 6 Numeric (10e8 iterations) I/O (10e7 iterations) (seconds) std :std + :+

  • alt. :+

std :std progn :progn

  • alt. :progn

Method Combinators / ELS 2018 – Didier Verna 26/27

slide-29
SLIDE 29

Introduction Issues SBCL Combinators CGFs

  • Alt. MCs

Perfs Conclusion

Conclusion / Perspectives

◮ Conclusion

◮ Method combinations are powerful yet underspecifjed ◮ Method combinators improve their consistency ◮ Code available on GitHub

◮ Perspectives

◮ Refjne / properly package implementation ◮ Port to other compilers ◮ Experiment with “fmoating” fmoating methods Method Combinators / ELS 2018 – Didier Verna 27/27