Liste des Groupes | Revenir à cl c |
Bart <bc@freeuk.com> wrote:If you've followed the subthread then you will know that nobody disputes that assignment reads from side of '=' and writes to the other.>You seem to miss the point that assigment operator is fundamentally
So what exactly is different about the LHS and RHS here:
>
A = A;
>
(In BLISS, doing the same thing requires 'A = .A' AIUI; while 'A = A' is
also valid, there is a hidden mismatch in indirection levels between
left and right. It is asymmetric while in C it is symmetric, although
seem to disagree on that latter point.)
assymetic.
This is quite visible at low level, where typicalLow level can reveal symmetry too. If 'A' is stored in a register 'Ra', then copying A to itself can be done like this on x64:
machine has 'store' instruction. Store takes address (memory location)
as left argument, but a _value_ as right argument. Your example
introdices fake symmetry, you ealuate right hand side using
a load ant this may look symmetric with store.
But even here
there is asymetry, which is better visible with naive compiler.
You may get code like
compute addres of A
load
compute address of A
store
The last step implement '=', the second 'compute address' corresponds
to A on the left had side. First 'compute address' corresponds to
A on the right hand side. Now you see that beside address computation
there is also load corresponding to A on the right hand side.
So clearly in most languages treatment of sides is assymetric:There is a Load on one operand and a balancing Store on the other. Two loads or two stores would not make sense here.
extra loads are inserted due to 'lvalue convertion'.
To put in more general context: early success of C was relatedAnd /my/ point was that in virtually every HLL, that dereference to turn a variable's address, denoted by its name, into either a read or write access of its value, is implicit.
to exposing address computations, so that programmers could
do optimization by hand (and consequently non-optimizing compiler
could produce reasonably fast object code). This has a cost:
need for explicit point dereferences not needed in other langiages.
Bliss went slightly further and requires explicit derefernces
to get values of variables. My point is that this is logical
regardless if you like it or not.
Les messages affichés proviennent d'usenet.