[Python-Dev] PEP 203 Augmented Assignment
Michael Hudson
mwh21@cam.ac.uk
25 Jul 2000 22:12:17 +0100
Thomas Wouters <thomas@xs4all.net> writes:
[opcodes for augmented assignment]
> I now realize only 11 new opcodes are necessary, and it can even be reduced
> to 1, by splitting the operation into seperate LOAD, <operation>, and STORE
> instructions, with a few ROT_TWO and ROT_THREE's mixed in. <operation> could
> be a new bytecode for each operation (11 in total) or a single 'AUGOP'
> bytecode with an argument to specify the operation.
Can you really do
a[b:c] += d
with ROT_THREE & ROT_TWO? I thought one couldn't when I was doing the
first patch, but maybe I'm wrong.
> I think it's less elegant from the bytecode point of view, but it does
> require a lot less changes in ceval/compile. There is only one significant
> difference between the current version and this, and that's behaviour in the
> face of threads.
And size of bytecode!
> I had originally seen augmented assignment as a way to increment a counter
> 'thread-safe': the load and store operation are done in one bytecode, and
> can thus not be interrupted by a thread switch. But after thinking about it,
> it doesn't make that much sense. It only works for builtin types, not for
> classes defining a __op_ab__, and possibly not for extention types. In fact,
> there might be some possibility for a thread switch even in builtin types,
> though I have never looked at that.
>
> Opinions ? Is the semi-reliability in the face of threads a good idea ?
IMHO, yes.
> Did I miss anything important about the current implementation ?
> Should I forget about this idea and keep the patch as it is (and go
> back to my PEP) or should I rewrite the patch and then rewrite the
> PEP ?
For now, I'd just write the PEP.
Cheers,
M.
--
On the other hand, the following areas are subject to boycott
in reaction to the rampant impurity of design or execution, as
determined after a period of study, in no particular order:
... http://www.naggum.no/profile.html