[Cython] PEP 3135 -- New Super

Stefan Behnel stefan_ml at behnel.de
Tue Jul 5 09:00:49 CEST 2011


Vitja Makarov, 05.07.2011 08:21:
> I was thinking about implementing new super() with no arguments.

Please do :)

If you start working on it, please assign the ticket to you:

http://trac.cython.org/cython_trac/ticket/696


> The problem is where to store __class__, I see two options here:
>
> 1. Add func_class member to CyFunction, this way __class__ will be
> private and not visible for inner functions:
> 2. Put it into closure

The second option has the advantage of requiring the field only when 
super() is used, whereas the first impacts all functions.

I would expect that programs commonly have a lot more functions than 
specifically methods that use a no-argument call to super(), so this may 
make a difference.

OTOH, not all methods have a closure, so creating one just to store the 
"__class__" field is very wasteful, in terms of both runtime and memory 
overhead. A lot more wasteful than paying 8 bytes of memory for each 
function, with no additional time overhead.


> And I don't think that __class__ should be use somewhere outside super()

Agreed. CPython simply uses a compile time heuristic ("is there a function 
call to something global named 'super'?") when creating this field, so it's 
strictly reserved for this use case.

BTW, I like the irony in the fact that CPython essentially gives Cython 
semantics to the "super" builtin here, by (partially) evaluating it at 
compile time.

Stefan


More information about the cython-devel mailing list