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

Reply via email to