Timon Gehr:

> The problem is that generated/CTFE'd code might produce that kind of 
> redundancy.

Right.


> Proving that two sub-expressions are equivalent is a hard task.

A simple equivalence is enough here: the code with normalized whitespace. Those 
tools are probably doing something not much complex than this.


> Has anyone ever
> experienced a bug that was hard to find similar to those toy examples? Well, 
> maybe
> if(x||y||z||a||b||x||d){/*do stuff*/}, but who writes such code?

The examples I've shown are present in real code. See the results of the 
Coccinelle project too.


> But if a programmer wants to use it, he has
> to be familiar with its precedence rules (very simple, lower precedence than
> anything but = and ,).

In computer languages there are plenty simple things that are bug-prone.


> I as an excessive user of ?: am very much against it though.

It's not advisable to use the ?: operator a *lot* :-)


> I think requiring parentheses (providing undefined or ambiguous precedence 
> rules)
> is ugly. D has done it before and it seems reasonable to do so, but still 
> ugly.

I don't see better solutions given the D Zen contraints. And in this case 
adding parentheses may be better than doing nothing.
If you have some comments about this bug #1, a good place to add them is here:
http://d.puremagic.com/issues/show_bug.cgi?id=5409


> It also implies that the precedence rules would be a design mistake if not 
> for compatibility with C.

I don't fully understand.


> What property makes them so bug-prone?

I am not sure, but I think it encourages a too much compact code style (and you 
have to be a bit careful with operator precedence too). Probably there is some 
optimum for compactness of C-like code. The sources of the first J interprer is 
surely too much compact, and some C# code I've seen seems not enough compact to 
the point of not allowing an easy read.


> I think they are quite easy to use.

Right, the ?: operator is easy to use.

Thank you for your comments, bye,
bearophile

Reply via email to