Developing a plan for D2.0: Getting everything on the table
Robert Jacques
sandford at jhu.edu
Tue Jul 14 18:56:15 PDT 2009
On Tue, 14 Jul 2009 12:42:56 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> Don wrote:
>> - Operator overloading. "completely redone" (?)
>
> I think they should be redone. There are several issues:
>
> 1. Currently there's no provision for "expr1[expr2] @= expr3", where @
> is some binary operator. The opIndexAssign is more like the token
> presence that makes the absence felt even better. Scaling to
> opIndexAddAssign etc. seems to be overkill.
>
> 2. Operators @= are dubious for classes because a class can't define "a
> @= b" to mean the same as "a = a @ b". (I recall you were the first to
> note that.) I'd venture to think that many arithmetic operators don't
> make much sense for classes to start with.
>
> 3. There are types for which ++ or -- make sense but addition does not
> (e.g. STL-style iterators).
>
> 4. opXxx_r and opXxx can easily be ambiguous, as you noted in a recent
> thread. (I think that could be fixed with other means though.)
>
> 5. Defining operators asks for code duplication. Usually people want to
> define all arithmetic operators to forward to some member. That is
> unnecessarily verbose (see e.g. the implementation of std.variant which
> makes heroic efforts to counter that).
>
> Any other issues? (I feel I forgot a couple.) Maybe we can fix all of
> these by patching the existing system.
I slicing and indexing need to be unified, as its common with
multi-dimensional data to slice one dimension and index another. Consider
slicing the first row of a matrix:
auto row0 = m[0,0..$];
(Also a multi-dimensional opDollar ->i.e. opDollar(size_t D){}, is needed)
More information about the Digitalmars-d
mailing list