[Python-checkins] CVS: python/dist/src PLAN.txt,1.11,1.12
Guido van Rossum
gvanrossum@users.sourceforge.net
2001年10月02日 20:01:00 -0700
Update of /cvsroot/python/python/dist/src
In directory usw-pr-cvs1:/tmp/cvs-serv18044
Modified Files:
PLAN.txt
Log Message:
Mark treatment of binary operators for __rop__-before-__op__ as done.
Add more detail about the speed optimizations needed for __dynamic__.
The weak reference solution becomes more attractive...
Index: PLAN.txt
===================================================================
RCS file: /cvsroot/python/python/dist/src/PLAN.txt,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** PLAN.txt 2001年09月28日 18:19:21 1.11
--- PLAN.txt 2001年10月03日 03:00:56 1.12
***************
*** 5,16 ****
-----------
- Treat all binary operators the same way as I just did for rich
- comparison: in a <op> b, if isinstance(b, type(a)), try b.__rop__(a)
- before trying a.__op__(b).
-
Make __dynamic__ the default (this requires more performance work --
one particular test, test_descr.inherits(), is about 10x slower when
! __dynamic__ is 1. :-(
Add __del__ handlers.
--- 5,22 ----
-----------
Make __dynamic__ the default (this requires more performance work --
one particular test, test_descr.inherits(), is about 10x slower when
! __dynamic__ is 1. :-( There are two ways to go about the performance
! work:
!
! a) Add shortcuts to the slot_tp_XXX to recognize a PyWrapperDescr
! with the correct wrap_tp_XXX function.
+ b) Add a list or dict of weak refs to derived classes to each dynamic
+ class, and trap setattr+delattr on the base class so that they
+ update the tp_XXX slot in each derived class when the base class
+ __XXX__ gets set or deleted. More work, but more gain (zero waste
+ in slot_tp_XXX when __XXX__ is not overridden).
+
Add __del__ handlers.
***************
*** 33,36 ****
--- 39,46 ----
Done (mostly)
-------------
+
+ Treat all binary operators the same way as I just did for rich
+ comparison: in a <op> b, if type(a) is not type(b) and isinstance(b,
+ type(a)), try b.__rop__(a) before trying a.__op__(b). *** Done. ***
Fix comparisons. There's some nasty stuff here: when two types are