Short list with things to finish for D2

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Nov 19 11:16:42 PST 2009


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



More information about the Digitalmars-d mailing list