[Python-3000] PEP 3124 - Overloading, Generic Functions, Interfaces, etc.

Phillip J. Eby pje at telecommunity.com
Mon May 14 18:34:15 CEST 2007

At 08:29 AM 5/14/2007 -0700, Guido van Rossum wrote:
>On 5/14/07, Paul Moore <p.f.moore at gmail.com> wrote:
> > However, it looks like
> > there's a general feeling emerging that snipping certain sections
> > would be enough. I'd agree with that - my personal feeling is that
> > it'd be OK to remove all of the following sections:
> >
> > * "Before" and "After" Methods (as per Steven Bethard's suggestion)
> > * "Around" Methods (as per Steven Bethard's suggestion)
> > * Custom Combinations (as per Steven Bethard's suggestion)
> > * Interfaces and Adaptation (doesn't feel like a core aspect of 
> the proposal)
> > * Aspects (as per Steven Bethard's suggestion)
> > * Extension API (currently empty, and that hasn't hampered the 
> discussions!!)
> >
> > I'd be OK with them going into an additional PEP, but to be honest, it
> > wouldn't bother me to see them left out of the PEP process
> > altogether[1]. (I don't feel that I have enough experience with
> > *using* GFs to comment meaningfully, so I'd be willing to defer to
> > Phillip's judgement here).
>That would suit me fine, since my inclination is to approve some form
>of the basics of the PEP (with reservations I will explain in another
>message) but to reject the second PEP.

FYI, wrt to Paul's list, my own list for the 2nd PEP doesn't include 
interfaces and adaptation; they'd be squarely in the first PEP.

> > [1] But I'd like to see them documented in the final implementation -
> > I'm not suggesting they be undocumented features.
>I'm suggesting they aren't features at all, except for the extension
>API. All the other stuff should be addable in a separate module using
>the extension API.

I don't see what the benefit is of making people implement their own 
versions of @before, @after, and @around, which then won't 
interoperate properly with others' versions of the same thing.  Even 
if we leave in place the MethodList base class (which Before and 
After are subclasses of), one of its limitations is that it can only 
combine methods of the same type.  There's no way for two different 
user-implemented "befores" to merge at the same precedence level, 
without some fairly fancy footwork on the implementer's part, or some 
kind of convention being established as to how to tell whether a 
method intends to be a before or after or whatever.  (And this 
same-precedence merging is critical feature of @before/@after, as 
they are used mainly for "observer"-like hooks, where multiple 
libraries may be observing the same thing.)

So, one of the reasons for including those features (along with 
Aspect) in the stdlib is the standardization part.  Really, 
standardization of a lot of this stuff is the main point to having a 
PEP at all.

By the way, I'm not sure if I mentioned this before, but Ruby 2.0 is 
supposed to include before/after/around qualifiers, except they're 
called pre/post/wrap, and I'm not sure if the combination rules are 
100% the same as my before/after/around.  And they're using Ruby's 
open classes rather than standalone generic functions.  But it's 
another data point.

Note that in current Ruby, you can simulate generic functions 
(single-dispatch only) via open classes as long as you use 
sufficiently-unique method names.  The fact that Matz wants to add 
these qualifiers seems to suggest that simple next-method chaining 
(i.e. super) isn't as expressive as they'd like.  Unfortunately, I 
haven't been able to find an RCR for this feature, only references to 
RubyConf slide presentations, so I don't know what their specific rationale is.

More information about the Python-3000 mailing list