Hi Armin, hi all

Armin Rigo wrote:
A different comment: as you mentioned on IRC it would be nice if the
back-end could choose which methods it implements natively.  At one
point there was the idea that maybe the 'oopspec' attributes that
started to show up in lltypesystem/rlist.py (used by the JIT only) could
be useful in this respect.  If I remember correctly, the idea didn't
work out because of the different 'lowleveltype' needed, and the
difference in the interface.  Merging the ADT method names of lltyped
lists and the GENERIC_METHODS of ootyped lists could be a step in this
direction again.  The interesting point is that each oo back-end could
then choose to special-case the ll_xxx() functions with the oopspecs
that they recognize, and just translate the other ones normally.  (The
ll back-ends always translate them all.)

I have successfully moved almost all ll_* helpers from rpython/lltypesystem/rlist.py to rpython/rlist.py so that now they are shared between the two typesystems.

For doing that I had to extend the ADT interface of ListRepr to include _ll_resize_ge and _ll_resize_le, as well as to add the same function as _GENERIC_METHODS in ootypesystem.

Now ootypesystem should support the full list's semantic but in a far-from-perfect way: the main issue is that most operations are done by the ll_* helpers, even when there could be a more efficient native equivalent.

I see three main ways of fixing that:

1) further extend the ADT/_GENERIC_METHODS interface to include common operations that could be natively available in OO targets and modify ll_* helpers to use that methods; e.g., we could insert a "remove_range" and let ll_listdelslice & co. using it. This way OO backends could easily forward call to remove_range to the runtime; moreover if the inliner works well there should be no performance penalties for lltypesystem;

2) follow Armin's suggestion to use oopspec for letting backends forwarding to the RTE only what they want;

3) a mixture of 1 and 2.

ciao Anto
_______________________________________________
[email protected]
http://codespeak.net/mailman/listinfo/pypy-dev

Reply via email to