Brad Roberts:

Out of curiosity, what's your working definition of 'common' here? It seems to be something not far from "I've seen a report of it happening in more than one code base" which is overly broad, imho.

Regarding (!x & y) I have seen studies (done by the Coccinelle devs) that shows how often this erroneous code pattern is present in the already reviewed Linux code. I have seen the same pattern in tens of articles from Viva64 where they apply their static verifier to large amounts (tens of millions, surely) lines of code, where they have spot tens of such bubs in already carefully debugged code.

This pattern:
int r = x op y ? : z : w;

is present in several of those Viva64 reports. This is not a proof that such ?: requires parentheses (those reports just show common problems in already tested and widely used code, they don't suggest language improvements), but it's more than enough to open a discussion.


but there's a line where too much compiler 'help' is just annoying.

I agree, this requires judgement, and there's the risk of overdoing the compiler tests. As an example this thread and article discuss that the "unused imported modules are an error" and "unused variables is an error" rules of Go are too much harsh during code development:

http://ridiculousfish.com/blog/posts/go_bloviations.html
http://www.reddit.com/r/programming/comments/10fvmh/go_bloviations/

On the other hand I think the unused variables warning is useful, because they help keep code clean and avoid some bugs.

Experience shows that in most programs the pattern (!x & y) is a bug, so I think disallowing it is an improvement for D, you will find it not easy to demonstrate the contrary.

Bye,
bearophile

Reply via email to