On 12/06/2011 09:37 AM, bearophile wrote:
Don:
Right. But it's hard to come up with high-priority language issues these days. The old
ones have been fixed.<g>.<
There are several things that I'd like to see fixed/improved in D still. In
particular there are two holes from C language that have no place in D, I mean
code like:
x = x++;
Or code like (bar and baz are not pure):
int z = 0;
int foo(int x, int y) { return x + y; }
int bar(int x) { z++; return x * x + z; }
int baz(int x) { z--; return 2 * x + z; }
int main() {
int w = foo(bar(5), baz(3));
return w;
}
See also:
http://en.wikipedia.org/wiki/Sequence_point
I think ',' in parameter lists are already sequence points.
You can't remove all undefined behaviours from D, but they must be reduced and
minimized, because D tries to lead to correct and deterministic programs.
A solution is to define the behaviour in those situations (and pay a bit of
performance in some cases), an alternative is to statically forbid some kinds
of code (and pay a bit of flexibility. C lints essentially forbid code like
x=x++;), or a mix of the two solutions. (Forbidding something is not so bad
because I've seen bad C code that mutates some variables inside a single
expression, and it's code that is not easy to understand and it's not easy to
translate to other languages).
Bye,
bearophile