Am 26.08.2011, 13:10 Uhr, schrieb bearophile <bearophileh...@lycos.com>:

Marco Leise:

Is (!x & y) an issue or is it rather people omitting spaces in their code
!x&y ?

This topic was already discussed in past, in two threads, this one of them:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=135741

The Coccinelle tool has found a large number of !x & y bug patterns in already debugged high-quality C/C++ code. Search for "Correct occurrences of !x&y" in this page:
http://coccinelle.lip6.fr/impact_linux.php

See also, a good lint catches this bug:
http://d.puremagic.com/issues/show_bug.cgi?id=5814

And once these lints complain about 1 + 2 * 3 being ambiguous I lose all hope in mankind. But point taken, there is a provably large number of such bugs. In fact they can be narrowed down to 'check if a flag is disabled' as in this example: "if (!(flags & SOME_FLAG))".

It's a common mistake, it causes significant troubles, it's easy to catch, avoiding it is cheap syntax-wise, and there is a precedent similar case already implemented in D.

Ok, I get it.

If in the above case we are forced to write ((!x) & y) that's ... LISP.

Nope, it asks for just one pair of parentheses, like:
!(x & y)
Or:
(!x) & y

I guess "(!x) & y" is a rare case anyway. I though of "if ((!x) && y)". Does your enhancement include other operators like '&&' or is it practically just for the 'check if flag is disabled' case?

At least I'm not convinced by what is in the bug report.

You will have to bring on the table stronger evidence that this an useless change, if you want to refuse the enhancement request 5409. Walter and Don have accepted it, I think. I don't know what Andrei thinks of it.

Bye,
bearophile

Reply via email to