Short list with things to finish for D2

Justin Johansson no at spam.com
Thu Nov 19 13:51:54 PST 2009


aarti_pl wrote:
> Andrei Alexandrescu pisze:
>> aarti_pl wrote:
>>> aarti_pl pisze:
>>>> Andrei Alexandrescu pisze:
>>>>> 2. User-defined operators must be revamped. Fortunately Don already 
>>>>> put in an important piece of functionality (opDollar). What we're 
>>>>> looking at is a two-pronged attack motivated by Don's proposal:
>>>>>
>>>>> http://prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP7
>>>>>
>>>>> The two prongs are:
>>>>>
>>>>> * Encode operators by compile-time strings. For example, instead of 
>>>>> the plethora of opAdd, opMul, ..., we'd have this:
>>>>>
>>>>> T opBinary(string op)(T rhs) { ... }
>>>>>
>>>>> The string is "+", "*", etc. We need to design what happens with 
>>>>> read-modify-write operators like "+=" (should they be dispatch to a 
>>>>> different function? etc.) and also what happens with 
>>>>> index-and-modify operators like "[]=", "[]+=" etc. Should we go 
>>>>> with proxies? Absorb them in opBinary? Define another dedicated 
>>>>> method? etc.
>>>>>
>>>>> * Loop fusion that generalizes array-wise operations. This idea of 
>>>>> Walter is, I think, very good because it generalizes and 
>>>>> democratizes "magic". The idea is that, if you do
>>>>>
>>>>> a = b + c;
>>>>>
>>>>> and b + c does not make sense but b and c are ranges for which 
>>>>> a.front = b.front + c.front does make sense, to automatically add 
>>>>> the iteration paraphernalia.
>>>>>
>>> (..)
>>>>> Andrei
>>>>
>>>> I kinda like this proposal. But I would rather call template like 
>>>> below:
>>>>
>>>> T opInfix(string op)(T rhs) { ... }
>>>> T opPrefix(string op)(T rhs) { ... }
>>>> T opPostfix(string op)(T rhs) { ... }
>>>>
>>>> and allow user to define her own operators (though it doesn't have 
>>>> to be done now).
>>>>
>>>> I know that quite a few people here doesn't like to allow users to 
>>>> define their own operators, because it might obfuscate code. But it 
>>>> doesn't have to be like this. Someone here already mentioned here 
>>>> that it is not real problem for programs in C++. Good libraries 
>>>> don't abuse this functionality.
>>>>
>>>> User defined operators would allow easy definition of Domain 
>>>> Specific Languages in D. I was already writing about it some time ago:
>>>>
>>>> http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=81026 
>>>>
>>>> http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=81352 
>>>>
>>>>
>>>> BR
>>>> Marcin Kuszczak
>>>> (aarti_pl)
>>>
>>> Of course for opPrefix/opPostfix signatures will be different:
>>> T opPrefix(string op)() { ... }
>>> T opPostfix(string op)() { ... }
>>>
>>> Sorry for mistake.
>>>
>>> BR
>>> Marcin Kuszczak
>>> (aarti_pl)
>>
>> I think we'll solve postfix "++" without requiring the user to define 
>> it. Do you envision user-defined postfix operators?
>>
>> Andrei
> 
> Well, maybe something like below:
> 
> auto a = 2²;  //(quadratic power of 2)
> auto a = 5!;  //factorial of 5
> auto a = 2Ƴ + 3ɛ; //solving equations
> auto weight = 5kg; //units of measurement
> 
> The point is that this covers whole scope of operators. In fact even 
> built-in operators could be defined using it.
> 
> Postfix operator ++ can be defined using prefix operator++ just by 
> delegation and this can be default.
> 
> Best Regards
> Marcin Kuszczak
> (aarti_pl)

Marcin demonstrates a valid point.

If there is going to be this feature creep, the feature should be 
complete with all the usual variants of operator arity and notation 
(i.e. prefix/postfix/infix).  Otherwise it really it's only two-thirds 
baked.

-- Justin Johansson



More information about the Digitalmars-d mailing list