Le 25/09/2012 21:24, bearophile a écrit :
deadalnix:

bool b; // Defined elsewhere.
string s = "somestring" ~ b?"":"somemorestring";

bool => char implicit conversion is not commonly useful in programs, but
I think it's also not a common bug.


Thi sis reversed logic. bool => char have know drawback. So it must bring something at least as important as the drawback (whatever how small it is) involved.

I also wanted to discuss this subject specifically because it was a surprise to me and to other people on IRC. So I guess this feature is counter intuitive and contradict the rule that state that thing should work the way you expect them to work.

I also already knew that ?: were sometime confusing. However, I skipped on that because I was sure (and wrong) that a type error would be triggered.

It is a surprising behavior, so something you want to avoid as much as possible when creating a programing language.

On the other hand in past we have discussed a little about the bug-prone
precedence of the ?: operator. Analysis of shared code repositories
shows that this is a common source of bugs. So I think avoiding this bug
has higher priority (and it's enough to avoid your specific bug).

One of the ideas for D was that when the ?: is included in a larger
expression, to requires parentheses around it.

auto x1 = y1 ? z1 : w1; // OK
auto x2 = x0 + (y1 ? z1 : w1); // OK
auto x3 = (x0 + y1) ? z1 : w1); // OK
auto x4 = x0 + y1 ? z1 : w1; // error
auto x5 = y1 ? z1 : (y2 ? z2 : w2); // OK
auto x6 = y1 ? z1 : y2 ? z2 : w2; // error

In theory this increases the number of parentheses a little, but in
practice in many similar situations I already put those parentheses, for
readability and to avoid some of my mistakes.

Bye,
bearophile

This would solve my particular bug, and I think it is a good thing to make this clearer.

Reply via email to