Augument assignment versus regular assignment
Antoon Pardon
apardon at forel.vub.ac.be
Tue Jul 18 05:43:05 EDT 2006
On 2006-07-17, Terry Reedy <tjreedy at udel.edu> wrote:
> "Antoon Pardon" <apardon at forel.vub.ac.be> wrote in message
> news:slrnebmhkp.tg1.apardon at rcpc42.vub.ac.be...
>> On 2006-07-15, Terry Reedy <tjreedy at udel.edu> wrote:
>>> The problem with understanding augmented assignment is that it directs
>>> the
>>> compiler and interpreter to do one or maybe two mostly invisible
>>> optimizations. To me, the effective meaning of 'evalutating once versus
>>> twice' is most easily seen in the byte code generated by what is,
>>> remember,
>>> the reference implementation. What it does is what the
>>> less-than-super-clear doc means.
>>
>> But what does one do, if the question is raised whether or not the
>> code generated actually behaves as described by the language reference?
>
> One can just as well ask whether or not the docs actually describe the
> behavior of the interpreter ;-). In this case, not as well as one might
> like. Or, whether docs (and reasonable interpretation thereof) and
> implementation match, which I claim they do it this case.
Well this dispute seems to boil down what is and what is not
involved in evaluating a target, and I have come to doubt that
target evaluation is even a meaningfull concept in python, so
maybe in order that I can understand how you come to that claim,
can you explain what a target evaluates to? So in a statement like
col['t'] = exp
What is the evaluation of col['t']?
>> Shouldn't the language reference be clear enough to be understandable
>> without the help of byte code generated by the reference implementation?
>
> Normally, code experiments, such as you attempted, should be enough. But,
> as I said, trying to document mostly invisibly behavior is more difficult.
> Based on looking at the byte code, I would put it this way: the difference
> between assignment with duplicated source and target expressions and
> augmented assigment with the same expression is that the interpreter
> eliminates as much duplicate calculation as possible. But precisely what
> that mean seems a bit interpreter dependent to me.
>
> Should we expect a reference writen in (ambiguous) natural language to be
> unambiguously clear? I think not; that is why formal grammers and
> notations were invented. I learned Python with the doc in one window and
> the interactive interpreter in another.
But there seems to be no formal system used for explaning the behaviour.
So I think one should take extra care in the language reference to
write in a way that is as clear as possible. IMO there is room for
improvement in the augmented assignment part. That is why I proposed
that the language reference would state that the primary of the
target would be evaluated only once, along with the index/key or slice.
Such wording avoids the notion of a target evaluation, which seems
trouble some and explains what kind of optimisations can be expected.
--
Antoon Pardon
More information about the Python-list
mailing list