Short list with things to finish for D2

aarti_pl aarti at interia.pl
Thu Nov 19 12:31:43 PST 2009


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)



More information about the Digitalmars-d mailing list