[pypy-dev] Builtin types

Thomas Heller theller at python.net
Mon Jan 27 21:56:12 CET 2003


Armin Rigo <arigo at tunes.org> writes:

> > def binary_add(o1,o2): ...
> > 
> > (From my experience) a relevant issue is how to abstract over the PyTypeObject
> > struct  and the interpreter internal inheritance and lookup mechanisms (which
> > do not correspond so directly to the language level semantics).
> 
> That's a point I would like to see discussed too.  CPython has grown a quite
> complex set of routines to dispatch calls corresponding to the language
> operators.  We could closely follow these algorithms, e.g. by translating
> PyNumber_Add() into a "number_add()" function testing the presence of the
> "nb_add" method on the arguments.  This will be as messy as in CPython, but
> automatically gives exactly the same semantics.
> 
> On the other hand, this dispatchers are heavily loaded with historical stuff
> and workarounds and could probably be better summarized in a higher-level
> implementation, taking into account the general direction that Python seems to
> evolve to.  We could probably design something that still offers
> compatibility.  For example, we might find out a general rule of
> multiple-dispatching that corresponds to what CPython conceptually does.  In
> other words we could figure out a declarative way of saying which "nb_add"
> methods must be tried and in which order.  Something that would find the set
> of all appliable "nb_add" methods, order them, and try them in that order
> until one of them succeeds.
> 
> This is complicated by internal coercions (the nb_coerce method), which tend
> to disappear from Python.  We will have to choose whether we keep it in the
> core, at the possible expense of conceptuality, or if we completely drop them
> from the core classes

I would very much like to see aa easy to read and understand core
which is free of this cruft (even if it is not 100% compatible with
CPython).

>  (and possibly re-implement them later, e.g. using
> wrapper classes around the so-called old-style-numbers classes).

Even better if this would be possible.

Maybe later we can remove the wrapper classes and call the result
Python 3000 ;-).  No, only joking...

Thomas



More information about the Pypy-dev mailing list