[TYPES] Declarative vs imperative
Uday S Reddy
u.s.reddy at cs.bham.ac.uk
Wed Apr 24 07:16:19 EDT 2013
Robbert Krebbers writes:
> Let me then notice that in the case of C, it is worse than just
> non-determinism.
I do not believe that "non-determinism" is the right take on it. C was
designed to be a deterministic programming language, at least in its
sequential programming fragment, but various aspects of behaviour are left
"undefined" or "unspecified". So, the programmer is required to avoid all
the undefined/unspecified aspects of behaviour. Any apparent
non-determinism in a C program constitutes a programming bug.
For people that think that a compiler determines the language rather than
the language definition, this might come as a huge shock. That is
precisely how I intended it to be.
> There are also so called sequence point violations,
> which happen if you modify an object more than once (or read after
> you've modified it) in between two sequence points. For example
>
> int x = 0;
> int main() {
> printf("%d ", (x = 3) + (x = 4));
> printf("%d\n", x);
> return 0;
> }
>
> not just randomly prints "7 3" or "7 4", but instead gives rise to
> undefined behavior, and could print arbitrary nonsense.
So, when the C definition tells you that "x = 3" is an "expression" rather
than a "statement", it is a huge lie. Expressions are not supposed to
change the state, despite the fact that a lot of library functions of C do
precisely that.
Those of us that stopped teaching C in our undergraduate curricula did so
for very good reasons.
Cheers,
Uday
More information about the Types-list
mailing list