Liste des Groupes | Revenir à cl c |
Bart <bc@freeuk.com> writes:In a HLL, a named object (ie. a variable name) is nearly always meant to to refer to an object's value, either its current value or what will be its new value.
On 05/09/2024 16:21, Waldek Hebisch wrote:Maybe it would help if you would stop thinking in terms of the
>Bart <bc@freeuk.com> wrote:>
>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.)
You seem to miss the point that assigment operator is
fundamentally assymetic.
If you've followed the subthread then you will know that nobody
disputes that assignment reads from side of '=' and writes to the
other.
>
The symmetry is to do with syntax when the same term appears on
both sides of '=', the type associated with each side, and,
typically, the internal representations too.
word symmetry (clearly assignment is not symmetrical) and instead
think about consistency.
In C, the meaning of an identifier or object-locating expression
depends on where it is in the syntax tree. In some places it
means the address of the object; in other places it means the
contents of whatever is stored in the object.
Those meaningsIn BLISS both A and .A rvalues apparently have the same type. Both A = A and A = .A are apparently valid, but do different things.
are very different; among other things, they have different
types (if one type is 'int' the other is 'int *').
In Bliss, by contrast, the meaning of an identifier is the same
no matter where it appears in the syntax tree: it always means
the address of the object. The meaning is independent of where
the term appears in the input, which is to say the meaning is
consistent from place to place.
In C the meaning is not consistent - in some places it means theYou can do the same thing in a C compiler: always load the address of any identifier associated with the location of value. Then decide whether anything else needs to be done. The rules a little more elaborate, but then C is a more complicated language.
address, in other places whatever is stored at the address.
Considering the point of view of a compiler writer, it's easier
to write a compiler for Bliss than for C. In Bliss, upon seeing
an identifier, always simply put its address in a register. If
an object's value needs to be loaded, there will be a '.' to take
the address produced by the sub-expression and fetch the word
stored at that address. On the other hand, in C, upon seeing an
identifier, the compiler needs to consider the context of where
the identifier appears:
Les messages affichés proviennent d'usenet.