equivariant functions

Bruno Medeiros brunodomedeiros+spam at com.gmail
Sat Oct 18 12:02:38 PDT 2008


Andrei Alexandrescu wrote:
> Jason House wrote:
>> Andrei Alexandrescu Wrote:
>>
>>> ore-sama wrote:
>>>> Andrei Alexandrescu Wrote:
>>>>
>>>>> typeof(s) stripl(const(char)[] s);
>>>>>
>>>>> This signature states that it returns the same type as an
>>>>> argument. I propose that that pattern means stripl can accept
>>>>> _any_ subtype of const(char)[] and return that exact type.
>>>>> Inside the function, however, the type of s is the type
>>>>> declared, thus restricting its use.
>>>> this conflicts with current definition of typeof. Currently 
>>>> typeof(s) stripl(const(char)[] s); should be interpreted exactly
>>>> as const(char)[] stripl(const(char)[] s); it's unclear that
>>>> typeof here gets type of actual argument rather than parameter.
>>>> Currently typeof applies to parameter.
>>> That is correct.
>>>
>>> Andrei
>>
>> I've never understood the reuse of keywords for new meanings. I much
>> prefer new keywords for new concepts.
> 
> Even in natural language identical words are reused for various 
> different meanings. This suggests that people would not feel comfortable 
> with a very large vocabulary. The size of vocabularies varies 
> dramatically, but if you look closer you'll see that languages with 
> large vocabularies tend to have simpler grammars, suggesting that a 
> language's overall complexity is a constant-sum game.
> 
> In programming languages growing the vocabulary indiscriminately is 
> worse because it chews into the vocabulary available to user-defined 
> symbols.
> 
> Also, whenever a feature is to be integrated into the language, it is 
> preferable if possible to integrate it under an existing concept instead 
> of "allocating" a new concept to it.
> 
> 
> Andrei

But this is somewhat unprecedented in D. In other situations of keyword 
recycling, the new keyword meaning was usually added in a new context 
where the previous use of the same keyword was not valid and was totally 
unrelated. (ie, 'invariant' for example).

But this makes new use of typeof in a situation which is very similar to 
the previous use, but not consistent or orthogonal with such previous 
use (ie, the behavior is quite different). The only thing that 
distinguishes the uses is whether the typeof expression references a 
parameter defined ahead, instead of something which is in scope. This 
seems confusing to look for.
In fact, one could argue that typeof (the normal one) used in a function 
return type should be able to see the function's parameter, even though 
syntactically it appears before (semantically it makes more sense to 
come afterwards).

-- 
Bruno Medeiros - Software Developer, MSc. in CS/E graduate
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list