Interesting rant about Scala's issues

w0rp devw0rp at gmail.com
Mon Apr 7 15:41:29 PDT 2014


On Monday, 7 April 2014 at 21:02:04 UTC, Andrei Alexandrescu 
wrote:
> 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

Yeah, I've seen this happen before. I think we could actually 
introduce a little more type safety on enums without a great deal 
of breakage. It would be nice to have a final switch give you as 
much of a guarantee about what it's doing as it can.


More information about the Digitalmars-d-announce mailing list