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