On 29-Mar-2012 03:20, David Brown wrote:
On 29/03/2012 00:52, mathog wrote:

A better solution for the aesthetics would have been (it is a bit late
now) to implement the missing unary negation operator:

!!b; //T->F, F->T


You can't do that, because "!!" is already a useful operator on
integers - it turns anything non-zero into 1 while leaving 0 alone,
and is effectively an "int to bool" conversion operator.

Right, hence the "a bit late now".

(I'm going to use "unary operator" for the rest of this to mean operations like ++, an operator that changes the value of the operand all by itself. There is some other technical term to distinguish that from a unary "-", for instance, but I have long since forgotten what it is.)

I understand we aren't likely to ever see !! as a unary operator because of backwards compatibility issues. Since unary not is an obvious thing to have added to C99 along with bool, my guess is that they couldn't figure a way to squeeze it in without stepping on !!
or something else still needed for backwards compatibility.

This highlights the problem with defining unary operators by repetition of single characters, rather than by using a special symbol to indicate all of the unary operators, something like

  i@+ , i@- instead of i++, i--
  +@i , -@i instead if ++i, --i

and so forth, which would have allowed for unary variants of more operators. Including those not considered at the time the language was first constructed. Here: !@b and b@!, but also for ~, for instance. We are all used to "++" now, but if you think about it "add twice" is not a natural synonym for "increment", whereas <var><unary operator symbol><plus> is.

Anyway, this ship sailed a long, long, long time ago.

Regards,

David Mathog
mat...@caltech.edu
Manager, Sequence Analysis Facility, Biology Division, Caltech

Reply via email to