On 11/13/17 8:01 PM, Michael V. Franklin wrote:
On Saturday, 11 November 2017 at 23:30:18 UTC, Andrei Alexandrescu wrote:
A DIP is necessary for all language changes. In this case a short and
well-argued DIP seems to be the ticket. Walter and I spoke and such a
proposal has a good chance to be successful.
Subject issues:
https://issues.dlang.org/show_bug.cgi?id=9999
https://issues.dlang.org/show_bug.cgi?id=10560
Spec in question:
https://dlang.org/spec/type.html#bool
DIP:
https://github.com/dlang/DIPs/pull/99
I need some feedback from the community before I move forward with the
DIP. I'm torn between a few ideas and not sure how to proceed.
1. Deprecate implicit conversion of integer literals to bool
2. Allow implicit conversion of integer literals to bool if a function
is not overloaded, but disallow it if the function is overloaded.
3. Change the overload resolution rules as illustrated in
https://github.com/dlang/dmd/pull/1942
If I had to choose one I would go with 1, simply because the implicit
conversion is janky and circumvents the type system for a mild-at-best
convenience. But, it will cause breakage that needs to be managed.
2 would solve the issues in question, but keep breakage at a minimum,
and would probably be preferred if users wish to maintain the status
quo. Disadvantage is it's a special case to document, consider, and
explain.
3 is similar to 2, and like 2, is a special case.
I don't even really have a dog in this fight, but the demonstration of
the problem in the bugzilla issues is simply embarrassing, and I'm tired
of seeing issues languish for so long in bugzilla without any resolution.
Is there any general consensus in the community on this issue so I can
be sure I'm fulfilling the community's preference?
My vote would be for 1. It's disruptive, but not that disruptive.
I almost always initialize a bool with true or false, not with 1 or 0.
The array handling is probably the only part that would be painful. but
we could handle that the same way we deprecated octal numbers:
bools!"01001101"; => [false, true, false, false, true, true, false, true];
-Steve