[Python-Dev] strop vs. string
Sat, 2 Jun 2001 00:40:05 -0700
On Sat, Jun 02, 2001 at 02:34:43AM -0400, Tim Peters wrote:
> > If after
> > b = buffer(some_object)
> > b.__getitem__ needed to refetch the info between
> > b[i]
> > and
> > b[i+1]
> > I expect it would be so slow even Greg wouldn't want it anymore.
> > Huh? I don't think it would be all that slow. It is just a function
> > call. And I don't think that the getitem slot is really used all that
> > frequently (in a loop) for buffer type objects.
> I expect they index into the buffer memory directly then, right? Then for
> buffers obtained from mutable objects, any such loop is unsafe in the
> absence of the GIL, or even in its presence if the loop contains code that
> may call back into Python.
Most access is: fetch ptr/len, index into the memory.
And yes: anything within that loop which could conceivably change the target
object (especially a call into Python) could move that ptr.
I was saying that, at the Python level, using a loop and doing b[i] into a
buffer/string/unicode object would seem to be relatively rare. b and
stuff is reasonably common.
> > I've been thinking that refetching the ptr/len is the right fix.
> So is calling __getitem__ all the time then, unless you want to dance on the
> razor's edge. The idea that you can safely "borrow" memory from a mutable
> object without copying it is brittle.
Stay in C code and don't call into Python. It is safe then. The buffer API
is exactly what you're saying: borrow a memory reference. The concept makes
a lot of things possible that weren't before.
The buffer object's storing of that reference was a mistake.
> > Part of the neglect is also based on Guido's ambivalence. Part is
> > that I haven't needed more from it. The day that I do, then I'll
> > code it up :-) But that doesn't help the "generic" case,
> > unfortunately.
> I take that as "yes" to my "nobody cares about it enough to maintain it?".
> In that light, Guido's ambivalence is indeed surprising <wink>.
Eh? I'll maintain the thing, but you're confusing that with adding more
features into it. Different question.
Greg Stein, http://www.lyra.org/