Interesting rant about Scala's issues

Ben Boeckel mathstuf at gmail.com
Fri Apr 4 11:57:24 PDT 2014


On Fri, Apr 04, 2014 at 11:02:01 -0700, Walter Bright wrote:
> Most of the casts in Warp come from the workarounds I had to do to
> get around the auto-decode of std.array.front(). I have designed
> byChar, byWchar and byDchar ranges for Phobos to get around this
> issue, but that is stalled now because of the messed up design of
> ranges.

Sorry, I'm a D noob; what's 'auto-decode'?

> Here's one:
> 
>   enum Index { A, B, C }
>   T[Index.max] array; // Error: Index.max is not an int
>   ...
>   array[B] = t;   // Error: B is not an int

Maybe instead of having array indices be int, having them specify some
interface (akin to Ix[1] used by Haskell's Array). Not that this is
likely fixable at this point.

> And another:
> 
>   array[A + 1] = t; // Error: incompatible types Index and int
> 
> And another:
> 
>   enum Mask { A=1,B=4 }
> 
>   Mask m = A | B;   // Error: incompatible operator | for enum

I like Qt's Q_FLAG and Q_FLAGS where you have a separate type for the
flags and combined flags. Maybe something like:

    enum MaskBits { mixin EnumBits!MaskBits; A=1, B=4 }
    alias Flags!MaskBits Mask;

where EnumBits would define the binary operations would be possible?

> And besides, even if such strongly typed enums were a good idea,
> making such a change would be an utter disaster for existing code. It
> is out of the question.

Agreed.

There's also Haskell's 'newtype' which might be useful to have
(strongalias? strictalias?). I guess this is no different than something
like:

    class NewType(T) {
        private:
            T store;

            public this(T store) {
                this.store = store;
            }

            package T unT() {
                return store;
            }
    }

and if you want unT to be public:

    public T unT(NewType!T nt) {
        return nt.unT();
    }

--Ben

[1]http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Ix.html


More information about the Digitalmars-d-announce mailing list