21
Generic functions in Simon Belak [email protected] EuroPython 2006

Generic functions in TurboGears

  • View
    653

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Generic functions in TurboGears

Generic functions in

Simon [email protected]

EuroPython 2006

Page 2: Generic functions in TurboGears

Generic functions in TurboGears 2

What those not attending will miss

• Overview of generic functions• Practical examples in TurboGears• Generic functions from a framework

designer’s point of view

Page 3: Generic functions in TurboGears

A strange beast by the name of generic function

Page 4: Generic functions in TurboGears

Generic functions in TurboGears 4

Generalisation of message passing

• Problem: a set of abstractly the same, practically different functions

• Solution: choose based on context(e.g. arguments)

Page 5: Generic functions in TurboGears

Generic functions in TurboGears 5

All for one, not one for all

• Single dispatch Python, Java

• Multiple dispatch– Type based

CLOS, PyPy, Python 3000?– Identity based

CLOS– Predicate based

Cecil, Mathematica, RuleDispatch

Page 6: Generic functions in TurboGears

Generic functions in TurboGears 6

Pick me, pick me!

• Relation more specific• Arbitrary dispatch strategies

Page 7: Generic functions in TurboGears

Generic functions in TurboGears 7

Combine and Conquer

• Where is my super?– method chaining (dispatch strategy applies)

• How is this better than sliced bread?– before (all applicable)– after (dispatch strategy applies)– around (all applicable)

Page 8: Generic functions in TurboGears

Generic functions in TurboGears 8

Something is rotten in the package of RuleDispatch

• Limited introspection• Magic• Scarce documentation• Cryptic errors• Once a generic function, always a generic

function

Page 9: Generic functions in TurboGears

Generic functions in TurboGears 9

Call now and get all these wonderful buzzwords free of charge

• DRY• Ad-hoc event/plug-in system• End-user framework extensions• Data driven

Page 10: Generic functions in TurboGears

Shifting to TurboGears

Page 11: Generic functions in TurboGears

Generic functions in TurboGears 11

Use-case #1: JSON for everyone

• Data driven• End-user framework extension

Page 12: Generic functions in TurboGears

Generic functions in TurboGears 12

Use-case #2: errors bring joy to my heart

• Data driven• Ad-hoc event system• DRY (user and framework)

Page 13: Generic functions in TurboGears

Generic functions in TurboGears 13

Use-case #3: not all see me equally exposed

• Data driven• DRY

Page 14: Generic functions in TurboGears

A word to the wise

Page 15: Generic functions in TurboGears

Generic functions in TurboGears 15

RuleDispatch pitfalls

• Compile on definition (lexical scoping)• Constant folding

– Solution:

• Limited inference

Page 16: Generic functions in TurboGears

Generic functions in TurboGears 16

Hide but do not lock away

• Rule generation– Hides underlying complexity– Users need not know: solve the most common

case implicitly• Registrator pattern

– Adjust the scope • Always leave an out

Page 17: Generic functions in TurboGears

Generic functions in TurboGears 17

The user takes precedence

• Custom dispatch strategies

Page 18: Generic functions in TurboGears

Generic functions in TurboGears 18

Many words, few lines

Page 19: Generic functions in TurboGears

Generic functions in TurboGears 19

The future is bright, the future is generic

• PEAK-Rules• Python 3000?

Page 20: Generic functions in TurboGears

Questions?

Page 21: Generic functions in TurboGears

Generic functions in TurboGears 21

References• peak.telecommunity.com/DevCenter/CombiningResults• www.gigamonkeys.com/book/object-reorientation-generic-functions.html• www.python.org/pycon/2005/papers/53/img0.html• www.artima.com/weblogs/viewpost.jsp?thread=155123• codespeak.net/pypy/dist/pypy/doc/theory.html#multimethods• http://citeseer.ist.psu.edu/ernst98predicate.html• http://citeseer.ist.psu.edu/chambers99efficient.html