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