[Python-Dev] Silly little benchmark
Tim Peters
tim.one@home.com
Thu, 12 Jul 2001 23:27:32 -0400
[Greg Ewing]
>> Is there still an intention to get rid of centralised
>> coercion and move it all into the relevant methods?
[Guido]
> This has been done (except for complex).
>> If that were done, wouldn't problems like this go
>> away (or at least turn into a different set of
>> problems)?
> I'm not sure what that remark refers to, actually.
>
> BINARY_ADD and BINARY_SUBTRACT just test if both args are ints and
> then in-line the work; BINARY_SUBSCRIPT does the same thing for
> list[int]. I don't think it has anything to do with coercions. When
> the operands are strings, the costs are one pointer deref + compare to
> link-time constant, and one jump (over the inlined code).
It's not BINARY_ADD, it's the PyNumber_Add() called by BINARY_ADD, which,
given two strings, calls binary_op1, which does a few failing tests, then
calls PyNumber_CoerceEx, which fails quickly enough to coerce, and then
pokes around a little looking for number methods, and finally says "hmm!
maybe it's a sequence?".
> Small things add up, but I doubt that this is responsible for any
> particular slow-down.
Jeremy earlier pinned the blame on this for one of the "dramatic" pybench
slowdowns; Skip may or may not have bumped into it again with his "silly
little benchmark" (read the Subject line <wink>). I doubt it's responsible
for significant real-life slowdowns.