Interesting rant about Scala's issues
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Mon Apr 7 14:02:03 PDT 2014
On 4/6/14, 6:49 PM, Walter Bright wrote:
> On 4/6/2014 4:17 PM, Andrei Alexandrescu wrote:
>> On 4/6/14, 10:52 AM, Walter Bright wrote:
>>> I use enums a lot in D. I find they work very satisfactorily. The way
>>> they work was deliberately designed, not a historical accident.
>>
>> Sorry, I think they ought to have been better. -- Andrei
>
> Sorry, yer wrong!
This program compiles and flag free and no cast in sight but fails at
runtime. Textbook example of unsound type design.
import std.stdio;
enum A { x = 2, y = 4 }
void main()
{
A a = A.x | A.y;
final switch (a)
{
case A.x: break;
case A.y: break;
}
}
The "|" operator converts back to an A. It shouldn't. In this case it
provides a value not only outside the enum range, but even greater than
A.max (when converted to integer).
I'm fine with "yes, it's unsound, but we wanted to do flags and we
couldn't find a better solution", but this "it's deliberate and it's
good" I just find difficult to get behind.
Andrei
More information about the Digitalmars-d-announce
mailing list