[Python-3000] PEP 3124 - more commentary

Phillip J. Eby pje at telecommunity.com
Tue May 15 18:25:24 CEST 2007

At 08:32 AM 5/15/2007 -0700, Guido van Rossum wrote:
>Not so good; I expect the overloads could be written by different
>authors or at least at different times. Why can't you dynamically
>update the dispatcher when an overloading with more arguments comes

You mean by changing its __code__?  The code to generate the tuple 
goes in the original function object generated by @abstract or @overloadable.

If we can't specify the count in advance, the remaining choices appear to be:

* Require *args to be annotated :overloadable in order to enable 
dispatching on them, or

* Only enable *args dispatching if the original function has no 
explicit positional arguments

* Mutate the function

Of these, I lean towards the third, but I imagine you'll like one of 
the other two better.  :)

If we don't do one of these things, the performance of functions that 
have *args but don't want to dispatch on them will suffer enormously 
due to the need to loop over *args and create a dynamic-length 
tuple.  (As shown by the performance tests you did on your tuple 
dispatch prototype.)

Conversely, if we mutate the function, then even dispatching over 
*args won't require a loop slowdown; the tuple can *always* be of a 
fixed length.

More information about the Python-3000 mailing list